Insight Technology, Inc

インサイトテクノロジー

Japanese | English

株式会社インサイトテクノロジー 発行
http://www.insight-tec.com/jp/
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━Vol.36
   ☆☆☆  おら!オラ! Oracle −どっぷり検証生活− ☆☆☆
                             2000.12.20
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆
/// ///┏━━━━━━━━━━━━━━━━━━━━━━━━━┓/// ///
★  ★ ┃                                                  ┃★  ★
/// ///┃  OOW(Oracle Open World)は大盛況のうちに終了  ┃/// ///
★  ★ ┃        ありがとうございました!!        ┃★  ★
/// ///┃                                                  ┃/// ///
★  ★ ┗━━━━━━━━━━━━━━━━━━━━━━━━━┛★  ★
★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆

          ┏━━━━━━━━━━━━━━━━━━━━━━┓
          ┃☆★アンケートに答えて書籍をもらおう!!★☆┃
         ┗━━━━━━━━━━━━━━━━━━━━━━┛

以下のアンケートにお答えいただくと抽選で30名様に現在好評発売中の
「 Oracleデータベース管理を極める13章」をプレゼントします。
締め切りは 次回のメルマガ発行日(12月27日)となります。
当選者にはメールにてご連絡させていただきます。なお、お名前やご住所等は
当選した方にメール連絡させていただいた際にお聞きしますので、
アンケートご回答の際は以下の項目にのみお答えいただければ結構です。
皆さん、ふるってご応募ください。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
◆◆アンケート◆◆━━━━━━━━━━━━━━━━━━━━━━━━━
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
ご回答は以下のメールアドレスに、以下の件名にてお願いします。

件名:アンケート


1.Oracleに関連してお困りのことをA〜Hより選択してください。
   (複数回答可)

   A.H/W増強の際、CPU、ディスク、メモリなどのうち、
     何に投資すればよいのか、もっとも効果的な増強ポイントがわかりづらい
    (システム投資の判断が難しい)
   B.信頼できるパートナー(Oracleコンサルタント)の不在
   C.システムのパフォーマンス
   D.システム運用の仕組み
   E.DB管理者が育たない
   F.Oracle技術者が育たない
   G.自らのスキルアップ
   H.その他
    (何かございましたらご自由にお書きください。)

2.あなた様の会社での役割(役職)をお教えください。
  (             )

3.メルマガの内容に関しまして、ご要望・ご質問等ございましたら
    お書きください。
  (                                                 )


ご協力ありがとうございました。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
<<目次>>
■Oracle検証生活・・・ソートに関する検証
■Oracle入門生活・・・参照整合性制約について
■お知らせ・・・○Oracle管理ツール Performance Insight
		○SQeeLのご案内		○連載情報
		○書籍ご予約受付中	○QAについて
■編集者より

■■注意事項!!■■
本文中にテーブルが含まれていますので、お読みになる際はMSゴシック等、
等幅フォントをお使いただくことをお勧めします。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
▼ Oracle検証生活 ▼━━━━━━━━━━━━━━━━━━━━━━━━
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
検証生活 
〜ソートに関する検証 その1 〜
ペンネーム ちゃむ

今回から、ソートに関しての検証を行なう。ソートがシステムのボトルネックに
なることは、度々ある。例えば、大量更新を行なっていない時間帯にあるデ
ィスクに書き込みが集中していて、調べていくとHEAVYなSORTを伴うSQL文によって
一時表領域(ソート用の表領域)の書き込み量が激しいなんてことはよくある。

では、どのような処理がソートを伴なうのか見ていこう。
具体的に言うと、ORDER BY、GROUP BY、DISTINCT、CREATE INDEX、UNION、INTERSECT、
MINUS、ソート・マージ結合、ANALYZEコマンドなどがソートを伴う処理である。

ソートを伴う処理を実行して実際にソートを行なったかどうかを確認してみよう。
でもその前に、V$SYSSTATのソートに関する統計情報の説明をしよう。

<V$SYSSTATからメモリーソート率を求める>

sorts (memory)  メモリー上でソートした回数
sorts (disk)    ディスク上でソートした回数
sorts (rows)    ソートされた行の合計数

V$SYSSTATでsorts (memory) とsorts (disk)の情報をとってソート全体の回数に
対してメモリー上で何パーセント行われているか(メモリーソート率)をチェック
する方法は以下のSQLで確認できる。(メモリーソート率)
メモリーソート率 → sorts (memory)×100 /(sorts (memory) + sorts (disk))

SELECT A.VALUE * 100 / (A.VALUE+B.VALUE) MEM_SORT_RATE FROM V$SYSSTAT A,V$SYSSTAT B
WHERE A.NAME='SORTS (MEMORY)' AND B.NAME='SORTS (DISK)';

SELECT

MEM_SORT_RATE
-------------
    99.969947

実際は、上記のSQL文よりも、チューニングしたい時間帯でvalueの差分を取ってメモリーソ
ート率を求めるほうが有効である。
(上記のSQLはORACLEが起動してからのメモリーソート率である。)

<実際にソートを伴なう処理かどうかを確認する方法>

実際にソートを行なう処理かを確認する方法としては、システム全体の統計情報を
格納しているV$SYSSTATではなく、セッション別に統計情報を格納してあるV$SESSTAT
で見ることにする。その統計情報の中のsorts (memory)、sorts (disk)、sorts (rows)
の累計値の差分をとって実際にソートをしたどうか確認しよう。

1.セッションIDを確認する。(ソートをする処理に対して発行する)

SELECT SID FROM V$SESSION WHERE AUDSID =(SELECT USERENV('SESSIONID') FROM DUAL);

      SID
---------
       10

もし、V$MYSTATへのSELECT権限があるなら以下のSQLでもわかる。
SELECT SID FROM V$MYSTAT WHERE ROWNUM < 2;


2.そのセッションからソートをすると思われる処理を実行する。

以下 ソート処理の例

A.ORDER BY

SELECT * FROM EMP ORDER BY ENAME;

B.GROUP BY

SELECT DEPTNO ,SUM(NVL(COMM,0)) FROM EMP GROUP BY DEPTNO;

C.DISTINCT

SELECT DISTINCT COMM FROM EMP;

D.INDEX作成

CREATE INDEX EMP_ENAME ON EMP(ENAME);

E.ANALYZE処理

ANALYZE TABLE T10MAN_ORG COMPUTE STATISTICS;

F.ソートマージジョイン

SELECT /*+ USE_MERGE(E)  USE_MERGE(D) FULL(D) */ 
 * FROM EMP E,DEPT D WHERE E.DEPTNO=D.DEPTNO;


3.別のセッションからソートを行なっているセッションのSORT回数を検索する。

先ほど検索したSID=10で絞り込むことがポイントである。

SELECT N.NAME,SES.VALUE FROM V$SESSTAT SES,V$STATNAME N 
WHERE SID=10 AND SES.STATISTIC#=N.STATISTIC# AND N.NAME LIKE 'sorts%';

上記のSQL文でソート前とソート後の統計情報の値を確認する。


実例 

<ソート前の統計情報確認>

セッションID=10以外のセッションより

SELECT N.NAME,SES.VALUE FROM V$SESSTAT SES,V$STATNAME N 
WHERE SID=10 AND SES.STATISTIC#=N.STATISTIC# AND N.NAME LIKE 'sorts%';

NAME                  VALUE
--------------------- ---------
sorts (memory)        37
sorts (disk)          0
sorts (rows)          251

<実際にソートの処理を実行する>

セッションID=10のセッションより

SELECT * FROM EMP ORDER BY ENAME

12行が選択されました。

(NT版のEMP表を作成するscott.sqlというスクリプトは、そのままではEMPNO
=7788と7876のデータはINSERT文で失敗するバージョンがある。みなさんの環境
では14件かもしれないが私の環境では14-2=12件しか入っていない。 UNIX版で
はutlsampl.sqlかな  豆豆知識)

<ソート後の統計情報確認>

セッションID=10以外のセッションより

SELECT N.NAME,SES.VALUE FROM V$SESSTAT SES,V$STATNAME N 
WHERE SID=10 AND SES.STATISTIC#=N.STATISTIC# AND N.NAME LIKE 'sorts%';

NAME                  VALUE
--------------------- ---------
sorts (memory)        38
sorts (disk)          0
sorts (rows)          263

よって

sorts (memory)=38-37=1回
sorts (disk)  =0-0=0回
sorts (rows)  =263-251=12行

これは、メモリ上でソートを1回行なったことを示す。

また、共有SQL上に載っていないSQL文に関しては、sorts (memory)の値が増え
てしまう。例えば、ソートを伴なわないSELECT * FROM EMP;などというSQL文
でも、共有SQL上に載っていない(キャッシュミスする)とsorts (memory)が
1増える。(リカーシブコールの中にはSORTを行なっているようなSQL文は見
あたらない。なんで増えるが不思議)

この方法は、ソート回数に限らず、他の統計情報に対しても同様なやり方で
利用できるので応用していただきたい。


ORACLE OPEN WORLDでインサイトテクノロジーのブースは見ていただきましたか?
抽選で弊社の書籍をお渡しする予定でしたが、非常に混雑してしまったので、
途中で取りやめました。申し訳ありません。その代わりといってはなんですが、
今回のアンケートに答えていただき、抽選に参加していただければと思います。

以上 忘年会の予約がなかなかとれない 茅ヶ崎にて

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
▼ Oracle入門生活 ▼━━━━━━━━━━━━━━━━━━━━━━━━
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
<Oracle入門> ペンネーム モンキー・ターン

読者のみなさまの熱いご要望により、どっぷり検証生活する前の生活をお送り
したいと思います。
題して、「おら!オラ!Oracle どっぷり入門生活」
毎週、基本的な内容をちょっぴりお送りしていこうと思います。

--- それでは、どっぷり入門生活スタート! -----------------------------

読者の皆様は、大半の方が Oracleをさわったことがあると思います。
しかし、Oracle使っているけど、本当に使っているだけで基本的な部分が??
って方、いらしゃいませんか?
また、Oracleを基本から勉強したい方、Oracleを基本から勉強しなおしたい方
の為にお送りしていこうと思います。

<< 今回のテーマ >>
・参照整合性制約ってなに?

< 参照整合性制約ってなに? >

表の参照整合性制約について少しお話しようと思う。

リレーショナル・データベースは、表同士の関連付けを行うことができる。
表同士の関連付けは、ある表の列の値と、別の表の列の値によって行なう。
値を参照する側の表を「子表」、関連する値を持つ列のことを「外部キー」と呼ぶ。
値が参照される側の表を「親表」、参照される値を持つ列のことを「親キー」
または、「参照キー」 と呼ぶ。
「参照キー」は、主キーや一意キーを指定する。

「主キー」とは、PRIMARY KEY制約のことで列または列の組み合わせを表の主キー
として指定する。行を一意に識別する。(NOT NULL)1表あたり1つである。

「一意キー」とは、UNIQUE制約のことで列または列の組み合わせを一意キーと
して指定する。一意キーを持つ列に重複値は挿入できない。単一列からなる
一意キーは、NULL値を1つだけなら含むことができる。

なぜ「参照キー」に「主キー」または「一意キー」である必要があるのだろうか?

参照整合性制約が設定されている子表に対してデータを INSERTすると、整合性
を保証するために(親表にも同じデータがあることを保証するため)親表を参照
する。このときに、高速でデータを参照するために親表の実データを参照するの
ではなく、索引にアクセスしてデータの有無をチェックするのである。このため
に、参照キーには索引が存在しなければならないのである。「一意キー」と「主
キー」は自動的に索引が生成される。

親表の親キーと子表の外部キーに格納される値の整合性を保つのが、参照整合
性制約である。すなわち、参照整合性制約が設定されていれば、子表にデータを
入力するときに自動的に親キーを参照し、親キーに格納されていない値の入力
を禁止するのである。 

簡単な例として、(皆様ご存知の)EMP表とDEPT表の関係で説明する。

この場合、DEPT表が親表でEMP表が子表である。


親表(DEPT)
CREATE TABLE DEPT
  ( DEPTNO NUMBER(2)     CONSTRAINT PK_DEPT PRIMARY KEY , ←「親キー」
    DNAME  VARCHAR2(14) ,
    LOC    VARCHAR2(13)
  ) ;


子表(EMP)
CREATE TABLE EMP
  ( EMPNO     NUMBER(4)    CONSTRAINT PK_EMP PRIMARY KEY,
    ENAME     VARCHAR2(10),
    JOB       VARCHAR2(9),
    MGR       NUMBER(4),
    HIREDATE  DATE,
    SAL       NUMBER(7,2),
    COMM      NUMBER(7,2),
    DEPTNO    NUMBER(2)    CONSTRAINT FK_DEPTNO REFERENCES DEPT ←「外部キー」
  ) ;

当然のことであるが、親表が存在しないと子表は作成できない。

今回は、この辺で「どっぷり入門生活」おしまい -------------------------

次回は、「Oracle入門」の続きです。
実際に参照整合性制約を作ってみたいと思います。お楽しみに!
「どっぷり入門生活」は、Oracle初・中級レベルを対象に書いていきたいと思います。

「どっぷり入門生活」は、基本的な質問をお待ちしています。また、このような
テーマでやってほしい等の要望が御座いましたら、メールでどしどしお寄せく
ださい。

以上 OOWで大声を出しすぎて、3日も声がかれた モンキー・ターンより

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
▼ Oracle 管理ツール Performance Insight ▼━━━━━━━━━━━━
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Oracleを知り尽くしたメンバーが開発したOracleパフォーマンス監視ツール
の決定版。それがPerformance Insightです。インサイトテクノロジーの技術
者の知恵とノウハウがここに結集!
パフォーマンス監視だけでなくOracleを使用しているシステムの運用、管理、
そして開発にも役立つ機能がいっぱいです。
詳しくは以下のURLをご覧ください。

http://www.insight-tec.com/jp/products/products.html

また無料で試使用することも可能です。
是非お問い合わせください。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
▼ SQeeLのご案内  ▼━━━━━━━━━━━━━━━━━━━━━━━━
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
<プログラマ待望の言語SQeeL>
●手軽に使える、速い、そしてWEBに適した新言語SQeeL!

フリーソフトSQeeLは、以下のURLより好評ダウンロード中!
既に多くの方々にご利用いただいております。
あなたもSQeeLの世界を体験してみませんか?

http://www.SQeeL.org

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
▼ 連載情報 ▼━━━━━━━━━━━━━━━━━━━━━━━━━━━
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
<雑誌連載>
Oracleのエキスパートとして定評のある弊社のスタッフが執筆しております
連載記事に関してご紹介しています。
現在「DB Magazine」に、Oracleビギナー向け連載が掲載されています。
1月号が発売中ですので、是非ご覧下さい。

http://www.insight-tec.com/jp/topics/magazine.html
上記のURLでタイトルがご覧になれます。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
▼ 書籍ご予約受付中 ▼━━━━━━━━━━━━━━━━━━━━━━━
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
<送料無料でお届けします>
「Oracle8 プロフェッショナルテクニック」は大好評につき、現在在庫切れと
なっており、ご注文いただいた皆様にはたいへんご迷惑をおかけしております。
まもなく入荷する予定ですので、今しばらくお待ちください。
これからご注文いただく方も、入荷次第発送させていただくということで
予約注文を受付けておりますのでよろしくお願い申し上げます。

また弊社のHPよりお申し込みいただいた方に限り、送料無料でお届けします。
専門書としては異例の速さで増刷が決定するほどの好評をいただい
ている「Oracle8 プロフェッショナルテクニック」をぜひご活用ください。

http://www.insight-tec.com/jp/topics/books.html
ホームページより受付中です。お早めに!

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
▼ QAについて ▼━━━━━━━━━━━━━━━━━━━━━━━━━
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
<皆様からのQAを受付けております>
皆様のQAにはできるだけ、お答えしたいと思っています。
すべてのQAにお答えすることはできないかもしれませんが、
適宜メルマガ内でとりあげていく予定ですので、是非QAをお寄せください。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
▼ 編集者より ▼━━━━━━━━━━━━━━━━━━━━━━━━━━
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
ようやくOOWが終わり、我がインサイトテクノロジーにも平穏さが戻って参
りました。訪れていただいた方々、どうもありがとうございました。また、
激励のメール等もいただき、スタッフ一同心から感激しています。気が付け
ばもうすぐクリスマスですねぇ。街が飾り立てられるこの季節は、寒いけれ
ど個人的には大好きな季節です。でも、家にはツリーがないんですよね。今
年こそ買おうかなぁ。うーん。悩んじゃう。		   by  UA

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
登録・解除は以下のURLで行うことができます。
http://www.insight-tec.com/jp/em/mail_magazine.html
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
<おら!オラ!Oracle−どっぷり検証生活−>
発行/編集:株式会社インサイトテクノロジー
http://www.insight-tec.com/jp

マガジンID:0000030093
本メールマガジンに掲載された記事を許可なく転載することを禁じます。
Copyright (c) 1996-2000, Insight Technology, Inc. All rights reserved.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

 メールマガジン登録/解除