L
o
a
d
i
n
g
.
.
.

ホーム

お知らせ

製品・ソリューション

サービス

導入事例・パートナー

EXEM Academy・ブログ

会社情報

採用情報

2023.12.19

SQLチューニング 2nd Season(第6回)

第2章 SQLチューニング対象選定方法(3/8)

SQLチューニング対象の選定方法 の3回目は
「チューニング対象選択のための情報及び活用ツール」の後半 です。

それでは早速スタートしましょう!!

 2.2.3.1 SQL関連V$* VIEW(続き)


以下は、11gR1, 11gR2, 12cR1に新たに追加されたカラムをまとめた内容です。

11gR111gR212cR1
IS_BIND_SENSITIVEIO_CELL_OFFLOAD_ELIGIBLE_BYTESFULL_PLAN_HASH_VALUE
IS_BIND_AWAREIO_INTERCONNECT_BYTESCON_ID
IS_SHAREABLEPHYSICAL_READ_REQUESTSIS_REOPTIMIZABLE
SQL_PATCHPHYSICAL_READ_BYTESIS_RESOLVED_ADAPTIVE_PLAN
SQL_PLAN_BASELINEPHYSICAL_WRITE_REQUESTSIM_SCANS
TYPECHECK_MEMPHYSICAL_WRITE_BYTESIM_SCAN_BYTES_UNCOMPRESSED
OPTIMIZED_PHY_READ_REQUESTSIM_SCAN_BYTES_INMEMORY
LOCKED_TOTAL
PINNED_TOTAL
IO_CELL_UNCOMPRESSED_BYTES
IO_CELL_OFFLOAD_RETURNED_BYTES

io_cell_offload_eligible_bytes 

Exadata装置を使用する場合、Smart Scanを利用して cell offloadingでどれだけ実行するか? が重要な改善方法の
一つであると言えます。
したがって、装置がExadataであれば、io_cell_offload_eligible_bytesカラムを利用して Exadata Software 機能を
正しく使用しているか? Health Checkを行うことができるため、チューニング対象となるクエリについての現状を
判断するにあたって大きな助けになります。

上記にある二つの表は、各バージョンごとに追加されたカラムをまとめたものです。
ここで言及されているカラム以外にもどのようなカラムが追加されたか?をまずは確認してみてください。
その上で、チューニング対象の抽出、及び性能分析を行う際にご活用いただければと思います。

Oracleの New Feature について確認した上で、バージョン別に新しく追加されたカラムを利用して、効率的に
チューニング対象となるSQLを抽出することは、SQLの性能管理において非常に重要な部分です。

$SQL_BIND_CAPTURE

SQLチューニング時、Bind変数が占める割合は非常に高いです。
Bind変数に値を正しく適用してこそ、SQLを完璧に実行することができます。
またその結果として、SQLチューニング作業が正しく行われることにも繋がります。 
したがって、Bind変数に関連するビューである V$SQL_BIND_CAPTURE は、SQLチューニング時には常に使用
されるものであると考えてください。

このビューのCapture周期は、 Hidden Parameter である “_cursor_bind_capture_interval” によって決定され、
基本値は15分です。このCapture周期により、V$SQL_BIND_CAPTURE には全てのBIND DataがCaptureされません。
仮にCapture周期を短くしたとしても、すべてのSQL文のBIND変数をCaptureすることは不可能です。
また、当該ビューはCaptureされたデータであるため、リアルタイムに実行中のSQLのBind変数値は保存
されていませんが、V$SQL_MONITORビューを通じてリアルタイムのBind変数値を照会することができます。

カラムデータ型説明
HASH_VALUENUMBERLibrary Cache内にあるParent CursorのHash値
SQL_IDVARCHAR2
(13)
Library CacheにあるParent Cursor SQL識別子です。
名前VARCHAR2(30)Bind変数の名前
ポジションNUMBERSQL文でBind変数の位置(1から始まる)
データタイプNUMBERBind Dataタイプの内部的な識別子
VALUE_STRINGVARCHAR2(4000)文字タイプで表現されたBind値

V$SQL_PLAN

Library CacheにLoadされたSQLの実行PLANを抽出することができます。
V$SQL_PLANビューはSQLのPLAN情報を照会する以外に、下記のように多様に活用されます。


・ SQLの実行計画 ( Execution PLAN )

・ 特定のObject( テーブルorインデックス )を使うSQL照会( Object_Nameカラムを活用

・ データアクセスパターン把握 ( Full Table Scan or Index Scan – Optionsカラムを活用 )

・ 特定のObjectの照会パターンを把握( Object_Name, Access Predicates, Filter Predicatesカラムを活用 )

上記の内容以外にも、このビューを活用する方法は様々です。
例えば、特定のテーブルにインデックスを生成する時、V$SQL_PLANビューからそのテーブルを照会するSQLを
抽出して影響度を把握するのに使うこともできます。
このように、V$SQL_PLANビューは多様に活用することができるので、知っておいて損は無いビューです。

カラムDatatype説明
HASH_VALUENUMBERLibrary Cache内にParent CursorのHash値
(ADDRESSとHASH_VALUEでV$SQLAREAとJoin可能)
SQL_IDVARCHAR2(13)Library CacheにあるParent Cursor SQL識別子
PLAN_HASH_VALUENUMBERSQLプランに対する数値的な表現値。
一つのPLAN_HASH_VALUEを他のものと比較することで簡単に
二つの計画が同じかどうかを識別可能
OPERATIONVARCHAR2(30)SQL実行中に発生したOperationを表現 (Ex. TABLE ACCESS)
OPTIONSVARCHAR2(30)SQL実行中に発生したOperationのOptionを表現 (Ex. FULL)
OBJECT_OWNERVARCHAR2(30)Objectを所有しているUser名
OBJECT_NAMEVARCHAR2(30)SQL実行計画に表示されるObjectの名前
OBJECT_TYPEVARCHAR2(20)ObjectのType
OPTIMIZERVARCHAR2(20)Planの最初の行に対するOptimizerの現在のMode (Ex. ALL_ROWS)
IDNUMBER実行計画の各段階ごとに割り当てられた番号
PARENT_IDNUMBER現在の実行計画の直前の段階の割り当てられた番号。
COSTNUMBEROptimizerのCost-Basedアプローチで演算の予測されたコスト。
Rule-Basedアプローチの場合、このColumnの値はNullです。
CARDINALITYNUMBERCost-Based Optimizerで予測された値で、演算実行によって生成
されたRow数。
BYTESNUMBER
(In Bytes)
Cost-Based Optimizerで予測された値で、演算実行によって生成
されたByte数。
ACCESS_PREDICATESVARCHAR2(4000)WHERE条件に合致するDataを抽出する時、ACCESSで抽出される情報
FILTER_PREDICATESVARCHAR2(4000)WHERE条件に合致するDataを抽出する時、FILTERで抽出される情報

V$SQLTEXT

SQLのFULL TEXTを照会できるビューです。V$SQL_TEXTはOracle9i環境でたくさん使っていたViewです。
10g以降から V$SQL, V$SQLAREAにSQL_FULLTEXT カラムが追加されたので、SQL TEXTを抽出するためには
使用しません。最近では使わないビューであるので、カラムの使用としてはここでは除外することにします。



V$SQL_MONITOR

CPU TimeまたはI/O Timeが5秒以上のSQLの実行履歴を照会することができます。
現在実行中のSQLの実行情報を1秒単位でRefreshし、SQLの実行が終わってもすぐに削除されません。
少なくとも1分間は実行履歴が保存されます。
また、リアルタイム実行中のSQLのBind値を抽出することができ、より意味があるBind変数値を抽出する際には
非常に便利に使うことが可能です。

カラムデータ型     説明
STATUSVARCHAR2(19)SQLの実行状況:
EXECUTING – 実行中
DONE (ERROR) – Errorと一緒に実行が完了しました。
DONE (FIRST N ROWS) – すべてのRowがFetchされる前にApplication
によって実行完了。
DONE (ALL ROWS) – すべてのRowがFetchされ、実行完了します。
DONE – 実行完了 (parallel execution)
SIDNUMBER SQLを実行したSessionのSID(Session identifier)。
SQL_IDVARCHAR2(13)現在実行中のSQL ID
SQL_EXEC_START日付SQLの実行が開始された時間
SQL_PLAN_HASH_VALUENUMBERSQL PLANのハッシュ値
SESSION_SERIAL#NUMBERSessionのシリアル番号。
ELAPSED_TIMENUMBERElapsed time (in microseconds); 実行時に更新されます。
CPU_TIMENUMBERCPU time (in microseconds); 実行時に更新されます。
FETCHESNUMBERFetch Row数; 実行時にUpdateされます。
BUFFER_GETSNUMBERSQLのBlock Read量; 実行時にUpdateされます。
DISK_READSNUMBERSQLのDisk Read量; 実行時にUpdateされます。
DIRECT_WRITESNUMBERSQLのDirect Write量;実行時にUpdateされます。

現在実行してるSQLのBind変数の値を調べるためには下記のスクリプトを使うことができます。

SELECT bv.name  name ,
       bv.pos   position,
       bv.type  type,
       bv.value value
FROM   v$sql_monitor s ,
       xmltable( '/binds/bind'
                  passing xmltype( s.binds_xml )
                  COLUMNS name  VARCHAR2( 30 )   path '@name' ,
                          pos   NUMBER           path '@pos',
                          type  VARCHAR2( 15 )   path '@dtystr' ,
                          value VARCHAR2( 4000 ) path '.'
               ) bv
WHERE  s.sql_id=&sql_id
AND    s.sid=&sid
ORDER  BY bv.pos

V$ACTIVE_SESSION_HISTORY

名前の通り、ActiveなSessionのHistory情報を提供します。
収集周期は1秒であり、保管周期はSysauxテーブルスペースのサイズとActive Sessionの数によって異なります。
DB セッションは CPU によって占有されたり、Idle wait classes 状態に属する Event を待機していない限り、
active 状態とみなされます。
また、sampleごとに各active sessionに対する一つの rowを含み、最も最新のSession sample rowsを一番最初に
結果値として返します。V$ACTIVE_SESSION_HISTORYは、チューニング対象を抽出するよりも、モニタリングと
パフォーマンス問題の分析のカテゴリーで非常に有用に使用されます。
特に、Blocking_*, Current_* カラムの場合、現在のセッションのHolderセッションや、現在のセッションが
どのようなオブジェクトをIOしているかなどの有用な情報を提供するため、パフォーマンス問題の分析が非常に容易です。
ほとんどのColumnはV$SESSIONと同じです。

下の表は、10gR2 ~ 12cR1 まで V$ACTIVE_SESSION_HISTORY にカラムが追加された部分をまとめたものです。

10gR211gR1 11gR2 12cR1
FORCE_MATCHING_SIGNATUREREMOTE_INSTANCE#IS_AWR_SAMPLESQL_ADAPTIVE_PLAN_RESOLVED
BLOCKING_SESSIONTOP_LEVEL_SQL_IDIS_SQLID_CURRENTSQL_FULL_PLAN_HASH_VALUE
BLOCKING_SESSION_STATUSTOP_LEVEL_SQL_OPCODESQL_OPNAMEIN_INMEMORY_QUERY
BLOCKING_SESSION_SERIAL#。SQL_PLAN_LINE_IDPX_FLAGSIN_INMEMORY_POPULATE1
P1TEXTSQL_PLAN_OPERATIONBLOCKING_INST_IDIN_INMEMORY_PREPOPULATE1
P2TEXTSQL_PLAN_OPTIONSBLOCKING_HANGCHAIN_INFOIN_INMEMORY_REPOPULATE1
P3TEXTSQL_EXEC_IDTOP_LEVEL_CALL#IN_INMEMORY_TREPOPULATE1
WAIT_CLASSSQL_EXEC_STARTTOP_LEVEL_CALL_NAMEDELTA_READ_MEM_BYTES
WAIT_CLASS_IDPLSQL_ENTRY_OBJECT_IDTIME_MODELCON_ID
XIDPLSQL_ENTRY_SUBPROGRAM_IDIN_SEQUENCE_LOADDBOP_NAME
PLSQL_OBJECT_IDCAPTURE_OVERHEADDBOP_EXEC_ID
PLSQL_SUBPROGRAM_IDREPLAY_OVERHEAD
PLSQL_SUBPROGRAM_IDIS_CAPTURED
QC_SESSION_SERIAL#IS_REPLAYED
CURRENT_ROW#MODULE
CONSUMER_GROUP_IDACTION
REMOTE_INSTANCE#MACHINE
IN_CONNECTION_MGMTPORT
IN_PARSEECID
IN_HARD_PARSEDBREPLAY_FILE_ID
IN_SQL_EXECUTIONDBREPLAY_CALL_COUNTER
IN_PLSQL_EXECUTIONTM_DELTA_TIME
IN_PLSQL_RPCTM_DELTA_CPU_TIME
IN_PLSQL_COMPILATIONTM_DELTA_DB_TIME
IN_JAVA_EXECUTIONDELTA_TIME
IN_BINDDELTA_READ_IO_REQUESTS
IN_CURSOR_CLOSEDELTA_WRITE_IO_REQUESTS
DELTA_READ_IO_BYTES
DELTA_WRITE_IO_BYTES
DELTA_INTERCONNECT_IO_BYTES
PGA_ALLOCATED
TEMP_SPACE_ALLOCATED



下記の表は、V$ACTIVE_SESSION_HISTORYで照会できるカラムについての説明です。
(Oracle 11.2.0.4バージョンに基づいて作成されました)

Oracleのマニュアルを参考すれば簡単に分かる内容ですが、V$ACTIVE_SESSION_HISTORYビューで照会できるデータは、パフォーマンスの問題を分析する時にとても便利なので、カラムの説明として追加しました。

カラムデータ型説明
SAMPLE_IDNUMBER    サンプルID
SAMPLE_TIMETIMESTAMP(3)Sampleがサンプリングされた時間
SESSION_IDNUMBERSession識別子V$SESSIONのSIDとジョイント可能
SESSION_SERIAL#NUMBERSession Serial番号(SessionのObjectに対する識別子)、V$SESSIONのSERIAL#と結合可能。
SQL_IDVARCHAR2(13)サンプリング時間中に実行されたSessionのSQL文に対する識別子。
SQL_PLAN_LINE_IDNUMBERSQLプランラインID
SQL_PLAN_OPERATIONVARCHAR2(30)Plan Operation名
SQL_PLAN_OPTIONSVARCHAR2(30)プラン運用オプション
SQL_EXEC_IDNUMBERSQL実行識別子
SQL_EXEC_START日付SQLが実行された時間
EVENTVARCHAR2(64)SESSION_STATE=WAITINGの場合、SessionのEventはサンプリングされる時間を待ちます。
SESSION_STATE=ON CPUの場合、このColumnはNULLです。
EVENT_IDNUMBER待機している、または最後に待機した Session の Resource や Event の識別子。
EVENT#NUMBER待機している、または最後に待機したSessionのResourceやEventのNo.
SEQ#NUMBER待機現象を唯一区別できるSequence Number。
P1TEXTVARCHAR2(64)最初の追加のParameterのText
P1NUMBER最初の追加Parameter
P2TEXTVARCHAR2(64)2つ目の追加のParameterのText
P2NUMBER2つ目の追加Parameter
P3TEXTVARCHAR2(64)3つ目の追加のParameterのText
P3NUMBER3つ目の追加Parameter
WAIT_CLASSVARCHAR2(64)Sessionがサンプリング時間中に待機するEventのWait Class名、V$SESSIONのWAIT_CLASSと結合可能。
WAIT_TIMENUMBERサンプリングされる時、SessionがCPUを占有する場合、SessionがEventを最後に待機した総Wait Time、
もしこの値が0の場合、Sessionはサンプリングを待機中とみなします。
Note: WAIT_TIME=0 かどうかを問わず、サンプリング中は 、WAIT_TIME 自体の値だけを観察する
よりもSESSION_STATE を調べる方が便利、V$SESSION のWAIT_TIME と結合可能
SESSION_STATEVARCHAR2(7)Sessionの状態
 ・WAITING
 ・ ON CPU
TIME_WAITEDNUMBERもし、SESSION_STATE=WAITINGの場合、Sessionは実際にEventを待機するために時間を費やし、
このColumnはサンプリングが収集される過程で待機される現象のために用意されている。
もし、Wait Eventが1秒以上持続し、1つ以上のSession Sample Rowによってかかった場合、
Wait Eventのための実際の時間経過は、そのSessionの最後のSample Rowに記入されます。
この情報は最新のSession Sampleに対しては使用できません。
BLOCKING_SESSION_STATUSVARCHAR2(11)Blocking Sessionの状態
 ・VALID
 ・ ホルダーなし
 ・ NOT IN WAIT
 ・ UNKNOWN
BLOCKING_SESSIONNUMBERBlocking
Sessionに対するSession識別子、BlockしているSessionが同じInstanceに存在し、
SessionがEnqueuesを待機したり、”buffer busy”である場合にのみ入力される、
V$SESSIONのBLOCKING_SESSIONと結合可能
BLOCKING_SESSION_SERIAL#NUMBERBlocking Sessionのシリアル番号
BLOCKING_INST_IDNUMBERBLOCKING_SESSIONで表示されるBlockerのInstance番号
CURRENT_OBJ#NUMBERSessionが参照しているObjectのObject ID、この情報はSessionがApplication, Cluser, Concurrency, User I/O Wait Eventを待機する場合のみ使用可能、V$SESSIONのROW_WAIT_OBJ#とジョイン可能
CURRENT_FILE#NUMBERSessionが参照しているObjectが含まれているBlockのFile Number、この情報はSessionがApplication, Cluser, Concurrency, User I/O Wait Eventを待機する場合のみ使用可能、V$SESSIONのROW_WAIT_FILE#と結合可能
CURRENT_ROW#NUMBERSessionが参照しているRow識別子、この情報はSessionがApplication, Cluser, Concurrency, User I/O Wait Eventを待機する場合にのみ使用可能、V$SESSIONのROW_WAIT_ROW#と結合可能
REMOTE_INSTANCE#NUMBERSessionが待機しているBlockをサポートするRemote Instance識別子、この情報はSessionがCluster eventsを待機する場合のみ使用可能。
PROGRAMVARCHAR2(48)Operation System Program名
MODULEVARCHAR2(48)DBMS_APPLICATION_INFO.SET_MODULE Procedure の実行で付与される MODULE 名
ACTIONVARCHAR2(32)  DBMS_APPLICATION_INFO.SET_MODULE Procedureの実行で付与されるACTION名
CLIENT_IDVARCHAR2(64)SessionのClinet識別子、V$SESSIONのCLIENT_IDENTIFIERと結合可能
MACHINEVARCHAR2(64)Client の O/S Machine 名

SQL関連 DBA_HIST_* VIEW

SQL性能関連Dictionary ViewのAWRビューを通じて過去のSQL実行履歴を抽出することができます。
このようなSQL性能関連ビューはDBA_HIST_SQLSTAT, DBA_HIST_SQLBIND, DBA_HIST_SQL_PLAN などを使います。

それぞれのビューが持つ意味とカラム情報について説明します。
SQL性能改善が必要な対象を抽出したら、次の段階としてSQLに対する分析が必要です。
V$SQL では、改善が必要な対象だけを抽出することができるだけで、いつ、どのようなパターンで実行されるかは
分かりません。SQLの実行パターンは改善方法を決定する際には非常に重要な情報であるため、以前は業務担当者や
開発担当者を通じてどのような役割をするSQLなのか、いつ実行されるクエリなのかを100%依存して確認しなければ
なりませんでした。

DBA_HIST系列AWR性能ビューはHIST(ory)値、つまり、収集周期を持っているため、SQL改善対象を抽出することが
できるだけでなく、SQL自体を理解するのにも大きな助けになります。 
AWRビューを利用して、既存の業務(開発)担当者から聞いたり、リアルタイムモニタリングを通じて確認可能だった部分を100%解消することはできませんが、当該SQLがいつから実行されるクエリなのか、毎日同じパターンで実行されるのか?
いつ実行計画(plan hash value)が変更されたのか?などの情報(根拠)を確認することができるので、
SQL改善過程で必須的に参考しなければなりません。
代表的なAWRビューであるDBA_HIST_SQLSTAT、DBA_HIST_SQLBIND、DBA_HIST_SQL_PLANなどを使います。
それぞれのビューが持つ意味とカラム情報について説明します。

DBA_HIST_SQLSTAT

SQL実行内訳の履歴情報を各SNAP_IDごとに照会できるビューです。
*TOTAL値はインスタンスがStartupされた後の統計値であり、*_DELTA値はDBA_HIST_SNAPHOSTビューのBEGIN_INTERVAL_TIMEからEND_INTERVAL_TIMEまでの値です。

10gR2 11gR111gR212cR1
FORCE_MATCHING_SIGNATURE変化なしPARSING_USER_IDCON_DBID
PARSING_SCHEMA_NAMEIO_OFFLOAD_ELIG_BYTES_TOTALCON_ID
PX_SERVERS_EXECS_TOTALIO_OFFLOAD_ELIG_BYTES_DELTA
PX_SERVERS_EXECS_DELTAIO_INTERCONNECT_BYTES_TOTAL
BIND_DATAIO_INTERCONNECT_BYTES_DELTA
PHYSICAL_READ_REQUESTS_TOTAL
PHYSICAL_READ_REQUESTS_DELTA
PHYSICAL_READ_BYTES_TOTAL
PHYSICAL_READ_BYTES_DELTA
PHYSICAL_WRITE_REQUESTS_TOTAL
PHYSICAL_WRITE_REQUESTS_DELTA
PHYSICAL_WRITE_BYTES_TOTAL
PHYSICAL_WRITE_BYTES_DELTA
OPTIMIZED_PHYSICAL_READS_TOTAL
OPTIMIZED_PHYSICAL_READS_DELTA
CELL_UNCOMPRESSED_BYTES_TOTAL
CELL_UNCOMPRESSED_BYTES_DELTA
IO_OFFLOAD_RETURN_BYTES_TOTAL
IO_OFFLOAD_RETURN_BYTES_DELTA
FLAG

DBA_HIST_SQLBIND

SQL実行履歴のうち、Bind変数の値の履歴を照会できるビューです。

カラムデータ型説明
SNAP_IDNUMBER     スナップショット識別子
DBIDNUMBERSnapshotのためのDatabase識別子
INSTANCE_NUMBERNUMBERSnapshotのためのInstance番号
SQL_IDVARCHAR2(13)Library CacheにあるParent Cursor SQL識別子です。
NAMEVARCHAR2(30)Bind変数の名前
POSITIONNUMBERSQL文でBind変数の位置(1から始まる)
DUP_POSITIONNUMBER名前によってBindが行われ、Bind変数が重複すると、
最初のBind変数のPositionを提供します。
DATATYPENUMBERBind Dataタイプの内部的な識別子
DATATYPE_STRINGVARCHAR2(15)Bind Dataタイプの文字的な表現
VALUE_STRINGVARCHAR2(4000)文字タイプで表現されたBind値
VALUE_ANYDATAANYDATASys.AnyData型で表したBindの値。
この表現方法はプログラム的にBindの値を理解するのに便利。

DBA_HIST_SQL_PLAN

SQL文の実行PLANの履歴情報を照会できるビューで、SNAP SHOTごとにそれぞれPLAN情報を照会できるため、
SQL PLAN照会および変更履歴を把握する際に便利です。

カラムデータ型説明
DBIDNUMBER     Database識別子
SQL_IDVARCHAR2(13)Library CacheにあるParent Cursor SQL識別子
PLAN_HASH_VALUENUMBERSQLプランに対する数値的な表現値。
1つのPLAN_HASH_VALUEを他のものと比較することで
簡単に二つの計画が同じかどうかを識別可能
IDNUMBERそれぞれの実行計画段階に付けられた番号
OPERATIONVARCHAR2(30)SQL実行中に発生したOperationを表現 (Ex. TABLE ACCESS)
OPTIONSVARCHAR2(30)SQL実行中に発生したOperationのOptionを表現 (Ex. FULL)
OBJECT#NUMBERTable や Index の Object 番号
OBJECT_OWNERVARCHAR2(30)TableやIndexを含んでいるSchemaを所有しているUserの名前。
OBJECT_NAMEVARCHAR2(31)Table や Index の名前
OBJECT_TYPEVARCHAR2(20)Objectの種類
OPTIMIZERVARCHAR2(20)Planの最初のRowに対するOptimizerの現在のMode (Ex. ALL_ROWS)
PARENT_IDNUMBER現在の段階での演算結果に対する次の段階の実行識別子。
COSTNUMBEROptimizerのCost-Basedアプローチで演算の予測されたコスト。
Rule-Basedアプローチの場合、このColumnの値はNullです。
CARDINALITYNUMBERCost-Based Optimizerで予測された値で、演算実行によって生成されたRow数。
BYTESNUMBER
(In Bytes)
Cost-Based Optimizerで予測された値で、演算実行によって生成されたByte数。
PARTITION_STARTVARCHAR2(5)アクセスされたPartition範囲のStart Partition
PARTITION_STOPVARCHAR2(5)アクセスされたPartition範囲のStop Partition
PARTITION_IDNUMBERPARTITION_START, PARTITION_STOP Column 2つの値をまとめて計算する手順
CPU_COSTNUMBERCost-Based Optimizer で予測されたCPUコスト。
Rule-Based Optimizer でこのColumnの値はNullです。
IO_COSTNUMBERCost-Based Optimizer で予測されたI/Oコスト。
Rule-Based Optimizer でこのColumnの値はNullです。
ACCESS_PREDICATESVARCHAR2(4000)WHERE条件に合致するDataを抽出するとき、ACCESSで抽出される情報
FILTER_PREDICATESVARCHAR2(4000)WHERE条件に合致するDataを抽出する時、FILTERで抽出される情報

DBA_HIST_SQLTEXT

SQL TEXTがCLOBで保存され、SQL FULL TEXTの抽出が可能です。
このビューはV$SQLの情報をCaptureし、DBA_HIST_SQLSTATと一緒に使われます。

DBA_HIST_SQLSTATビューはSQL_FULLTEXTを持っていないため、DBA_HIST_SQLTEXTビューと結合して
使う必要があります。

カラムデータ型説明
DBIDNUMBERDatabase識別子
SQL_IDVARCHAR2(13)Library CacheにあるParent Cursor SQL識別子
SQL_TEXTCLOBCLOB形式で表したSQLの全文
COMMAND_TYPENUMBEROracleコマンドタイプの定義

 2.2.3 パフォーマンス管理ソリューションの活用

最後にパフォーマンス管理ソリューションの活用について説明していきます。
SQLチューニング対象をより簡単かつ正確に選定するためには、DBモニタリング及び性能管理ソリューションを
多くの場面で活用することができます。

ここでは『 MaxGauge(マックスゲージ) 』を利用したパフォーマンス管理について簡単に説明します。
MaxGaugeは、性能管理ソリューションとして最も認知度が高い製品です。
韓国の株式会社エクセム(日本国内では日本エクセム株式会社)が開発・販売するプロダクト製品です。

パフォーマンス管理ソリューションに求められる機能には、大きく2つが存在します。
その2つとは『 リアルタイム監視 』『 事後分析 』です。

リアルタイム監視は文字通り、現在接続している Active Session の実行情報をリアルタイムで監視します。
そして、事後分析では OracleのAWR のようにすべてのセッションで実行した履歴を保存して障害やパフォーマンスの
問題が発生した時に原因の調査・分析を行うことができます。

リアルタイム監視

リアルタイムモニター(Realtime Monitor)


この画面は、リアルタイム監視モニター機能の一部を表示しています。
パフォーマンス管理製品を活用すれば、Oracleの重要なモニタリング指標であるCPU、Lock、Statistics、Wait、Active Sessionなどの各種情報を簡単にモニタリングすることができます。
さらには、現在実行されているセッション情報と、そのセッションで実行されているSQLの状況をリアルタイムで簡単に
確認することができるため、パフォーマンス問題を引き起こす原因となっている可能性があるSQLを簡単・正確に
抽出することが可能です。


事後分析

パフォーマンスアナライザー(Performance Analyzer)


こちらの画面は、パフォーマンス管理ソリューションの事後分析機能の一つであるTOP SQL抽出画面です。
パフォーマンス管理ソリューションは Oracle Databaseのすべてのトランザクション履歴情報 を保存しているため、
問題発生時に正確な対応が可能です。
また、区間別リソース(CPU, Elapsed Time, Logical I/O, Physical I/O, Execution)の使用量が多いSQLを簡単に
抽出することができ、Schema, Program, Module, Machine, OS User別に性能改善対象を抽出することが容易です。

このように性能管理ソリューションを活用すれば、より便利に目的の情報を抽出することができ、
SQLチューニング対象の選定に多くの助けを得ることができます。

SQLチューニングブログ 2nd Season(第6回) 終

次回ブログテーマ
『 ケース別 SQLチューニング対象選定方法 』

データベース運用でお困りなら

日本エクセムまで お気軽にご相談ください!!

私たちは、日本のITインフラにおける

 プロジェクト運営 ~ システム運用 』の安定化と効率化を推進します。
チューニングのための詳細情報取得ならMaxGauge
日本エクセム 公式Xアカウント

最新情報を随時ポスト中!是非、フォローをお願いします。



掲載内容についてのお問い合せは

日本エクセム株式会社 営業推進部(担当:田中)まで
Mail:sales@ex-em.co.jp

こちらの問い合わせフォームもご利用ください

PHP Code Snippets Powered By : XYZScripts.com