tencent cloud

TDSQL-C for MySQL

動向とお知らせ
製品アップデート
製品お知らせ
初心者ガイド
製品概要
プロダクト概要
製品の強み
適用シーン
製品アーキテクチャ
製品仕様
インスタンスタイプ
製品機能一覧
データベースのバージョン
リージョンとアベイラビリティゾーン
基本概念
利用制限
利用ガイドの推奨事項
自社開発カーネル
カーネル概要
カーネルバージョンのアップデート情報
カーネル最適化バージョン
機能特性
パフォーマンス関連機能
セキュリティカテゴリの機能
安定性機能
分析エンジン特性
カーネル問題のチェックと修復
購入ガイド
課金概要
製品価格
クラスタを作成する
構成変更説明
未払いについての説明
継続支払いの説明
返金ポリシー
従量課金から年/月単位サブスクリプションへの変換
従量課金からServerlessへの変換
付加価値サービスの課金説明
料金請求書の確認
クイックスタート
データベース監査
概要
監査インスタンス一覧
監査サービスを有効化する
監査ログの確認
ログ配信
事後アラーム設定
監査ルールの変更
監査サービスを変更する
監査サービスを停止する
監査ルールテンプレート
監査タスクの照会
サブユーザーへのデータベース監査利用権限付与
Serverlessサービス
Serverless入門
サーバーレス版クラスタの作成と管理
伸縮性スケーリング管理ツール
Serverlessリソースパック
マルチAZデプロイ
設定を変更する
よくあるご質問
Serverlessコスト見積ツール
操作ガイド
操作概要
コンソールでのクラスタページビューの切り替え
データベース接続
インスタンス管理
設定を変更する
インスタンス形態管理
クラスタ管理
読み取り専用インスタンス管理 
データベースプロキシ
アカウント管理
DMC
DMC(データベース管理ツール)
パラメータ設定
マルチAZデプロイ
グローバルデータベース
バックアップとリストア
操作ログ
データマイグレーション
パラレルクエリ
列ストレージインデックス CSI
分析エンジン
データベースセキュリティと暗号化
モニタリングとアラーム
SQLの基本操作
以下のコマンドを実行して、TDSQL-C for MySQLに接続してログインします
Tag
実践チュートリアル
TDSQL-C for MySQL データベース監査の等級保護実践
非InnoDBテーブル問題のワンクリック移行検出処理方法
DTSによるデータベースバージョンのアップグレード MySQL 5.7から8.0へ
TDSQL-C for MySQL 使用規範
新版コンソール
データベースプロキシの複数接続アドレスによる複数ROグループの実現
データベースプロキシのメリット
ストレージの課金モードの選び方
DTSによるリモートディザスタリカバリの構築
クラスタ用VPCの作成
データ復旧の方法
CPU使用率の高騰問題の解決方法
サブユーザーへの監視データ閲覧権限付与方法
ホワイトペーパー
セキュリティホワイトペーパー
性能ホワイトペーパー
トラブルシューティング
接続関連
性能関連
よくあるご質問
基本概念
購入と課金
サポートされるフォーマット
接続とネットワーク
機能特性
コンソールの操作
データベーステーブル
パフォーマンスとログ
データベース監査
TDSQL-C for MySQLとTencentDB for MySQLの違い
関連契約
SLA
利用規約
TDSQL-C ポリシー
プライバシーポリシー
データ処理と安全プロトコル
汎用参考
標準と認証
用語一覧
お問い合わせ

statement outline

PDF
フォーカスモード
フォントサイズ
最終更新日: 2025-12-30 16:14:40

機能説明

SQL チューニングはデータベースのパフォーマンス最適化において非常に重要な要素です。オプティマイザが適切な実行計画を選択できないことによる影響を避けるため、TXSQL は実行計画をバインドするための OUTLINE 機能を提供します。TDSQL-C MySQL データベースには、HINT を使用して人為的に実行計画をバインドする機能があります。HINT 情報には、SQL が採用する最適化ルール、実行するアルゴリズム、データスキャンに使用するインデックスなどが含まれます。OUTLINE は主に HINT に基づいてクエリ計画を指定し、ユーザーが計画バインドルールを追加できるシステムテーブル mysql.outline を提供します。また、この機能を有効にするかどうかはスイッチ(cdb_opt_outline_enabled)で制御されます。

サポートバージョン

カーネルバージョンはTDSQL-C for MySQL 8.0の3.1.10以上です。

適用シーン

本番環境で実行計画が誤動作する場合、例えば実行計画がインデックスを誤選択したが、ビジネス側がSQL修正や再リリースによる解決を望まないシナリオです。

使用説明

OUTLINEの構文設定は新しい構文形式を採用します:
OUTLINE情報の設定:outline "sql" set outline_info "outline";
OUTLINE情報のクリア:outline reset ""; outline reset all;
OUTLINE情報のフラッシュ:outline flush;
以下にOUTLINEの主な使用方法を紹介します。以下のスキーマを例に説明します:
create table t1(a int, b int, c int, primary key(a));
create table t2(a int, b int, c int, unique key idx2(a));
create table t3(a int, b int, c int, unique key idx3(a));
パラメータ名
動的
タイプ
デフォルト
パラメータ値の範囲
説明
cdb_opt_outline_enabled
yes
bool
false
true/false
outline機能の有効化状態
説明:
ユーザーは現在、上記パラメータの値を直接変更することはできません。変更が必要な場合は、チケットを提出して変更を行ってください。

OUTLINEのバインド

直接的なOUTLINEのバインド方法は、あるSQLを別のSQLに置き換えるもので、SQLのセマンティクスは変更されず、オプティマイザの実行方法を指示するためのHINT情報を追加しただけです。 構文形式は次のとおりです:outline "sql" set outline_info "outline";。outline_infoの後の文字列は"OUTLINE:"で始まり、"OUTLINE:"の後にHINTを追加したSQLが続く必要があることに注意してください。例えば、select * from t1, t2 where t1.a = t2.aというSQLに対して、t2テーブルのa列にインデックスを追加する場合です。
outline "select * from t1, t2 where t1.a = t2.a" set outline_info "OUTLINE:select * from t1, t2 use index(idx2) where t1.a = t2.a";

optimizer hintのバインド

機能をより柔軟にするために、TXSQL は SQL に optimizer hint を追加的に追加することを許可します。同じ機能は outline を直接バインドすることでも実現できます。 構文形式は次のとおりです:outline "sql" set outline_info "outline";。outline_info の後の文字列は "OPT:" で始める必要があり、"OPT:" の後に追加する optimizer hint 情報を記述します。例えば、select * from t1 where t1.a in (select b from t2) という SQL に MATERIALIZATION/DUPSWEEDOUT の SEMIJOIN を指定する場合などです。
outline "select * from t1 where t1.a in (select b from t2)" set outline_info "OPT:2#qb_name(qb2)";
outline "select * from t1 where t1.a in (select b from t2)" set outline_info "OPT:1#SEMIJOIN(@qb2 MATERIALIZATION, DUPSWEEDOUT)";
元のSQL文にオプティマイザのヒントを追加します。一度に追加できるヒントは1つのみで、構文上は以下の3点に注意が必要です:
OPTキーワードは"の直後に続けるべきです。
バインドする必要がある新しいステートメントの前には必ず「:」が必要です。
2つのフィールド(クエリブロックの番号 #オプティマイザヒントの文字列)を追加する必要があり、中間は必ず#で分割する必要があります(つまり "OPT:1#max_execution_time(1000)")。

インデックスヒントのバインド

機能をより柔軟にするために、TXSQL は SQL にインデックスヒントを追加的に追加することを許可します。同じ機能は outline を直接バインドすることでも実現できます。 構文形式は次のとおりです:outline "sql" set outline_info "outline";。outline_info の後の文字列は "INDEX:" で始める必要があり、"INDEX:" の後に追加するインデックスヒント情報を記述します。 以下に例を示します:select * from t1 where t1.a in (select t1.a from t1 where t1.b in (select t1.a from t1 left join t2 on t1.a = t2.a)) という SQL のクエリブロック 3 において、データベース test の t1 テーブルに USE INDEX のインデックス idx1 を FOR JOIN タイプで追加する場合です。
outline "select * from t1 where t1.a in (select t1.a from t1 where t1.b in (select t1.a from t1 left join t2 on t1.a = t2.a))" set outline_info "INDEX:3#test#t1#idx1#1#0";
元のSQL文にINDEXのHINTを追加します。一度に追加できるHINTは1つのみで、構文上は以下の4点に注意が必要です:
INDEXキーワードは"の直後に続けるべきです。
バインドする必要がある新しいステートメントの前には必ず「:」が必要です。
5つのフィールド(クエリブロックの番号 #db_name#table_name#index_name#index_type#clause)を追加する必要があります。
INDEXタイプにはさらに3つの値があります(0はINDEX_HINT_IGNORE、1はINDEX_HINT_USE、2はINDEX_HINT_FORCE)。また、clauseには3つの値があります(1はFOR JOIN、2はFOR ORDER BY、3はFOR GROUP BY)。これらは必ず#で分割する必要があります(例:"INDEX:2#test#t2#idx2#1#1" は、2番目のクエリブロック内のtest.t2テーブルに、タイプがUSE INDEX FOR JOINであるidx2インデックスをバインドすることを表します)。

あるSQLに対応するOUTLINE情報を削除する

TXSQLはユーザーが特定のSQL文のOUTLINEバインド情報を削除することを許可します。 構文は次のとおりです:outline reset "sql";。例:select * from t1, t2 where t1.a = t2.aのoutline情報を削除する場合:outline reset "select * from t1, t2 where t1.a = t2.a";

すべてのOUTLINE情報をクリアする

TXSQLはユーザーがカーネル内のすべてのOUTLINEバインド情報を削除することを許可します。構文は次のとおりです:outline reset all。実行文は次のとおりです:outline reset all;
オンライン業務では、特定の問題が発生した場合にインデックスを強制的にバインドする必要があることがあります。このような場合、直接OUTLINEを設定してバインドすることが可能です。 OUTLINE設定後に発生する可能性のあるパフォーマンス低下を分析し、許容範囲内のパフォーマンス低下に留まるようにバインドを行い、必要に応じてカーネル担当者と協議する必要があります。

ヘルプとサポート

この記事はお役に立ちましたか?

フィードバック