SQLの実行計画を取得したい場合は、SELECT calsettrace()、SELECT calgettrace()を使用します。
コマンド | 説明 |
---|---|
SELECT calsettrace(1); | SQLの実行計画取得モードに入ります。 |
SELECT calgettrace(); | 直前に実行したSQLの実行計画を取得します。 |
SELECT calsettrace(0); | SQLの実行計画取得モードを終了します。 |
実行計画の取得例
1. SELECT calsettrace(1)を実行してSQLの実行計画モードに入ります。
1 2 3 4 5 6 7 |
mysql> SELECT calsettrace(1); +----------------+ | calsettrace(1) | +----------------+ | 0 | +----------------+ 1 row in set (0.02 sec) |
2. 実行計画を取得したいSQLを実行します。
このときwarningが表示されますが、これは実行計画取得時には必ず表示されるため無視してください。
1 2 3 4 5 6 7 |
mysql> SELECT DISTINCT(lo_orderpriority) FROM lineorder WHERE lo_orderkey = 1; +------------------+ | lo_orderpriority | +------------------+ | 2-HIGH | +------------------+ 1 row in set, 1 warning (0.23 sec) |
3. SELECT calgettrace()を実行してSQLの実行計画を取得します。
1 2 3 4 5 6 7 8 9 |
mysql> SELECT calgettrace()\G *************************** 1. row *************************** calgettrace(): Desc Mode Table TableOID ReferencedColumns PIO LIO PBE Elapsed Rows BPS PM lineorder 3016 (lo_orderkey,lo_orderpriority) 8705 8194 617878 0.217 1 TAS UM - - - - - - 0.138 1 TNS UM - - - - - - 0.000 1 1 row in set (0.01 sec) |
4. SELECT calsettrace(0)を実行して実行計画モードを終了します。
1 2 3 4 5 6 7 |
mysql> SELECT calsettrace(0); +----------------+ | calsettrace(0) | +----------------+ | 1 | +----------------+ 1 row in set (0.00 sec) |
取得できる情報
以下の情報を取得できます。項目名 | 内容 |
---|---|
Desc | 実行された操作。 ・BPS:条件に該当するデータを抽出しています。 ・HJS:ハッシュ結合を行なっています。 ・TAS:中間集計結果を受信し、必要な集計を行います。 |
Mode | UMまたはPMのどちらで実行されたか。 |
Table | 処理の対象となるテーブル。 |
TableOID | スキャンされたテーブルのオブジェクトID。 |
ReferenceColumns | 問い合わせの処理に必要な列。 |
PIO | 問合せで実行された物理I/O。対象データがすべてキャッシュされている場合、この値は0になります。 |
LIO | 問合せで実行された論理I/O |
PBE | エクステントマップにより除外されたブロックアクセスの数。エクステントマップが使用されなかった場合、 この値は0になります。 |
Elapsed | 表示されているステップの処理時間。 |
Rows | 表示されているステップで返された中間行の行数。 |
なお、実行計画取得モード中は、ロギング処理の増加により、パフォーマンスへの影響があることにご注意ください。
参考情報
実行計画の活用例については以下をご確認ください。SELECT時にエクステントマップが使用されているか確認する