|
|
 |
 |
 |
第6章 システム統計情報とセッション統計情報 |
|
|
 |
|
本章ではパフォーマンス診断にとって有効な情報となる統計情報について説明します。システム統計情報を定期的に取得し確認することでOracleデータベースの「動き」を把握することができますので活用していきましょう。
システム統計情報は、システム全体を表すV$SYSSTATビュー、セッション情報であるV$SESSTATビュー及びV$SYS_TIME_MODELビューが存在します。目的にあわせて必要な情報を収集してください。
また、各システム統計情報は累積値が記されていますので、特定期間の情報を得るためには、2点間の差分値を計算する必要があります。
|
V$SYSSTATビュー
|
V$SYSSTATビューには、インスタンスが起動してから現在までに発生したシステム統計の合計値が示されます。
以下に例を示します。
例)ユーザーがコミットした回数
ディスクから読込まれたブロック数
生成されたREDOの合計サイズ など
システム統計を示します。
<主な列>
・STATISTIC#
・NAME
・VALUE |
:統計番号 STATISTIC# 統計番号
:統計名
:統計値 |
V$SYSSTATビューを使用して統計情報を確認してみましょう。
例)「parse」という文字列を含む統計情報を調べる。
SQL> SELECT name,value
2 FROM v$sysstat
3 WHERE name LIKE '%parse%';
| NAME |
VALUE |
| -------------------- |
-------------- |
| parse time cpu |
1944 |
| parse time elapsed |
5517 |
| parse count (total) |
57742 |
| parse count (hard) |
2220 |
| parse count (failures) |
30 |
|
|
|
上記の例では、「parse」すなわち、「SQLの解析」に関係する統計情報を確認しています。解析に費やしたCPU時間(parse time cpu)や経過時間(parse
time elapsed)の状況や、SQL解析の合計数(parse count (total))、SQLのハード解析の数(parse count
(hard))を確認することができます。
| NOTE |
: |
統計の値だけをみて値が大きい、少ないを判断することはできません。これらの情報は定期的に記録し、変化を比較することに役立ちます。
|
|
|
|
◆代表的な統計一覧
以下にV$SYSSTATビューのNAME列で表示される代表的な統計情報の一覧を記します。 |
| 統計名 |
説明 |
| consistent gets |
ブロックの読取り一貫性が要求された回数 |
| CPU used by this session |
ユーザー・セッションが使用したCPU時間(1/100秒) |
| db block gets |
CURRENTブロックが要求された回数 |
| DB time |
データベース・ユーザー・レベルのコールの実行に要した経過時間 |
| DBWR checkpoints |
チェックポイントの回数 |
| DBWR make free requests |
DBWRが空きバッファを作成するように要求された回数 |
| execute count |
SQL実行コールの合計数 |
| free buffer inspected |
再利用バッファを検索するためにLRUリストの終わりからスキップされたバッファ数 |
| logons cumulative |
ログオンの合計数 |
| logons current |
現在ログインしている合計数 |
| opened cursors cumulative |
オープンされたカーソルの合計数 |
| opened cursors current |
現在オープンされているカーソルの合計数 |
| parse (hard) |
ハード解析された回数 |
| parse (total) |
解析の合計数 |
| parse time elapsed |
解析の合計経過時間(1/100秒) |
| physical reads |
ディスクから読込んだ合計ブロック数 |
| physical reads direct |
バッファ・キャッシュをバイパスしてディスクから直接読込んだ合計ブロック数 |
| physical writes |
ディスクに書込まれた合計ブロック数 |
| recursive calls |
再帰SQLの合計数 |
| redo buffer allocation retries |
REDOログ・バッファへの書込みを待機した回数 |
| redo entries |
REDOエントリの数 |
| redo log space requests |
ログ・スイッチを待機した回数 |
| redo log space wait time |
redo log space requestsを待機した時間(1/100秒) |
| redo size |
生成されたREDOの合計サイズ |
| redo write time |
REDOログ・バッファのREDOをログ・ファイルに書出すのに要した合計時間(1/100秒) |
| session cursor cache hits |
セッション・カーソル・キャッシュを使用した回数 |
| session logical reads |
読込んだ合計ブロック数(consistent gets + db block gets) |
| session pga memory |
セッションのPGAサイズ |
| session pga memory max |
セッションが最大で使用したPGAサイズ |
| session uga memory |
セッションのUGAサイズ |
| session uga memory max |
セッションが最大で使用したUGAサイズ |
| sorts (disk) |
ディスク・ソート回数 |
| sorts (memory) |
メモリー・ソート回数 |
| sorts (rows) |
ソートされた行の合計数 |
| table fetch by rowid |
ROWIDによって(通常は索引アクセス)アクセスされた行の合計数 |
| table fetch continued row |
フェッチ作業中に検出された連鎖行・移行行の数 |
| table scan blocks gotten |
スキャンされたブロック数 |
| table scan rows gotten |
スキャンされた行数 |
| table scans (long tables) |
全表スキャンでlongテーブルがアクセスされた回数 |
| table scans (short tables) |
全表スキャンでshortテーブルがアクセスされた回数 |
| user commits |
ユーザーによって発行されたコミット数 |
| user rollbacks |
ユーザーによって発行されたロールバック数 |
| workarea executions - multipass |
SQL作業領域がmultipassモードで使用された回数 |
| workarea executions - onepass |
SQL作業領域がonepassモードで使用された回数 |
| workarea executions - optimal |
SQL作業領域がoptimalモードで使用された回数 |
|
|
V$SESSTATビュー |
V$SESSTATビューには、ユーザー・セッションが開始してから現在までの各セッションごとの統計が示されます。V$SESSTATビューには統計名がないため、通常V$STATNAMEビューと結合して使用します。
特定セッションの処理が、Oracleに対してどのような影響を及ぼしているかなどを調査する場合に役立ちます。
|
以下にユーザー・セッション統計名を示します。
<主な例>
・SID
・STATISTIC#
・VALUE |
:セッション識別子
:統計番号。この番号はリリースが変わると変更される可能性がある。
:統計値 |
|
◆V$STATNAMEビュー
|
以下に統計情報の統計名を示します。通常、V$SESSTATビューと結合して使用します。
<主な例>
・STATISTIC#
・NAMA |
:統計番号。この番号はリリースが変わると変更される可能性がある。
:統計名 |
V$SESSTATビューとV$STATNAMEビューを結合させてユーザ・セッションの統計情報を確認してみましょう。 |
| 例)SCOTTユーザー・セッションで生成されたREDOサイズを調べる。 |
SQL> SELECT se.sid,username,name,value
2 FROM v$sesstat st,v$statname sn,v$session se
3 WHERE st.statistic# = sn.statistic#
4 AND st.sid = se.sid
5 AND username = 'SCOTT'
6 AND name = 'redo size';
| SID |
USERNAM |
NAME |
VALUE |
| ----- |
---------- |
---------- |
---------- |
| 252 |
SCOTT |
redo size |
10316036 |
|
|
V$SYS_TIME_MODELビュー |
システム全体を調査するためには、様々な統計情報を「時間」という共通の比較尺度が必要となります。
そのため、V$SYS_TIME_MODELビューは、様々な操作に対してセッション全体に蓄積された時間を示します。
例えばDB timeは、データベース・サーバーでユーザー要求の処理にかかった累積時間です。
これには、アイドル状態でないユーザー・セッションすべての待機時間とCPUタイムが含まれるため、チューニングにより待機時間が減少すれば、特定期間のDB
timeを減少させることができます。
また、セッション別統計として、V$SESS_TIME_MODELビューも存在します。
|
以下に様々な操作に対してセッション全体に蓄積された時間を示します。
<主な例>
・STAT_ID
・STAT_NAME
・VALUE |
:時間統計の統計識別子
:統計名
:システムがこの操作に要した時間(1/1000秒単位) |
|
◆統計情報
以下にV$SYS_TIME_MODELビューのSTAT_NAME列で表示される代表的な統計情報の一覧を記します。 |
| ・DB time |
データベース・ユーザー・レベルのコールの実行に要した経過時間。バックグラウンド・プロセスに費やされた時間は含まれていない。 |
| ・DB CPU |
データベース・ユーザー・レベルのコールの実行に要したCPU時間。バックグラウンド・プロセスに費やされた時間は含まれていない。 |
| ・sequence load elapsed time |
データ・ディクショナリから次の順序番号を取得するために要した時間。 |
| ・parse time elapsed |
SQLの解析に費やされた経過時間。ソフト・ハード解析両方を含む。 |
| ・hard parse elapsed time |
SQLのハード解析に費やされた経過時間。 |
| ・sql execute elapsed time |
SQLの実行に要した経過時間。SELECTの場合は、問合せ結果のフェッチを実行するために要した時間も含まれる。 |
| ・connection management call elapsed time |
セッションの接続および切断コールの実行に要した時間。 |
| ・failed parse elapsed time |
最終的に解析エラーを戻して失敗したSQL解析の実行に要した時間。 |
| ・hard parse (sharing criteria) elapsed time |
SQLキャッシュ内の既存カーソルの共有ができないために発生したSQLハード解析の実行に要した時間。 |
| ・hard parse (bind mismatch) elapsed time |
SQLキャッシュ内の既存カーソルとのバインド・タイプまたはバインド・サイズの不一致のため発生したSQLハード解析の実行に要した時間。 |
| ・PL/SQL execution elapsed time |
PL/SQLの実行に要した時間。SQL文の再帰的実行または解析に費やされた時間やJAVA VMの再帰的実行に費やされた時間は含まれない。 |
| ・PL/SQL compilation elapsed time |
PL/SQLコンパイラの実行に費やされた時間。 |
| ・inbound PL/SQL rpc elapsed time |
インバウンドPL/SQLリモート・プロシージャ・コールの実行に費やされた時間。SQLおよびJAVAの再帰的実行や費やされたすべての時間を含む。従って、この値とPL/SQL
execution elapsed timeの値との関連は簡単に判断できない。 |
| ・Java execution elapsed time |
Java VM1の実行に費やされた時間。SQL文の再帰的実行や解析に要した時間またはPL/SQLの再帰的実行に要した時間は含まれない。 |
|
|
V$SYS_TIME_MODELビューを参照してセッション全体に蓄積された時間を確認してみましょう。
例)V$SYS_TIME_MODELビューを参照する。 |
SQL> SELECT * FROM v$sys_time_model;
| STAT_ID |
STAT_NAME |
VALUE |
| ------------ |
------------------------------------------ |
---------- |
| 3649082374 |
DB time |
19449341986 |
| 2748282437 |
DB CPU |
5934739299 |
| 4157170894 |
background elapsed time |
8939642954 |
| 2451517896 |
background cpu time |
2064001619 |
| 4127043053 |
sequence load elapsed time |
351210316 |
| 1431595225 |
parse time elapsed |
15629538588 |
| 372226525 |
hard parse elapsed time |
14166623161 |
| 2821698184 |
sql execute elapsed time |
16287570138 |
| 1990024365 |
connection management call elapsed time |
1983799079 |
| 1824284809 |
failed parse elapsed time |
4659188764 |
| 4125607023 |
failed parse (out of shared memory) elapsed time |
4571631097 |
| 3138706091 |
hard parse (sharing criteria) elapsed time |
310672215 |
| 268357648 |
hard parse (bind mismatch) elapsed time |
36671358 |
| 2643905994 |
PL/SQL execution elapsed time |
1130933048 |
| 290749718 |
inbound PL/SQL rpc elapsed time |
0 |
| 1311180441 |
PL/SQL compilation elapsed time |
1091741754 |
| 751169994 |
Java execution elapsed time |
0 |
|
|
|
次章ではディスクI/Oを効率化させる為のストライプ化についてご紹介します。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 |
第7章 ストライプ化とは |
|