Insight Technology, Inc

インサイトテクノロジー

Japanese | English

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

★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆
/// ///┏━━━━━━━━━━━━━━━━━━━━━━━━━┓/// ///
★  ★ ┃                                                  ┃★  ★
/// ///┃     NET&COM21にご来場いただいた皆様、     ┃ /// ///
★  ★ ┃       まことにありがとうございました。         ┃★ ★
/// ///┃  弊社製品Performance Insightはいかがでしたか? ┃ /// ///
★  ★ ┃                         ┃★ ★
/// ///┃    ご来場いただいた方も、そうでない方も、    ┃ /// ///
★  ★ ┃    Oracle管理ツールPerformance Insightを   ┃★ ★
/// ///┃   是非一度ご体験ください。(無料試使用可能)  ┃ /// ///
★  ★ ┃                                                  ┃★  ★ 
/// ///┗━━━━━━━━━━━━━━━━━━━━━━━━━┛ /// ///
★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆

<お詫び>
書籍をご購入いただいた皆様、ありがとうございました。
お申し込み多数のため、発送が遅れましたことをこの場を借りて
深くお詫び申し上げます。

大好評につき、消費税サービス+送料無料キャンペーン継続中!
この機会を是非お見逃し無く。
お申し込みは以下のURLより受付中!
http://www.insight-tec.com/jp/topics/books.html

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

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

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

前回は、SORT_DIRECT_WRITES=FALSE,TRUEのときの動きを説明した。
今回は、SORT_DIRECT_WRITES=AUTOダイレクトソートに関する検証を行なう。

<SORT_DIRECT_WRITES=AUTOについて>

SORT_DIRECT_WRITES=AUTOは、デフォルトである。
マニュアルには以下のような記述がある。

「このパラメータをAUTOに設定すると、ソート領域サイズの値がブロックサイ
ズの10倍を超える場合、ディスクへの書き込み用にソート領域からメモリが割
り当てられます。」

これでは、かなりわかりにくい。

これは、次のような記述だとわかりやすいだろう。

「このパラメータをAUTOに設定すると、SORT_AREA_SIZE=655360(640K)以上だと
ダイレクトソートが行われ、SORT_AREA_SIZE=655359以下だとダイレクトソートは
行われないで、データベース・バッファを経由したソート処理になります。」

つまり、SORT_AREA_SIZE=655360がダイレクトソートの閾値となっているのである。
これは、Oracle8、Oracle7.3であれば、ほとんどのプラットフォームで当てはまる
はずである。(Oracle7.2では、SORT_DIRECT_WRITESはTRUEかFALSEしか設定できな
かったはず。)

SORT_DIRECT_WRITES=TRUEに設定したときに有効になるパラメータの中で、
SORT_WRITE_BUFFER_SIZE  (直接書き込み用のバッファサイズ デフォルト 32k)
SORT_WRITE_BUFFERS (直接書き込み用のバッファ数の指定 デフォルト 2)
という2つのパラメータがある。これらにより、直接書き込み用バッファの大きさ
は、SORT_WRITE_BUFFER_SIZE×SORT_WRITE_BUFFERSで決定される。

直接書き込み用バッファに関しては、前回の図を参照

http://www.insight-tec.com/jp/em/mm/ref42_01.html


以下のSQL文で上記のパラメータのデフォルト値が正しいという証拠を示す。
(ISDEFAULT=TRUEのときは、デフォルト値のままだよという意味)

SELECT NAME,VALUE,ISDEFAULT FROM V$PARAMETER
WHERE NAME IN ('sort_direct_writes','sort_write_buffers',
'sort_write_buffer_size');

NAME                      VALUE      ISDEFAULT
----------------------------------------------
sort_direct_writes        AUTO       TRUE
sort_write_buffers        2          TRUE
sort_write_buffer_size    32768      TRUE


sort_write_buffersのデフォルト値が1となっているリファレンスマニュアル
があるので注意してほしい。
上記の検索結果がsort_write_buffersのデフォルト値が2である証拠である。


さきほどの、マニュアル中に以下のような記述がある。

「ソート領域サイズの値がブロックサイズの10倍」

これは、SORT_WRITE_BUFFER_SIZEとSORT_WRITE_BUFFERSのデフォルト値の
掛け算 2×32K=64kの10倍、つまり640Kというサイズが閾値となると解釈
できる。さきほど、「ほとんどのプラットフォームで当てはまる」と記述
した。実際に閾値が640K以外の環境は、今まで私はでくわしたことはない。
でも、もし閾値が640K以外であるとすれば、V$PARAMETERで検索されるsort_
write_buffersとsort_write_buffer_sizeのデフォルト値の掛け算の値も64K
以外なのであろう。

では、sort_direct_writes=autoのときのダイレクトソートを行なうか行なわ
ないかの閾値がsort_area_size=655360であるかを確認してみよう。

<検証方法>

<検証に使用するダイレクトソート処理を行なわないSQL文>

SQL>alter session set sort_area_size=655360;
SQL>alter session set sort_direct_writes=auto;
SQL>select * from t10man_org order by sal;

<検証に使用するダイレクトソート処理を行なうSQL文>

SQL>alter session set sort_area_size=655359;
SQL>alter session set sort_direct_writes=auto;
SQL>select * from t10man_org order by sal;


<検証に使用するデータベース・バッファの確認方法>

SELECT COUNT(*) CNT FROM X$BH WHERE FILE#=2;

上記のSQL文を1秒おきに発行し動きを見る。

以下は、弊社自社開発インタプリタ言語 「POPSQL」で確認
(再びいやしく宣伝ですが、「POPSQL」は弊社製品 パフォーマンスインサイトの中で
使用されている言語です。簡単でしょ。監視ジョブとかもちょーイージーに作れます。)

-----------------------POPSQL始め--------------------------
REM X$BHを検索するためにSYSでCONNECT
CONNECT sys/manager
SET FETCH 1
LOOP(;;)
	REM CNTはローカル変数(2行以上検索される場合はローカル配列)
    REM として count(*)の値が格納される
    SAMPLE  SELECT COUNT(*) CNT FROM X$BH WHERE FILE#=2;

	REM 画面に出力 \で囲むと変数の値が展開される。
    MESSAGE |\CNT\| 

	REM 1秒間スリープ
    SLEEP 1
ENDLOOP
-----------------------POPSQL終わり--------------------------

<検証結果>

<sort_area_size=655360、sort_direct_writes=autoのときの X$BHの様子>

前回同様、以下が1秒ごとのバッファ数の推移の抜粋であるが、1ブロックだけ
データベースバッファに載っている様子が確認できる。つまり、ダイレクトソ
ートを行なっている証拠である。

|1|
|1|
|1|
|1|
|1|
|1|

<sort_area_size=655359、sort_direct_writes=autoのときの X$BHの様子>

前回同様、以下が1秒ごとのバッファ数の推移の抜粋であるが、200個のデータ
ベースバッファがすべて、ソートセグメントで埋め尽くされてしまった様子を
確認できる。(db_block_buffers=200)

|192|
|198|
|196|
|200|
|200|
|200|


以上  しっかり並べとけ(でも「そーと」ね) 茅ヶ崎にて


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

今回は、「整合性制約の状態」の最終回をお送りしよう。

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

前回は、制約の状態を「DISABLE VALIDATE」に設定して動きを見てもらった。
今回は、制約の状態を「ENABLE NOVALIDATE」と「ENABLE VALIDATE」に設定し
たときの動きを見てみよう。


まず、検証で使うテーブルを作成する。

  SQL> CREATE TABLE WORK
           (ID number constraint PK_WORK PRIMARY KEY
                                NOT DEFERRABLE INITIALLY IMMEDIATE ) ;
  状態を何も指定しないときは、デフォルトで「ENABLE VALIDATE」の状態に
  なるのである。

  SQL> INSERT INTO WORK(ID) VALUES(1) ;
  SQL> INSERT INTO WORK(ID) VALUES(2) ;
  SQL> INSERT INTO WORK(ID) VALUES(3) ;
  SQL> INSERT INTO WORK(ID) VALUES(4) ;
  SQL> INSERT INTO WORK(ID) VALUES(5) ;
  SQL> COMMIT ;


  ここで、既存のデータに対して制約の状態によりチェックの違いを見るため
  に、制約を「DISABLE NOVALIDATE」状態(データ変更、既存のデータもチェッ
  クされない)にして、既存のデータの一意性を崩して2つの状態の違いを見
  てみよう。

  SQL> ALTER TABLE WORK DISABLE NOVALIDATE CONSTRAINT PK_WORK ;

  表が変更されました。

  SQL> INSERT INTO WORK(ID) VALUES(1) ;
                                  ^^^
  SQL> COMMIT ;

  これで、テーブルWORKは、一意なデータではなくなった。

まず、「ENABLE NOVALIDATE」状態について見てみよう。
「ENABLE NOVALIDATE」の状態とは、データの変更はチェックされるが既存の
データはチェックされないのである。

  SQL> ALTER TABLE WORK ENABLE NOVALIDATE CONSTRAINT PK_WORK ;

  エラー行: 1: エラーが発生しました。
  ORA-02437: (SCOTT.PK_WORK)を有効にできません - 主キー違反です。

次に、「ENABLE VALIDATE」状態について見てみよう。
「ENABLE VALIDATE」の状態とは、制約を何も指定せずに作成した場合この
状態である。変更するデータ、既存のデータ両方がチェックされる。

  SQL> ALTER TABLE WORK ENABLE VALIDATE CONSTRAINT PK_WORK ;

  エラー行: 1: エラーが発生しました。
  ORA-02437: (SCOTT.PK_WORK)を有効にできません - 主キー違反です。


「ENABLE VALIDATE」状態のときは、既存のデータに一意性違反があるのでエ
ラーになっている。
「ENABLE NOVALIDATE」状態のときは既存のデータはチェックされないはずで
あるが、ここではエラーが起こっている。
なぜかというと、テーブルを作成したときに主キー制約を付けて作成したため
に、暗黙で作成された索引 PK_WORK が一意な索引であるため邪魔をしている
のである。
そこで、主キーを含む一意でない索引を使って主キー制約を動作させて主キー
の制約チェックが行われるようにしてみよう。

まず、検証で使うテーブルを作成する。

  SQL> CREATE TABLE WORK2
                  ( ID number CONSTRAINT PK_WORK2 PRIMARY KEY
                        DISABLE NOVALIDATE ) ;
                        ~~~~~~~~~~~~~~~~~~

  SQL> INSERT INTO WORK2(ID) VALUES(1) ;
                                   ~~~
  SQL> INSERT INTO WORK2(ID) VALUES(2) ;
  SQL> INSERT INTO WORK2(ID) VALUES(3) ;
  SQL> INSERT INTO WORK2(ID) VALUES(4) ;
  SQL> INSERT INTO WORK2(ID) VALUES(5) ;
  SQL> INSERT INTO WORK2(ID) VALUES(1) ;
                                   ~~~
  SQL> COMMIT ;

これで、一意でないデータのテーブルが作成された。
このテーブルWORK2に一意でない索引を作成する。

  SQL> CREATE INDEX WORK2_IDX ON WORK2(ID) ;

  索引が作成されました。

この索引を使って、主キー制約を動作させて主キーの制約チェックを行なうの
である。

  SQL>  ALTER TABLE WORK2 ENABLE NOVALIDATE CONSTRAINT PK_WORK2 ;

  表が変更されました。

  SQL> SELECT TABLE_NAME , INDEX_NAME FROM USER_INDEXES
                                          WHERE TABLE_NAME = 'WORK' ;

  TABLE_NAME      INDEX_NAME
  --------------  --------------
  WORK            WORK2_IDX

テーブルWORK2を作成したときに定義したPK_WORK2索引が使われていないのが
確認できる。
制約が正しく動作するか見てみよう。


  SQL> INSERT INTO WORK2(ID) VALUES(1) ;
                                   ~~~
  エラー行: 1: エラーが発生しました。
  ORA-00001: 一意制約 (SCOTT.PK_WORK2) に反しています。


「ENABLE NOVALIDATE」状態のときに、データの変更はチェックされるが既存の
データはチェックされないのが確認できる。

「ENABLE NOVALIDATE」の利点は、一意でない索引で主キー制約を動作できる
ので、一意索引の作成が行なわれない。また、索引列の重複も避けることがで
きるのである。


次回から、内容を一変して新装開店しますので、しばらくお待ちください。


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

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

以上  風邪引いて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ビギナー向け連載が掲載されています。
3月号が発売中ですので、是非ご覧下さい。

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

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

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

2000年12月10日に発売された「Oracleデータベース管理を極める13章」の
販売を開始いたしました。「DB Magazine」に連載され大好評だった「体験的・
DBAのお仕事」が加筆され書籍化された同書は、おかげさまで発売以来2週間で
増刷となりました。現在キャンペーン期間中につき、同書に限りましては、
消費税サービス+送料無料、つまり本体価格のみでご購入いただけます。

http://www.insight-tec.com/jp/topics/books.html

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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
▼ 編集者より ▼━━━━━━━━━━━━━━━━━━━━━━━━━━
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
今日はバレンタインデーですねぇ。皆様、いかがお過ごしですか?バレンタイ
ンデーだからといって特に何も感じなくなってしまった自分が悲しい.....。
昔はチョコをあげたこともあったような気がするが、それも遠い記憶になって
しまった。そういえば女の子同士で交換していたような.....。チョコをあげ
て告白するなんて、ドキドキするんだろうなぁ。いいなぁ。やってみたかった
なぁ。あーあ、でももうそんな年じゃなくなってしまいました。残念!
							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-2001, Insight Technology, Inc. All rights reserved.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

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