ちゃむ前回は、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しか設定できなかったはず。2)という2つのパラメータがある。これらにより、直接書き込み用バッファの大きさは、SORT_WRITE_BUFFER_SIZE×SORT_WRITE_BUFFERSで決定される。以下のSQL文で上記のパラメータのデフォルト値が正しいという証拠を示す。TRUEsort_write_buffersのデフォルト値が1となっているリファレンスマニュアルがあるので注意してほしい。上記の検索結果がsort_write_buffersのデフォルト値が2である証拠である。さきほどの、マニュアル中に以下のような記述がある。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であるかを確認してみよう。FILE#=2;上記のSQL文を1秒おきに発行し動きを見る。パフォーマンスインサイトの中で使用されている言語です。監視ジョブとかもちょーイージーに作れます。囲むと変数の値が展開される。X$BHの様子>前回同様、以下が1秒ごとのバッファ数の推移の抜粋であるが、1ブロックだけデータベースバッファに載っている様子が確認できる。ダイレクトソートを行なっている証拠である。X$BHの様子>前回同様、以下が1秒ごとのバッファ数の推移の抜粋であるが、200個のデータベースバッファがすべて、ソートセグメントで埋め尽くされてしまった様子を確認できる。モンキーターン今回は、「整合性制約の状態」の最終回をお送りしよう。VALIDATE」に設定して動きを見てもらった。VALIDATE」に設定したときの動きを見てみよう。検証で使うテーブルを作成する。VALIDATE」の状態になるのである。NOVALIDATE」状態(データ変更、既存のデータもチェックされない)にして、既存のデータの一意性を崩して2つの状態の違いを見てみよう。;これで、テーブルWORKは、一意なデータではなくなった。NOVALIDATE」状態について見てみよう。NOVALIDATE」の状態とは、データの変更はチェックされるが既存のデータはチェックされないのである。エラーが発生しました。VALIDATE」状態について見てみよう。VALIDATE」の状態とは、制約を何も指定せずに作成した場合この状態である。変更するデータ、既存のデータ両方がチェックされる。エラーが発生しました。VALIDATE」状態のときは、既存のデータに一意性違反があるのでエラーになっている。NOVALIDATE」状態のときは既存のデータはチェックされないはずであるが、ここではエラーが起こっている。一意な索引であるため邪魔をしているのである。そこで、主キーを含む一意でない索引を使って主キー制約を動作させて主キーの制約チェックが行われるようにしてみよう。検証で使うテーブルを作成する。;これで、一意でないデータのテーブルが作成された。このテーブルWORK2に一意でない索引を作成する。索引が作成されました。この索引を使って、主キー制約を動作させて主キーの制約チェックを行なうのである。WORK2_IDXテーブルWORK2を作成したときに定義したPK_WORK2索引が使われていないのが確認できる。制約が正しく動作するか見てみよう。エラーが発生しました。NOVALIDATE」状態のときに、データの変更はチェックされるが既存のデータはチェックされないのが確認できる。NOVALIDATE」の利点は、一意でない索引で主キー制約を動作できるので、一意索引の作成が行なわれない。索引列の重複も避けることができるのである。次回から、内容を一変して新装開店しますので、しばらくお待ちください。————————-「どっぷり入門生活」では、基本的な質問をお待ちしています。このようなテーマでやってほしい等の要望がございましたら、メールでどしどしお寄せください。reserved.トップページ企業概要プライバシーポリシ。