AnalyticDB for MySQLは、SQL文の実行プランをキャッシュするプランキャッシュ機能を提供します。 同じSQLパターンを共有するSQL文を実行する場合、AnalyticDB for MySQLは、SQLパターンのキャッシュされた実行プランを使用して、SQLコンパイルの最適化を高速化し、クエリのパフォーマンスを向上させます。 このトピックでは、プランキャッシュ機能を有効にする方法と、その機能の使用方法の例について説明します。
前提条件
次の両方の条件を満たすAnalyticDB for MySQLクラスターが作成されます。
クラスターはData Warehouse Edition (V3.0) またはData Lakehouse Edition (V3.0) です。
クラスターのマイナーバージョンは3.1.10.0以降です。
クラスターのマイナーバージョンをクエリする方法については、AnalyticDB for MySQLクラスターのバージョンを照会するにはどうすればよいですか? クラスターのマイナーバージョンを更新するには、テクニカルサポートにお問い合わせください。
背景情報
大量のクエリが同時に実行される場合、SQLコンパイルの最適化に要する時間が長くなり、システムのパフォーマンスのボトルネックになる可能性があります。 この場合、プランキャッシュ機能を使用して、SQL文の実行プランをキャッシュできます。 同じSQLパターンを共有する他のSQL文を実行する場合、キャッシュされた実行プランを使用してSQLコンパイルの最適化を高速化し、クエリのパフォーマンスを向上させます。
プランキャッシュ機能は、並行性の高いクエリシナリオにのみ適しています。
プランキャッシュ機能の有効化または無効化
デフォルトでは、プランキャッシュ機能は無効になっています。 次のステートメントを実行して、機能を有効または無効にできます。
プランキャッシュ機能を有効にします。
SET ADB_CONFIG O_SPC_SCOPE=POINT_QUERY;
プランキャッシュ機能を無効にします。
SET ADB_CONFIG O_SPC_SCOPE=NONE;
例
次の高同時実行クエリリクエストがあるとします。
SELECT * FROM tbl0 WHERE col0 = ?;
次のステートメントを実行して、プランキャッシュ機能を有効にします。
SET ADB_CONFIG O_SPC_SCOPE=POINT_QUERY;
次のSELECTステートメントを実行して、ステートメントの実行計画をキャッシュします。
SELECT * からtbl0 WHERE col0 = 666;
同じSQLパターンを共有する別のSELECTステートメントを実行します。 ステップ2でキャッシュされた実行プランが使用されます。 これにより、SQLコンパイルの最適化が高速化されます。
SELECT * からtbl0 WHERE col0 = 777;