Client result cache (クライアント結果キャッシュ)と client_result_cache_stats$の怪しい関係 #1 Tweet
pga_aggregate_targetネタをやる予定が…client result cache(クライアント結果キャッシュ)ネタを先にやることにw
なにそれ? 美味しいのって感じの人はググって調べてもらうにしても
以下の辺りを見るとざっとなにが嬉しいのか分るかも :)
http://www.ooug.org/presentations/2010slides/Oracle_11g_Results_Cache.ppt
環境は、CentOS5.5 - Oracle11g R1 11.1.0.7.0 EEで、examplesを追加インストールして $ORACLE_HOME/rdbms/demo以下にcdemoqc.c及びcdemoqc.sqlをインストールしてあります。
あ、そうそう、今回の中心人物は、client_result_cache_stats$ビュー。クライアント結果キャッシュがどの程度効いているか客観的に判断するための統計情報が表示される。
http://download.oracle.com/docs/cd/E16338_01/server.112/b56311/statviews_2150.htm
さて、やっと本題です。
クライアント結果キャッシュがどの程度嬉しいのか確認する意味もあり、examplesをインストールして試し始めて、一番最初に悩みました。
examplesをインストールすると、クライアント結果キャッシュ用のOCIのデモプログラム cdemoqc.cを実行しても、client_result_cache_stats$ビューに該当クライアントのクライアント結果キャッシュの統計情報が表示されません。(表示されないというのは0件という意味ではなく、有るみたいなんだけど、値が0のままということなんです。見た瞬間人柱確定コースw)
クライアント結果キャッシュにクエリ結果がキャッシュされ、サーバとのラウンドトリップが無くなっているか確認したいだけなに、なんでハマるんじゃ〜w
と、叫びつつ。
cdemoqc.cのprint_stats()とその前に60秒スリープする部分のコメントを削除しました。
cdemoqc.cのオリジナルをcdemoqc.c.orgとしてdiffした結果。(とりあえず載せておきますねw)
[oracle@lampeye demo]$ diff cdemoqc.c.org cdemoqc.c
138d137
< /*
144d142
< */
[oracle@lampeye demo]$
実行した結果(makeし忘れないでね)。cdemoqc中からは60秒後にclient_result_cache_stats$の統計情報が確認できています。しか〜〜〜〜し!
(尚、事前に別xtermからSQL*Plusでsysユーザに接続、cdemoqc実行中に、client_reslut_cache_stats$ビューを確認します。)
[oracle@lampeye demo]$ ./cdemoqc
Query cache is enabled by using result_cache hints
Connected to Employee Session
Connected to HR Session
Employee: Execute will fetch rows from server
Employee: Execute will fetch rows from local cache
HR: Execute will cause a roundtrip during first execute, but the same result
set created in Employee Session will be shared thereafter
HR: Execute will fetch rows from local cache
HR: Updating the table
Employee: Execute will fetch rows from server and hence the local result set
will be updated
HR: Execute will fetch rows from updated local cache
Employee: Execute will fetch rows from local cache
Sleeping for few seconds to let the stat table to get updated
Please enter password for sys user to continue:
xxxxxxx
Contents of CLIENT_RESULT_CACHE_STATS$
STAT_ID NAME OF STATISTICS VALUE CACHE_ID
======= ================== ===== ========
1 Block Size 256 113
2 Block Count Max 4096 113
3 Block Count Current 128 113
4 Hash Bucket Count 1024 113
5 Create Count Success 2 113
6 Create Count Failure 0 113
7 Find Count 4 113
8 Invalidation Count 1 113
9 Delete Count Invalid 0 113
10 Delete Count Valid 0 113
Logging off all the connected sessions.
[oracle@lampeye demo]$
同じ時間で他のxtermの別セッションからclient_result_cache_stats$ビューを一生懸命問い合わせましたが、一度も統計情報にお目にかかれませんでした。
(以下のログからもわかるように、0件なのではなく同一CHACHE_IDの各列はリストされてはいるのですが、値が常に0のままなんです。)
・cdemoqc起動前
21:33:37 SYS> select * from client_result_cache_stats$;
レコードが選択されませんでした。
・cdemoqc起動直後
経過: 00:00:00.00
21:33:39 SYS> /
CACHE_ID STAT_ID NAME VALUE
---------- ---------- ------------------------------ ----------
113 1 Block Size 0
113 2 Block Count Max 0
113 3 Block Count Current 0
113 4 Hash Bucket Count 0
113 5 Create Count Success 0
113 6 Create Count Failure 0
113 7 Find Count 0
113 8 Invalidation Count 0
113 9 Delete Count Invalid 0
113 10 Delete Count Valid 0
10行が選択されました。
・cdemoqc側でclient_result_cache_stats$が表示された直後
経過: 00:00:00.00
21:33:46 SYS> /
CACHE_ID STAT_ID NAME VALUE
---------- ---------- ------------------------------ ----------
113 1 Block Size 0
113 2 Block Count Max 0
113 3 Block Count Current 0
113 4 Hash Bucket Count 0
113 5 Create Count Success 0
113 6 Create Count Failure 0
113 7 Find Count 0
113 8 Invalidation Count 0
113 9 Delete Count Invalid 0
113 10 Delete Count Valid 0
10行が選択されました。
・cdemoqc正常終了後
経過: 00:00:00.00
21:35:05 SYS> /
レコードが選択されませんでした。
経過: 00:00:00.00
21:35:12 SYS>
これでは、クライアント結果キャッシュが作成され、利用されているのか判断しにくいですよね〜。なんで他プロセスの別セッションからclient_result_cache_stats$の内容が見えないのでしょう?
(cdempqc.cの作りからして、きな臭い匂いがしませんか〜w マニュアルにも書かれていないけど〜いろんな仕掛けがありそーですぞ〜。)
ということで、原因を突き止めたので、次回からじわじわ追いつめていきますw
つづく。
| 固定リンク | 0
トラックバック
この記事へのトラックバック一覧です: Client result cache (クライアント結果キャッシュ)と client_result_cache_stats$の怪しい関係 #1:
コメント