Client result cache (クライアント結果キャッシュ)と client_result_cache_stats$の怪しい関係 #4 Tweet
前回のつづきです。
前回は、OCIStmtPreare2()まで実行させた。
OCIStmtExecute()かOCIStmtFetch2()が実行されたタイミングでclient_result_cache_stats$ビューへ該当クライアントから統計情報がアップされているように見える! という動きは確認。
今回は、OCIStmtExecute()まで実行させ、OCIStmtFetch2()をコメントアウトしてみた。
[oracle@lampeye demo]$ diff $ORACLE_HOME/rdbms/demo/cdemoqc.c.org $ORACLE_HOME/rdbms/demo/cdemoqc.c
138d137
< /*
144d142
< */
431,452c429,450
< else
< {
< printf("Contents of CLIENT_RESULT_CACHE_STATS$\n");
< printf("STAT_ID NAME OF STATISTICS VALUE CACHE_ID\n");
< printf("======= ================== ===== ========\n");
< do
< {
< status = OCIStmtFetch2((OCIStmt *)stmthp, (OCIError *)errhp, (ub4)1,
< (ub2)OCI_FETCH_NEXT, (sb4)0, (ub4)OCI_DEFAULT);
<
< if (status == OCI_ERROR || status == OCI_INVALID_HANDLE)
< {
< Checkerr(errhp, status, (oratext *)"OCIStmtFetch2");
< break;
< }
< else if (status != OCI_NO_DATA)
< {
< printf("%5d %-20s %8d %6d\n", statid, name, value, cacheid);
< }
< }while(status != OCI_NO_DATA);
<
< }
---
> // else
> // {
> // printf("Contents of CLIENT_RESULT_CACHE_STATS$\n");
> // printf("STAT_ID NAME OF STATISTICS VALUE CACHE_ID\n");
> // printf("======= ================== ===== ========\n");
> // do
> // {
> // status = OCIStmtFetch2((OCIStmt *)stmthp, (OCIError *)errhp, (ub4)1,
> // (ub2)OCI_FETCH_NEXT, (sb4)0, (ub4)OCI_DEFAULT);
> //
> // if (status == OCI_ERROR || status == OCI_INVALID_HANDLE)
> // {
> // Checkerr(errhp, status, (oratext *)"OCIStmtFetch2");
> // break;
> // }
> // else if (status != OCI_NO_DATA)
> // {
> // printf("%5d %-20s %8d %6d\n", statid, name, value, cacheid);
> // }
> // }while(status != OCI_NO_DATA);
> //
> // }
457a456,458
> printf("Sleep 10sec...\n");
> sleep (10);
>
[oracle@lampeye demo]$
mekeして実行!!!
[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:
xxxxxxxx!
Sleep 10sec...
Logging off all the connected sessions.
[oracle@lampeye demo]$
やった〜〜〜、見えた〜〜〜〜〜。OCIStmtExecute()が実行され、その要求がサーバまで到達する場合に、client_result_cache_stats$へ統計情報が反映されているように見える。
(ちなみに、ログは載せていないが、sleep(60)待機後、もう一度、クライアント結果キャッシュ対象のクエリを実行しても別クライアントからclient_result_cache_stats$から統計情報を参照することはできなかった)
・デモプログラム実行前の状態
21:59:31 SYS> /
レコードが選択されませんでした。
経過: 00:00:00.00
・デモプログラム実行直後の状態
21:59:32 SYS> /
CACHE_ID STAT_ID NAME VALUE
---------- ---------- ------------------------------ ----------
116 1 Block Size 0
116 2 Block Count Max 0
116 3 Block Count Current 0
116 4 Hash Bucket Count 0
116 5 Create Count Success 0
116 6 Create Count Failure 0
116 7 Find Count 0
116 8 Invalidation Count 0
116 9 Delete Count Invalid 0
116 10 Delete Count Valid 0
10行が選択されました。
経過: 00:00:00.00
・Please enter password for sys user to continue:が表示され、待機している状態
21:59:36 SYS> /
CACHE_ID STAT_ID NAME VALUE
---------- ---------- ------------------------------ ----------
116 1 Block Size 0
116 2 Block Count Max 0
116 3 Block Count Current 0
116 4 Hash Bucket Count 0
116 5 Create Count Success 0
116 6 Create Count Failure 0
116 7 Find Count 0
116 8 Invalidation Count 0
116 9 Delete Count Invalid 0
116 10 Delete Count Valid 0
10行が選択されました。
経過: 00:00:00.00
・Sleep 10sec...が表示され10秒待機している状態
22:00:54 SYS> /
CACHE_ID STAT_ID NAME VALUE
---------- ---------- ------------------------------ ----------
116 1 Block Size 256
116 2 Block Count Max 4096
116 3 Block Count Current 128
116 4 Hash Bucket Count 1024
116 5 Create Count Success 2
116 6 Create Count Failure 0
116 7 Find Count 4
116 8 Invalidation Count 1
116 9 Delete Count Invalid 0
116 10 Delete Count Valid 0
10行が選択されました。
経過: 00:00:00.00
・デモプログラム終了直後の状態
22:01:00 SYS> /
レコードが選択されませんでした。
経過: 00:00:00.00
22:01:23 SYS>
次回へつづく〜。
・Client result cache (クライアント結果キャッシュ)と client_result_cache_stats$の怪しい関係 #1
・Client result cache (クライアント結果キャッシュ)と client_result_cache_stats$の怪しい関係 #2
・Client result cache (クライアント結果キャッシュ)と client_result_cache_stats$の怪しい関係 #3
| 固定リンク | 0
トラックバック
この記事へのトラックバック一覧です: Client result cache (クライアント結果キャッシュ)と client_result_cache_stats$の怪しい関係 #4:
コメント