Upgrade to Pro — share decks privately, control downloads, hide ads and more …

TiDBにおけるSQLチューニング - SQL bindingの紹介

TiDBにおけるSQLチューニング - SQL bindingの紹介

ウェビナー開催日:2023年4月13日

SQLをチューニングするときに実行計画の解析は不可欠な一部となります。通常、DBAやアプリケーション開発者は実行計画を参照して適切なSQLを模索します。しかし、実際に適用される実行計画はSQLの構文だけでなく、実行時点での統計情報によっても変わることがあるため、確実に意図した実行計画に基づいてSQLを実行することが難しい場合があります。

分散型データベースのTiDBには、SQL Plan Management (SPM) の1つにSQL bindingという機能があります。この機能によって、お客様は任意のSQLに対して適宜ヒント句を含めたSQLを紐付けたり、過去の実行計画を選択したりして、既存のSQLを変更することなくSQLの実行計画を最適化することが可能です。本ビデオではこのようなSQL bindingの機能や操作方法を紹介して、TiDBでのSQLチューニングに役立ていただくことを目指します。

2023年3月時点では最新となるv6.6-DMRにおいて、過去の履歴から実行計画を選択する機能がGAとなり、TiDB Dashboard上でも操作可能となりました。本ビデオではGUIでの操作方法のデモも行います。

なお、本スライドは過去に実施したセミナー「TiDBでのSQL実行の仕組み」を事前にご覧いただくと、より一層理解を深めることができるようになります。

トピック:
・SQL Planmanagement (SPM) とは何か
・TiDBにおけるSQLと実行計画
・SQL bindingの機能及び操作方法

アーカイブ動画:https://youtu.be/gxOHwf6pPFA

PingCAP-Japan

April 13, 2023
Tweet

More Decks by PingCAP-Japan

Other Decks in Technology

Transcript

  1. 本日の位置づけ • https://pingcap.co.jp/event/ • https://pingcap.co.jp/category/webinar/ 
 
 2023年1月20日(金) 14:00-15:00 PingCAP

    Education:TiCDC、Dumpling、Lightningの紹介 2023年2月3日(金) 14:00-15:00 TiDB 6.5 LTS新機能の紹介 2023年2月17日(金) 14:00-15:00 PingCAP Education:TiDB CloudのIntegration機能の紹介 - Datadog、 Prometheus、Vercelとの統合 2023年3月2日(木) 14:00-15:00 TiDB Cloud Serverless TierとChatGPTのSQL生成を試してみよう! 2023年3月24日(金) 14:00-15:00 TiFlashの紹介 2023年4月13日(金) 14:00-15:00 TiDBにおけるSQLチューニング - SQL bindingの紹介 2023年5月18日(木) 14:00-15:00 TiDB 7.0 DMR新機能の紹介 ※過去開催アーカイブ : https://pingcap.co.jp/event-video/
  2. TiDBにおけるSQLチューニングの考え方 • 実行計画に基づいたチューニング ◦ 実行計画を理解する ◦ SQLを見直す ◦ インデックスを見直す ◦

    統計情報を最新に更新する • 実行計画を制御する ◦ Hint句を利用する ◦ SQL bindingを利用する
  3. TiDBにおけるSQLチューニングの考え方 • 実行計画に基づいたチューニング ◦ 実行計画を理解する ◦ SQLを見直す ◦ インデックスを見直す ◦

    統計情報を最新に更新する • 実行計画を制御する ◦ Hint句を利用する ◦ SQL bindingを利用する
  4. 実行計画に基づいたチューニング - 実行計画を理解する • EXPLAINの結果からSQLがどのように実行されるかを理解する • EXPLAIN ANALYZEの結果から実際の実行状況を理解する • actRows:

    実際に処理されたデータの行数 • execution info: 実際の処理状況 • memory, disk: 実際に利用されたリソース量 https://docs.pingcap.com/tidb/stable/explain-walkthrough#assess-the-current-performance
  5. TiDBにおけるSQLチューニングの考え方 • 実行計画に基づいたチューニング ◦ 実行計画を理解する ◦ SQLを見直す ▪ WHERE句でのフィルタ条件の追加、SELECT句での列絞り込みなど ◦

    インデックスを見直す ◦ 統計情報を最新に更新する • 実行計画を制御する ◦ Hint句を利用する ◦ SQL bindingを利用する
  6. TiDBにおけるSQLチューニングの考え方 • 実行計画に基づいたチューニング ◦ 実行計画を理解する ◦ SQLを見直す ◦ インデックスを見直す ◦

    統計情報を最新に更新する • 実行計画を制御する ◦ Hint句を利用する ◦ SQL bindingを利用する
  7. • 実行計画に基づいたチューニング ◦ 実行計画を理解する ◦ SQLを見直す ◦ インデックスを見直す ◦ 統計情報を最新に更新する

    ▪ ANALYZE TABLE • 実行計画を制御する ◦ Hint句を利用する ◦ SQL bindingを利用する TiDBにおけるSQLチューニングの考え方
  8. • 実行計画に基づいたチューニング ◦ 実行計画を理解する ◦ SQLを見直す ◦ インデックスを見直す ◦ 統計情報を最新に更新する

    • 実行計画を制御する ◦ Hint句を利用する ▪ Optimizerが任意の実行計画を生成するように誘導する ◦ SQL bindingを利用する TiDBにおけるSQLチューニングの考え方
  9. • 実行計画に基づいたチューニング ◦ 実行計画を理解する ◦ SQLを見直す ◦ インデックスを見直す ◦ 統計情報を最新に更新する

    • 実行計画を制御する ◦ Hint句を利用する ◦ SQL bindingを利用する ▪ SQL Plan Management (SPM)の1つ • SQL binding, baseline capturing, そして baseline evolutionの3つ で構成される ▪ アプリケーションやSQLを改変することなく、実行計画を強制する TiDBにおけるSQLチューニングの考え方
  10. SQL Plan Management (SPM) とは何か • SQLの実行計画に干渉するための機能 • SQL binding,

    baseline capturing, baseline evolutionの3つ ◦ SQL binding ▪ SQLに対して、任意の実行計画をbindする ◦ Baseline capturing ▪ キャプチャ条件を満たしている場合に、生成されたSQLの実行計画の履 歴に基づいて自動的にbindを行う ◦ Baseline evolution ▪ 以前にbindした実行計画が最適でなくなると、自動的に最適化を行う ▪ 現在は利用できない https://docs.pingcap.com/tidb/stable/sql-plan-management
  11. SQL bindingの操作方法 - SQLを指定して作成 • bind可能なSQLは”SELECT”、 “DELETE”、 “UPDATE”、サブクエリ付き の”INSERT”または”REPLACE”の4つ •

    Globalスコープで作成したbindingはmysqlスキーマの中のbind_infoの中に保 存される • SessionスコープのbindingはGlobalスコープのbindingをブロックする https://docs.pingcap.com/tidbcloud/sql-plan-management#create-a-binding-according-to-a-sql-statement CREATE [GLOBAL|SESSION] BINDING for <bindの対象となるSQL> using <bindしたいHint句付きのSQL>
  12. SQL bindingの操作方法 - 履歴から作成 • “plan_digest”にはinformation_schemaスキーマのstatements_summaryテーブ ルなどにある”PLAN_DIGEST”の列の値をセットする • statements_summaryテーブル以外では、以下のテーブルからplan_digestを検 索することができる

    ◦ statements_summary_history ◦ cluster_statements_summary ◦ cluster_statements_summary_history ◦ statements_summary_evicted https://docs.pingcap.com/tidbcloud/sql-plan-management#create-a-binding-according-to-a-historical-execution-plan CREATE [GLOBAL | SESSION] BINDING FROM HISTORY USING PLAN DIGEST 'plan_digest';
  13. • 登録したBindingsに関する様々な情報を閲覧する • LIKE ‘%foo%’ や WHERE default_db = ‘test’

    などを指定して絞り込むことが可能 SQL bindingの操作方法 - 閲覧 https://docs.pingcap.com/tidbcloud/sql-plan-management#view-bindings SHOW [GLOBAL | SESSION] BINDINGS [ShowLikeOrWhere]
  14. • “SELECT @@[SESSION.]last_plan_from_binding;”では、直前に実行したSQLの実行計 画がbindingしたものかどうかを知ることができる(0: false, 1: true) SQL bindingの操作方法 -

    確認 https://docs.pingcap.com/tidbcloud/sql-plan-management#troubleshoot-a-binding SELECT @@[SESSION.]last_plan_from_binding; EXPLAIN format = 'verbose' SELECT * FROM t; • EXPLAIN実行後、bindingが使われた場合にwarningメッセージとして確認することが できる ◦ 例: Note (Code 1105): Using the bindSQL: SELECT /*+ merge_join(`t1`, `t2`)*/ * FROM (`test`.`t1`) JOIN `test`.`t2` WHERE `t1`.`id` = `t2`.`id`
  15. まとめ • TiDBにおけるSQLチューニングの復習をしました ◦ 実行計画に基づいたチューニングを実施してください ◦ 過去のウェビナーが参考になります • SQL Plan

    Management の SQL binding を使って実行計画を固定させることがで きます ◦ SQLやアプリケーションを書き換えることなく、SQLの動作を変えることができ ます
  16. Q&A