catch-img

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


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

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

 

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

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

11gR1

11gR2

12cR1

IS_BIND_SENSITIVE

IO_CELL_OFFLOAD_ELIGIBLE_BYTES

FULL_PLAN_HASH_VALUE

IS_BIND_AWARE

IO_INTERCONNECT_BYTES

CON_ID

IS_SHAREABLE

PHYSICAL_READ_REQUESTS

IS_REOPTIMIZABLE

SQL_PATCH

PHYSICAL_READ_BYTES

IS_RESOLVED_ADAPTIVE_PLAN

SQL_PLAN_BASELINE

PHYSICAL_WRITE_REQUESTS

IM_SCANS

TYPECHECK_MEM

PHYSICAL_WRITE_BYTES

IM_SCAN_BYTES_UNCOMPRESSED


OPTIMIZED_PHY_READ_REQUESTS

IM_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_VALUE

NUMBER

Library Cache内にあるParent CursorのHash値

SQL_ID

VARCHAR2(13)

Library CacheにあるParent Cursor SQL識別子です。

NAME

VARCHAR2(30)

Bind変数の名前

POSITINO

NUMBER

SQL文でBind変数の位置(1から始まる)

DATA_TYPE

NUMBER

Bind Dataタイプの内部的な識別子

VALUE_STRING

VARCHAR2(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_VALUE

NUMBER

Library Cache内にParent CursorのHash値
(ADDRESSとHASH_VALUEでV$SQLAREAとJoin可能)

SQL_ID

VARCHAR2(13)

Library CacheにあるParent Cursor SQL識別子

PLAN_HASH_VALUE         

NUMBER

SQLプランに対する数値的な表現値。
一つのPLAN_HASH_VALUEを他のものと比較することで簡単に二つの計画が同じかどうかを識別可能

OPERATION

VARCHAR2(30)

SQL実行中に発生したOperationを表現 (Ex. TABLE ACCESS)

OPTIONS

VARCHAR2(30)

SQL実行中に発生したOperationのOptionを表現 (Ex. FULL)

OBJECT_OWNER      

VARCHAR2(30)

Objectを所有しているUser名

OBJECT_NAME

VARCHAR2(30)

SQL実行計画に表示されるObjectの名前

OBJECT_TYPE          

VARCHAR2(20)        

ObjectのType

OPTIMIZER

VARCHAR2(20)

Planの最初の行に対するOptimizerの現在のMode (Ex. ALL_ROWS)

ID

NUMBER

実行計画の各段階ごとに割り当てられた番号

PARENT_ID

NUMBER

現在の実行計画の直前の段階の割り当てられた番号。

COST

NUMBER

OptimizerのCost-Basedアプローチで演算の予測されたコスト。
Rule-Basedアプローチの場合、このColumnの値はNullです。

CARDINALITY

NUMBER

Cost-Based Optimizerで予測された値で、演算実行によって生成されたRow数。

BYTES

NUMBER
(In Bytes)

Cost-Based Optimizerで予測された値で、演算実行によって生成
されたByte数。

ACCESS_PREDICATES           

VARCHAR2(4000)

WHERE条件に合致するDataを抽出する時、ACCESSで抽出される情報

FILTER_PREDICATES

VARCHAR2(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変数値を抽出する際には非常に便利に使うことが可能です。

カラム

データ型

説明

STATUS 

VARCHAR2(19) 

SQLの実行状況:
EXECUTING – 実行中
DONE (ERROR) – Errorと一緒に実行が完了しました。
DONE (FIRST N ROWS) – すべてのRowがFetchされる前にApplication
によって実行完了。
DONE (ALL ROWS) – すべてのRowがFetchされ、実行完了します。
DONE – 実行完了 (parallel execution)

SID

NUMBER

SQLを実行したSessionのSID(Session identifier)

SQL_ID

VARCHAR2(13)

現在実行中のSQL ID

SQL_EXEC_START

DATE

SQLの実行が開始された時間

SQL_PLAN_HASH_VALUE     

NUMBER

SQL PLANのハッシュ値

SESSION_SERIAL#

NUMBER

Sessionのシリアル番号

ELAPSED_TIME

NUMBER

Elapsed time (in microseconds); 実行時に更新されます

CPU_TIME

NUMBER

CPU time (in microseconds); 実行時に更新されます

FETCHES

NUMBER

Fetch Row数; 実行時にUpdateされます

BUFFER_GETS

NUMBER

SQLのBlock Read量; 実行時にUpdateされます

DISK_READS

NUMBER

SQLのDisk Read量; 実行時にUpdateされます

DIRECT_WRITES

NUMBER

SQLの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 にカラムが追加された部分をまとめたものです。

10gR2

11gR1

11gR2

12cR1

FORCE_MATCHING_SIGNATURE

REMOTE_INSTANCE#

IS_AWR_SAMPLE

SQL_ADAPTIVE_PLAN_RESOLVED

BLOCKING_SESSION

TOP_LEVEL_SQL_ID

IS_SQLID_CURRENT

SQL_FULL_PLAN_HASH_VALUE

BLOCKING_SESSION_STATUS

TOP_LEVEL_SQL_OPCODE

SQL_OPNAME

IN_INMEMORY_QUERY

BLOCKING_SESSION_SERIAL#

SQL_PLAN_LINE_ID

PX_FLAGS

IN_INMEMORY_POPULATE1

P1TEXT

SQL_PLAN_OPERATION

BLOCKING_INST_ID

IN_INMEMORY_PREPOPULATE1

P2TEXT

SQL_PLAN_OPTIONS

BLOCKING_HANGCHAIN_INFO

IN_INMEMORY_REPOPULATE1

P3TEXT

SQL_EXEC_ID

TOP_LEVEL_CALL

IN_INMEMORY_TREPOPULATE1

WAIT_CLASS

SQL_EXEC_START

TOP_LEVEL_CALL_NAME

DELTA_READ_MEM_BYTES

WAIT_CLASS_ID

PLSQL_ENTRY_OBJECT_ID

TIME_MODEL

CON_ID

XID

PLSQL_ENTRY_SUBPROGRAM_ID

IN_SEQUENCE_LOAD

DBOP_NAME


PLSQL_OBJECT_ID

CAPTURE_OVERHEAD

DBOP_EXEC_ID


PLSQL_SUBPROGRAM_ID

REPLAY_OVERHEAD



QC_SESSION_SERIAL#​​​​​​

IS_CAPTURED



CURRENT_ROW#

IS_REPLAYED



CONSUMER_GROUP_ID

MODULE



REMOTE_INSTANCE#

ACTION



IN_CONNECTION_MGMT

MACHINE



IN_PARSE

PORT



IN_HARD_PARSE

ECID



IN_SQL_EXECUTION

DBREPLAY_FILE_ID



IN_PLSQL_EXECUTION

DBREPLAY_CALL_COUNTER



IN_PLSQL_RPC

TM_DELTA_TIME



IN_PLSQL_COMPILATION

TM_DELTA_CPU_TIME



IN_JAVA_EXECUTION

TM_DELTA_DB_TIME



IN_BIND

DELTA_TIME



IN_CURSOR_CLOSE

DELTA_READ_IO_REQUESTS




DELTA_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_ID

NUMBER

サンプルID

SAMPLE_TIME


TIMESTAMP(3)

Sampleがサンプリングされた時間

SESSION_ID

NUMBER

Session識別子V$SESSIONのSIDとジョイント可能

SESSION_SERIAL#

NUMBER

Session Serial番号(SessionのObjectに対する識別子)、V$SESSIONのSERIAL#と結合可能。

SQL_ID

VARCHAR2(13)      

サンプリング時間中に実行されたSessionのSQL文に対する識別子

SQL_PLAN_LINE_ID      

NUMBER

SQLプランラインID

SQL_PLAN_OPERATION

VARCHAR2(30)

Plan Operation名

SQL_PLAN_OPTIONS

VARCHAR2(30)

プラン運用オプション

SQL_EXEC_ID

NUMBER

SQL実行識別子

SQL_EXEC_START

DATE

SQLが実行された時間

EVENT

VARCHAR2(64)

SESSION_STATE=WAITINGの場合、SessionのEventはサンプリングされる時間を待ちます。
SESSION_STATE=ON CPUの場合、このColumnはNULLです。

EVENT_ID

NUMBER

待機している、または最後に待機した Session の Resource や Event の識別子

EVENT#

NUMBER

待機している、または最後に待機したSessionのResourceやEventのNo.

SEQ#

NUMBER

待機現象を唯一区別できるSequence Number。

P1TEXT

VARCHAR2(64)

最初の追加のParameterのText

P1

NUMBER

最初の追加Parameter

P1TEST

VARCHAR2(64)

2つ目の追加のParameterのText

P2

NUMBER

2つ目の追加Parameter

P3TEXT

VARCHAR2(64)

3つ目の追加のParameterのText

P3

NUMBER



3つ目の追加Parameter ​​​​

WAIT_CLASS

VARCHAR2(64)

Sessionがサンプリング時間中に待機するEventのWait Class名、V$SESSIONのWAIT_CLASSと結合可能

WAIT_TIME

NUMBER

サンプリングされる時、SessionがCPUを占有する場合、SessionがEventを最後に待機した総Wait Time、
もしこの値が0の場合、Sessionはサンプリングを待機中とみなします。
Note: WAIT_TIME=0 かどうかを問わず、サンプリング中は 、WAIT_TIME 自体の値だけを観察する
よりもSESSION_STATE を調べる方が便利、V$SESSION のWAIT_TIME と結合可

SESSION_STATE

VARCHAR2(7)

Sessionの状態
 ・WAITING
 ・ ON CP

TIME_WAITED

NUMBER

もし、SESSION_STATE=WAITINGの場合、Sessionは実際にEventを待機するために時間を費やし、
このColumnはサンプリングが収集される過程で待機される現象のために用意されている。
もし、Wait Eventが1秒以上持続し、1つ以上のSession Sample Rowによってかかった場合、
Wait Eventのための実際の時間経過は、そのSessionの最後のSample Rowに記入されます。
この情報は最新のSession Sampleに対しては使用できません。

BLOCKING_SESSION_STATUS

VARCHAR2(11)

Blocking Sessionの状態
 ・VALID
 ・ ホルダーなし
 ・ NOT IN WAIT
 ・ UNKNOWN

BLOCKING_SESSION

NUMBER

Blocking
Sessionに対するSession識別子、BlockしているSessionが同じInstanceに存在し、
SessionがEnqueuesを待機したり、”buffer busy”である場合にのみ入力される、
V$SESSIONのBLOCKING_SESSIONと結合可能

BLOCKING_SESSION_SERIAL

NUMBER

Blocking Sessionのシリアル番号

BLOCKING_INST_ID

NUMBER

BLOCKING_SESSIONで表示されるBlockerのInstance番号

CURRENT_OBJ#

NUMBER

Sessionが参照しているObjectのObject ID、この情報はSessionがApplication, Cluser, Concurrency, User I/O Wait Eventを待機する場合のみ使用可能、V$SESSIONのROW_WAIT_OBJ#とジョイン可能

CURRENT_FILE#                   

NUMBER

Sessionが参照しているObjectが含まれているBlockのFile Number、この情報はSessionがApplication, Cluser, Concurrency, User I/O Wait Eventを待機する場合のみ使用可能、V$SESSIONのROW_WAIT_FILE#と結合可能

CURRENT_ROW#

NUMBER

Sessionが参照しているRow識別子、この情報はSessionがApplication, Cluser, Concurrency, User I/O Wait Eventを待機する場合にのみ使用可能、V$SESSIONのROW_WAIT_ROW#と結合可能

REMOTE_INSTANCE#

NUMBER

Sessionが待機しているBlockをサポートするRemote Instance識別子、この情報はSessionがCluster eventsを待機する場合のみ使用可能。

PROGRAM

VARCHAR2(48)

Operation System Program名

MODULE

VARCHAR2(48)                    

DBMS_APPLICATION_INFO.SET_MODULE Procedure の実行で付与される MODULE 名

ACTION

VARCHAR2(32)

DBMS_APPLICATION_INFO.SET_MODULE Procedureの実行で付与されるACTION名

CLIENT_ID

VARCHAR2(64)

SessionのClinet識別子、V$SESSIONのCLIENT_IDENTIFIERと結合可能

MACHINE

VARCHAR2(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

11gR1

11gR2

12cR1

FORCE_MATCHING_SIGNATURE

変化なし

PARSING_USER_ID

CON_DBID

PARSING_SCHEMA_NAME


IO_OFFLOAD_ELIG_BYTES_TOTAL

CON_ID

PX_SERVERS_EXECS_TOTAL


IO_OFFLOAD_ELIG_BYTES_DELTA


PX_SERVERS_EXECS_DELTA


IO_INTERCONNECT_BYTES_TOTAL


BIND_DATA


IO_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_ID

NUMBER     

スナップショット識別子

DBID

NUMBER

SnapshotのためのDatabase識別子

INSTANCE_NUMBER   

NUMBER

SnapshotのためのInstance番号

SQL_ID

VARCHAR2(13)

Library CacheにあるParent Cursor SQL識別子です。

NAME

VARCHAR2(30)      

Bind変数の名前

POSITION

NUMBER

SQL文でBind変数の位置(1から始まる)

DUP_POSITION

NUMBER

名前によってBindが行われ、Bind変数が重複すると、最初のBind変数のPositionを提供します。

DATATYPE

NUMBER

Bind Dataタイプの内部的な識別子

DATATYPE_STRING

VARCHAR2(15)

Bind Dataタイプの文字的な表現

VALUE_STRING

VARCHAR2(4000)

文字タイプで表現されたBind値

VALUE_ANYDATA

ANYDATA

Sys.AnyData型で表したBindの値。
この表現方法はプログラム的にBindの値を理解するのに便利。


DBA_HIST_SQL_PLAN

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

カラム

データ型

説明

DBID

NUMBER     

Database識別子

SQL_ID

VARCHAR2(13)

Library CacheにあるParent Cursor SQL識別子

PLAN_HASH_VALUE

NUMBER

SQLプランに対する数値的な表現値。
1つのPLAN_HASH_VALUEを他のものと比較することで簡単に二つの計画が同じかどうかを識別可能

ID

NUMBER

それぞれの実行計画段階に付けられた番号

OPERATION

VARCHAR2(30)

SQL実行中に発生したOperationを表現 (Ex. TABLE ACCESS)

OPTIONS

VARCHAR2(30)

SQL実行中に発生したOperationのOptionを表現 (Ex. FULL)

OBJECT#

NUMBER

Table や Index の Object 番号

OBJECT_OWNER

VARCHAR2(30)

TableやIndexを含んでいるSchemaを所有しているUserの名前。

OBJECT_NAME

VARCHAR2(31)

Table や Index の名前

OBJECT_TYPE

VARCHAR2(20)      

Objectの種類

OPTIMIZER

VARCHAR2(20)

Planの最初のRowに対するOptimizerの現在のMode (Ex. ALL_ROWS)

PARENT_ID

NUMBER

現在の段階での演算結果に対する次の段階の実行識別子。

COST

NUMBER

OptimizerのCost-Basedアプローチで演算の予測されたコスト。
Rule-Basedアプローチの場合、このColumnの値はNullです。

CARDINALITY      

NUMBER

Cost-Based Optimizerで予測された値で、演算実行によって生成されたRow数。

BYTES

NUMBER
(In Bytes

Cost-Based Optimizerで予測された値で、演算実行によって生成されたByte数。

PARTITION_START

VARCHAR2(5)

アクセスされたPartition範囲のStart Partition

PARTITION_STOP

VARCHAR2(5)

アクセスされたPartition範囲のStop Partition

PARTITION_ID

NUMBER

PARTITION_START, PARTITION_STOP Column 2つの値をまとめて計算する手順

CPU_COST

NUMBER

Cost-Based Optimizer で予測されたCPUコスト。
Rule-Based Optimizer でこのColumnの値はNullです。

IO_COST

NUMBER

Cost-Based Optimizer で予測されたI/Oコスト。
Rule-Based Optimizer でこのColumnの値はNullです。

ACCESS_PREDICATES

VARCHAR2(4000)

WHERE条件に合致するDataを抽出するとき、ACCESSで抽出される情報

FILTER_PREDICATES

VARCHAR2(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ビューと結合して使う必要があります。

カラム

データ型

説明

DBID

NUMBER

Database識別子

SQL_ID

VARCHAR2(13)

Library CacheにあるParent Cursor SQL識別子

SQL_TEXT

CLOB

CLOB形式で表したSQLの全文

COMMAND_TYPE

NUMBER

Oracleコマンドタイプの定義


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チューニング対象選定方法 』

CONTACT

他社に頼らず自社でデータベースを監視・運用をしませんか?
MaxGaugeがサポートします

お役立ち資料は
こちらから

不明点がある方は、
こちらからお問い合わせください

お電話でのお問い合わせはこちら

平日 10時~18時

人気記事ランキング

タグ一覧