Monday, October 26, 2009

なぜ診断イベントを理解すべきなのか。

たとえ開発者と言ってもオラクルが提供する診断イベントを理解するのが必要だと思います。たとえば次のような質問を見てください。



整列領域大きさ(Sort Area Size)によって整列がどのように行われるかを理解するように多様なテストを修行しています。どころでSORT_AREA_SIZEパラメータ値を300バイトで低く設定してもオラクルが最小値を自分で調整するらしいです。オラクルで使用可能な整列領域大きさの最小値がいくらなのか分かる方法は何でしょうか。


マニュアルには下記のように記述されています。


http://download.oracle.com/docs/cd/B28359_01/server.111/b28320/initparams232.htm


すなわち、整列領域大きさの最小値は6*8K(データベースブロックサイズ)=48Kバイトだというのが分かります。本当のエンジニアだったらここから進み、この最小値を目で確認する方法はないのか?と質問をするようになるはずです。


この類の質問に一番直接的に答ができるのが診断イベントです。たとえば10032イベントを活性化すれば、オラクルは整列作業の修行に対する詳細な統計情報を記録してくれます。


UKJA@ukja1021> @oerr 10032
10032
"sort statistics (SOR*)"
// *Cause:
// *Action:

また10033イベントを利用すれば実際の整列を修行しながら個別Sort Runたちをどのように使用するのかまで分かります。大変有用な情報でしょう。

UKJA@ukja1021> @oerr 10033
10033
"sort run information (SRD*/SRS*)"
// *Cause:
// *Action:
// *Cause:
// *Action:

10032イベントを利用してマニュアルの内容を検証してみましょうか。

drop table t1 purge;
create table t1
as select rpad('x',300,'x') as c1
from dual
connect by level <= 100
;

alter session set workarea_size_policy=manual;
alter session set sort_area_size=300;

alter session set events '10032 trace name context forever, level 1';

select c1 from t1 order by c1;

alter session set events '10032 trace name context off';

トレースファイルの内容は次のとおりです。SORT_AREA_SIZE値が正確に48Kバイトというのが確認できます。

---- Sort Parameters ------------------------------
sort_area_size 49152
sort_area_retained_size 16384
sort_multiblock_read_count 1
max intermediate merge width 2
---- Sort Statistics ------------------------------
Initial runs 1
Input records 100
Output records 100
Disk blocks 1st pass 4
Total disk blocks used 6
Total number of comparisons performed 102
Comparisons performed by in-memory sort 101
Comparisons while searching for key in-memory 1
Temp segments allocated 1
Extents allocated 1
Uses version 2 sort
Uses asynchronous IO
---- Run Directory Statistics ----
Run directory block reads (buffer cache) 2
Block pins (for run directory) 1
Block repins (for run directory) 1
---- Direct Write Statistics -----
Write slot size 8192
Write slots used during in-memory sort 2
Number of direct writes 4
Num blocks written (with direct write) 4
Block pins (for sort records) 4
Cached block repins (for sort records) 1
Waits for async writes 3
---- Direct Read Statistics ------
Size of read slots for output 8192
Number of read slots for output 2
Number of direct sync reads 2
Number of blocks read synchronously 2
Number of direct async reads 2
Number of blocks read asynchronously 2
---- End of Sort Statistics -----------------------

立派な開発者ならデバッガ(Debugger)に上手なはずです。オラクルの診断イベントはオラクルデバッガと言えます。オラクルを深く理解しようとすれば必修的な知識だと言えます。

No comments:

Post a Comment