tencent cloud

TencentDB for MySQL

動向とお知らせ
製品アップデート情報一覧
初心者ガイド
製品紹介
製品概要
製品の優位性
適用シナリオ
データベースのアーキテクチャ
タグ編集
製品機能リスト
データベースインスタンス
高可用性(マルチアベイラビリティゾーン)
地域とAvailability Zone
自社研究カーネル
TXSQLカーネル概要
機能系特性
パフォーマンス系特性
セキュリティ系特性
安定性系特性
TXRocksエンジン
購入ガイド
課金概要
購入方法
支払い更新の説明
支払い延滞の説明
返金説明
インスタンス調整の料金の説明
バックアップキャパシティ課金説明
クイックスタート
概要
MySQLインスタンスの作成
操作ガイド
使用制限
操作一覧
インスタンスの管理とメンテナンス
アップグレードインスタンス
拡張インスタンス
データベースプロキシ
データベース管理(DMC)
アカウント管理
パラメータ設定
バックアップとロールバック
データ移行
インターネットとセキュリティ
監視とアラーム
ログセンター
タグ
プラクティスチュートリアル
MySQL利用規約
アプリケーションの自動再接続機能のコンフィグレーション
MySQLマスターインスタンスパラメータの変更影響
MyISAMからInnoDBエンジンへの切り替え制限
TencentDB for MySQLのためのVPC作成
MySQLによるサービス負荷能力の向上
2地域3センターのディザスタリカバリ構築
リード・ライト分離によるTencentDB for MySQLパフォーマンスの拡張
DTSでInnoDBデータをRocksDBに移行します
LAMPスタック上のWebアプリケーションの構築
Drupalウエブサイトの構築
Python言語によるMySQL APIの使用
ホワイトペーパー
パフォーマンス白書
セキュリティ白書
トラブルシューティング
接続に関する問題
性能関連
インスタンスデータの同期遅延
大文字と小文字を区別しない設定に失敗しました
APIドキュメント
History
Introduction
API Category
Instance APIs
Making API Requests
Data Import APIs
Database Proxy APIs
Database Audit APIs
Security APIs
Task APIs
Backup APIs
Account APIs
Rollback APIs
Parameter APIs
Database APIs
Monitoring APIs
Log-related API
Data Types
Error Codes
よくある質問
課金関連
ロールバック関連の問題
接続とログインに関する問題
パラメータを変更
アップグレード関連の問題
アカウント権限
性能メモリ
運営する
データ移行
機能特徴
コンソール関連
ログ関連
API 2.0切り替え 3.0ガイド
Service Agreement
Service Level Agreement
Terms of Service
汎用参考
標準と認証
お問い合わせ
用語集

statement outline

PDF
フォーカスモード
フォントサイズ
最終更新日: 2024-07-25 16:20:38

機能の説明

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

サポートするバージョン

カーネルバージョン MySQL 8.0 20201230およびそれ以降

ユースケース

オンライン実行計画のインデックス選択ミスなど、オンラインでの実行計画に誤りがあったが、業務上、SQLを変更して新バージョンをリリースする解決方法を取りたくないケース。

パフォーマンスへの影響

cdb_opt_outline_enabledスイッチがオンになっている状態で、outlineにヒットしないSQLの実行効率は影響を受けません。
outlineにヒットしたSQLの実行効率は正常な実行よりは低下しますが、一般的にoutlineバインドによる上昇は、それまでの計画パフォーマンスに比べて数倍の上昇となります。
このスイッチを使用する場合は、問い合わせと運用保守またはカーネルの担当者を置き、発生する可能性のあるバインドエラーによるパフォーマンスの後退を防止する必要があります。

利用説明

OUTLINE構文の設定に用いる新しい構文形式:
OUTLINE情報を設定する:outline "sql" set outline_info "outline";
OUTLINE情報を空にする:outline reset ""; outline reset all;
OUTLINE情報をフラッシュする:outline flush;
次にOUTLINEの主な使用方法を紹介します。以下のschemaを例に説明します。
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
fasle
true/false
outline機能をオンにするかどうか
説明:
ユーザーは現在、上記パラメータのパラメータ値を直接変更することはできません。変更する場合は、チケットを提出から変更することができます。

OUTLINEのバインド

OUTLINEの直接バインド方式とは、1文のSQLを、SQLの意味は変えずに別の1文に置き換えるもので、いくつかの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ステートメントにOPTIMIZERのHINTを追加する場合は、1回につき1個のHINTの追加のみサポートしています。構文については3つの点に注意する必要があります。
OPTキーワードは必ず"のすぐ後に入力します。
バインドしたい新しいステートメントの前には必ず':'を入力します。
2つのフィールドを追加したい場合は(query blockの番号#optimizer hintの文字列)、間を必ず#で区切ります(ie. "OPT:1#max_execution_time(1000)")。

index hintのバインド

機能をさらに柔軟にするため、TXSQLでは、SQL中にindex hintを増分追加することが許容されています。同様の機能はoutlineの直接バインドによっても実現できます。 構文形式はoutline "sql" set outline_info "outline";です。outline_infoの後の文字列は必ず"INDEX:"で開始し、"INDEX:"の後を追加したいindex hint情報とすることに注意してください。 次に例を挙げます。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のquery block 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を追加する場合は、1回につき1個のHINTの追加のみサポートしています。構文については4つの点に注意してください。
INDEXキーワードは必ず"のすぐ後に入力します。
バインドしたい新しいステートメントの前には必ず':'を入力します。
5つのフィールド(query blockの番号 #db_name#table_name#index_name#index_type#clause)を追加する必要があります。
その中のindex_typeにはさらに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)、間は必ず#で区切ります(ie. "INDEX:2#test#t2#idx2#1#0"は2番目のquery block中のtest.t2テーブル中に、タイプがUSE INDEX FOR JOINであるidx1インデックスをバインドすることを表す)。

ある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の設定後に起こる可能性のあるパフォーマンスの後退を分析し、許容可能なパフォーマンス後退の範囲でバインドを行う必要があります。 必要に応じ、カーネル担当者と相談してください。

関連パラメータステータス説明

TXSQLはユーザーのSQLのOUTLINEバインドを確認するための様々な方法を提供しています。まず、mysql.outlineテーブルを通じてユーザーのOUTLINE設定状況を確認できます。次に、show cdb_outline_info、select * from information_schema.cdb_outline_infoという2つのインターフェースによって、メモリ内のOUTLINE情報を確認できます。入力したSQLが変更可能かどうかは、メモリ内にOUTLINE情報があるかどうかによって決まるため、ユーザーはこの2つのインターフェースを使用してデバッグを行うことができます。
mysql.outlineシステムテーブルが追加され、ユーザーが設定したOUTLINE情報のレコードはこのテーブルに保存されます。このテーブルのフィールドは次のとおりです。
フィールド名
説明
Id
OUTLINE設定情報番号
Digest
オリジナルSQLステートメントのハッシュ値
Digest_text
オリジナルSQLステートメントの指紋情報テキスト
Outline_text
OUTLINEバインド後のSQLステートメントの指紋情報テキスト
show cdb_outline_infoまたはselect * from information_schema.cdb_outline_infoでもメモリ内のレコードを確認でき、SQLを実行するとその中のOUTLINEレコードバインド計画にヒットする場合があります。パラメータは次のとおりです。
フィールド名
説明
origin
オリジナルSQLステートメントの指紋
outline
OUTLINEバインド後のSQLステートメントの指紋

ヘルプとサポート

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

フィードバック