SQLリクエストの実行プロセスは、コンパイル時と実行時に分かれます。コンパイル時には、構文解析、文法解析、文法最適化、コード生成などのサブステージが含まれ、最終的に実行計画を生成し、エグゼキューターに送信して実行させ、結果を返します。SQLリクエストを解析して実行計画を生成するプロセスをハードパースと呼びます。ハードパースは一定のリソースを消費し、SQLの実行時間に影響を与えるため、毎回のリクエスト時のハードパースによる消費を避けるために、実行計画は計画キャッシュに格納されます。その後、同じSQLリクエストが到着した場合、まず計画キャッシュにヒットするかどうかを優先的に判断し、ヒットした場合はキャッシュ内の計画を直接抽出してエグゼキューターに送信し、実行して結果を返すことをソフトパースと呼びます。したがって、SQLリクエストが計画キャッシュにヒットするかどうか、および計画が最適かどうかは、パフォーマンス最適化の鍵となります。

オプティマイザーは、インデックスの欠如、統計情報の遅延、大規模アカウントなど、さまざまな理由により最適でない実行計画を生成する可能性があります。最適でない実行計画を実行すると、多くの論理読み取りが発生し、より多くのデータ量をスキャンするため、実行時間の増加とスループットの低下が引き起こされます。
V$OB_SQL_AUDITビューを使用して、パフォーマンス問題がSQL問題であるかどうか、また疑わしいSQLを判断し、さらに実行計画関連ビューを使用して実行計画に問題があるかどうかを判断できます。実行計画が最適でない場合は、CREATE OUTLINEステートメントを使用して実行計画をバインドするか、スケールアップや制限などの手段で回復できます。
説明
V$OB_SQL_AUDITの詳細については、V$OB_SQL_AUDIT(Oracleモード)およびV$OB_SQL_AUDIT(MySQLモード)を参照してください。
たとえば、以下の例は、TopSQLを取得し、SQL問題が存在するかどうかを判断する方法を示しています。SQL_IDが2705182A6EAB699CEC8E59DA80710B64のSQLはTopSQLの筆頭であり、テナントリソースを最も多く消費しており、同時に論理読み取りも非常に高いため、最適化が必要なSQLです。
obclient>
select SQL_ID,
avg(ELAPSED_TIME),
avg(QUEUE_TIME),
avg(ROW_CACHE_HIT + BLOOM_FILTER_CACHE_HIT + BLOCK_CACHE_HIT + DISK_READS) avg_logical_read,
avg(execute_time) avg_exec_time,
count(*) cnt,
avg(execute_time - TOTAL_WAIT_TIME_MICRO ) avg_cpu_time,
avg( TOTAL_WAIT_TIME_MICRO ) avg_wait_time,
WAIT_CLASS,
avg(retry_cnt)
from v$OB_SQL_AUDIT
group by 1
order by avg_exec_time * cnt desc limit 10;
+----------------------------------+-------------------+-----------------+------------------+---------------+--------+--------------+---------------+------------+----------------+
| SQL_ID | avg(ELAPSED_TIME) | avg(QUEUE_TIME) | avg_logical_read | avg_exec_time | cnt | avg_cpu_time | avg_wait_time | WAIT_CLASS | avg(retry_cnt) |
+----------------------------------+-------------------+-----------------+------------------+---------------+--------+--------------+---------------+------------+----------------+
| 2705182A6EAB699CEC8E59DA80710B64 | 54976.9269 | 43.8605 | 17664.2727 | 54821.5828 | 11759 | 54821.5828 | 0.0000 | OTHER | 0.0000 |
| 32AB97A0126F566064F84DDDF4936F82 | 1520.9832 | 380.7903 | 63.7847 | 789.6781 | 63632 | 789.6781 | 0.0000 | OTHER | 0.0000 |
| A5F514E873BE9D1F9A339D0DA7481D69 | 44032.5553 | 44.5149 | 8943.7834 | 43878.1405 | 1039 | 43878.1405 | 0.0000 | OTHER | 0.0000 |
| 31FD78420DB07C11C8E3154F1658D237 | 7769857.0000 | 35.7500 | 399020.7500 | 7769682.7500 | 4 | 7769682.7500 | 0.0000 | NETWORK | 1.0000 |
| C48AEE941D985D8DEB66892228D5E845 | 8528.6227 | 0.0000 | 0.0000 | 8450.4047 | 1601 | 8450.4047 | 0.0000 | OTHER | 0.0000 |
| 101B7B79DFA9AE801BEE4F1A234AD294 | 158.2296 | 41.7211 | 0.0000 | 46.0345 | 286758 | 46.0345 | 0.0000 | OTHER | 0.0000 |
| 1D0BA376E273B9D622641124D8C59264 | 1774.5924 | 0.0049 | 0.0000 | 1737.4885 | 5081 | 1737.4885 | 0.0000 | OTHER | 0.0000 |
| 64CF75576816DB5614F3D5B1F35B1472 | 1801.8767 | 747.0343 | 0.0000 | 827.1674 | 10340 | 827.1674 | 0.0000 | OTHER | 0.0000 |
| 23D1C653347BA469396896AD9B20DCA1 | 5564.9419 | 0.0000 | 0.0000 | 5478.2228 | 1257 | 5478.2228 | 0.0000 | OTHER | 0.0000 |
| FA4F493FA5CE2DCC64F51CF3754F96C6 | 2478.3956 | 378.7557 | 3.1040 | 1731.1802 | 3357 | 1731.1802 | 0.0000 | OTHER | 0.0000 |
+----------------------------------+-------------------+-----------------+------------------+---------------+--------+--------------+---------------+------------+----------------+
10 rows in set (1.34 sec)