- TiDBについて
- クイックスタート
- デプロイ
- 移行する
- 管理
- アップグレード
- 規模
- バックアップと復元
- BRツールを使用する(推奨)
- タイムゾーンの構成
- 毎日のチェックリスト
- TiFlashを管理する
- TiUPを使用してTiDBを管理する
- オンラインでConfiguration / コンフィグレーションを変更する
- オンラインの安全でない回復
- 監視と警告
- トラブルシューティング
- 性能チューニング
- システムチューニング
- ソフトウェアのチューニング
- Configuration / コンフィグレーション
- コプロセッサーキャッシュ
- SQLチューニング
- チュートリアル
- TiDBツール
- 概要
- ユースケース
- ダウンロード
- TiUP
- ドキュメントマップ
- 概要
- 用語と概念
- TiUPコンポーネントを管理する
- FAQ
- トラブルシューティングガイド
- コマンドリファレンス
- 概要
- TiUPコマンド
- TiUPクラスターコマンド
- 概要
- tiup cluster audit
- tiup cluster check
- tiup cluster clean
- tiup cluster deploy
- tiup cluster destroy
- tiup cluster disable
- tiup cluster display
- tiup cluster edit-config
- tiup cluster enable
- tiup cluster help
- tiup cluster import
- tiup cluster list
- tiup cluster patch
- tiup cluster prune
- tiup cluster reload
- tiup cluster rename
- tiup cluster replay
- tiup cluster restart
- tiup cluster scale-in
- tiup cluster scale-out
- tiup cluster start
- tiup cluster stop
- tiup cluster template
- tiup cluster upgrade
- TiUPDMコマンド
- 概要
- tiup dm audit
- tiup dm deploy
- tiup dm destroy
- tiup dm disable
- tiup dm display
- tiup dm edit-config
- tiup dm enable
- tiup dm help
- tiup dm import
- tiup dm list
- tiup dm patch
- tiup dm prune
- tiup dm reload
- tiup dm replay
- tiup dm restart
- tiup dm scale-in
- tiup dm scale-out
- tiup dm start
- tiup dm stop
- tiup dm template
- tiup dm upgrade
- TiDBクラスタートポロジリファレンス
- DMクラスタートポロジリファレンス
- ミラーリファレンスガイド
- TiUPコンポーネント
- TiDB Operator
- バックアップと復元(BR)
- TiDB Binlog
- TiDB Lightning
- TiDBデータ移行
- TiDBデータ移行について
- DMの概要
- 基本的な機能
- 高度な機能
- シャーディングされたテーブルからのデータのマージと移行
- GH-ost/PT-oscを使用するMySQLデータベースからの移行
- SQL式を使用してDMLをフィルタリングする
- DMアーキテクチャ
- ベンチマーク
- クイックスタート
- データ移行シナリオ
- デプロイ
- 管理
- ツール
- クラスターのアップグレード
- データソースを作成する
- データソースの管理
- データ移行タスクの管理
- シャーディングDDLロックを手動で処理する
- 移行するMySQLインスタンスを切り替えます
- 移行するテーブルのスキーマを管理する
- アラートを処理する
- デイリーチェック
- トラブルシューティング
- 性能チューニング
- 参照
- セキュリティ
- モニタリング指標
- アラートルール
- エラーコード
- FAQ
- 用語集
- 例
- リリースノート
- TiCDC
- Dumpling
- sync-diff-inspector
- TiSpark
- 参照
- クラスターアーキテクチャ
- 主要な監視指標
- セキュリティ
- 権限
- SQL
- SQL言語の構造と構文
- SQLステートメント
ADD COLUMN
ADD INDEX
ADMIN
ADMIN CANCEL DDL
ADMIN CHECKSUM TABLE
ADMIN CHECK [TABLE|INDEX]
ADMIN SHOW DDL [JOBS|QUERIES]
ADMIN SHOW TELEMETRY
ALTER DATABASE
ALTER INDEX
ALTER INSTANCE
ALTER PLACEMENT POLICY
ALTER TABLE
ALTER USER
ANALYZE TABLE
BACKUP
BEGIN
CHANGE COLUMN
COMMIT
CHANGE DRAINER
CHANGE PUMP
CREATE [GLOBAL|SESSION] BINDING
CREATE DATABASE
CREATE INDEX
CREATE PLACEMENT POLICY
CREATE ROLE
CREATE SEQUENCE
CREATE TABLE LIKE
CREATE TABLE
CREATE USER
CREATE VIEW
DEALLOCATE
DELETE
DESC
DESCRIBE
DO
DROP [GLOBAL|SESSION] BINDING
DROP COLUMN
DROP DATABASE
DROP INDEX
DROP PLACEMENT POLICY
DROP ROLE
DROP SEQUENCE
DROP STATS
DROP TABLE
DROP USER
DROP VIEW
EXECUTE
EXPLAIN ANALYZE
EXPLAIN
FLASHBACK TABLE
FLUSH PRIVILEGES
FLUSH STATUS
FLUSH TABLES
GRANT <privileges>
GRANT <role>
INSERT
KILL [TIDB]
LOAD DATA
LOAD STATS
MODIFY COLUMN
PREPARE
RECOVER TABLE
RENAME INDEX
RENAME TABLE
REPLACE
RESTORE
REVOKE <privileges>
REVOKE <role>
ROLLBACK
SELECT
SET DEFAULT ROLE
SET [NAMES|CHARACTER SET]
SET PASSWORD
SET ROLE
SET TRANSACTION
SET [GLOBAL|SESSION] <variable>
SHOW ANALYZE STATUS
SHOW [BACKUPS|RESTORES]
SHOW [GLOBAL|SESSION] BINDINGS
SHOW BUILTINS
SHOW CHARACTER SET
SHOW COLLATION
SHOW [FULL] COLUMNS FROM
SHOW CONFIG
SHOW CREATE PLACEMENT POLICY
SHOW CREATE SEQUENCE
SHOW CREATE TABLE
SHOW CREATE USER
SHOW DATABASES
SHOW DRAINER STATUS
SHOW ENGINES
SHOW ERRORS
SHOW [FULL] FIELDS FROM
SHOW GRANTS
SHOW INDEX [FROM|IN]
SHOW INDEXES [FROM|IN]
SHOW KEYS [FROM|IN]
SHOW MASTER STATUS
SHOW PLACEMENT
SHOW PLACEMENT FOR
SHOW PLACEMENT LABELS
SHOW PLUGINS
SHOW PRIVILEGES
SHOW [FULL] PROCESSSLIST
SHOW PROFILES
SHOW PUMP STATUS
SHOW SCHEMAS
SHOW STATS_HEALTHY
SHOW STATS_HISTOGRAMS
SHOW STATS_META
SHOW STATUS
SHOW TABLE NEXT_ROW_ID
SHOW TABLE REGIONS
SHOW TABLE STATUS
SHOW [FULL] TABLES
SHOW [GLOBAL|SESSION] VARIABLES
SHOW WARNINGS
SHUTDOWN
SPLIT REGION
START TRANSACTION
TABLE
TRACE
TRUNCATE
UPDATE
USE
WITH
- データ型
- 関数と演算子
- クラスター化インデックス
- 制約
- 生成された列
- SQLモード
- テーブル属性
- トランザクション
- ガベージコレクション(GC)
- ビュー
- パーティショニング
- 一時テーブル
- 文字セットと照合
- SQLの配置ルール
- システムテーブル
mysql
- INFORMATION_SCHEMA
- 概要
ANALYZE_STATUS
CLIENT_ERRORS_SUMMARY_BY_HOST
CLIENT_ERRORS_SUMMARY_BY_USER
CLIENT_ERRORS_SUMMARY_GLOBAL
CHARACTER_SETS
CLUSTER_CONFIG
CLUSTER_HARDWARE
CLUSTER_INFO
CLUSTER_LOAD
CLUSTER_LOG
CLUSTER_SYSTEMINFO
COLLATIONS
COLLATION_CHARACTER_SET_APPLICABILITY
COLUMNS
DATA_LOCK_WAITS
DDL_JOBS
DEADLOCKS
ENGINES
INSPECTION_RESULT
INSPECTION_RULES
INSPECTION_SUMMARY
KEY_COLUMN_USAGE
METRICS_SUMMARY
METRICS_TABLES
PARTITIONS
PLACEMENT_RULES
PROCESSLIST
REFERENTIAL_CONSTRAINTS
SCHEMATA
SEQUENCES
SESSION_VARIABLES
SLOW_QUERY
STATISTICS
TABLES
TABLE_CONSTRAINTS
TABLE_STORAGE_STATS
TIDB_HOT_REGIONS
TIDB_HOT_REGIONS_HISTORY
TIDB_INDEXES
TIDB_SERVERS_INFO
TIDB_TRX
TIFLASH_REPLICA
TIKV_REGION_PEERS
TIKV_REGION_STATUS
TIKV_STORE_STATUS
USER_PRIVILEGES
VIEWS
METRICS_SCHEMA
- UI
- TiDBダッシュボード
- 概要
- 管理
- アクセス
- 概要ページ
- クラスター情報ページ
- Top SQL
- キービジュアライザーページ
- メトリクス関係グラフ
- SQLステートメント分析
- 遅いクエリページ
- クラスター診断
- 検索ログページ
- インスタンスプロファイリング
- セッションの管理とConfiguration / コンフィグレーション
- FAQ
- CLI
- コマンドラインフラグ
- Configuration / コンフィグレーションファイルのパラメーター
- システム変数
- ストレージエンジン
- テレメトリー
- エラーコード
- テーブルフィルター
- トポロジラベルによるレプリカのスケジュール
- よくある質問
- リリースノート
- すべてのリリース
- リリースタイムライン
- TiDBバージョニング
- v5.4
- v5.3
- v5.2
- v5.1
- v5.0
- v4.0
- v3.1
- v3.0
- v2.1
- v2.0
- v1.0
- 用語集
最適化ルールと式のプッシュダウンのブロックリスト
このドキュメントでは、最適化ルールのブロックリストと式プッシュダウンのブロックリストを使用して、TiDBの動作を制御する方法を紹介します。
最適化ルールのブロックリスト
最適化ルールのブロックリストは、最適化ルールを調整する1つの方法であり、主に一部の最適化ルールを手動で無効にするために使用されます。
重要な最適化ルール
最適化ルール | ルール名 | 説明 |
---|---|---|
列の剪定 | column_prune | 上位のエグゼキュータが必要としない場合は、1人のオペレータが列を整理します。 |
サブクエリを非相関化 | デコレレート | 相関サブクエリを非相関結合または集約に書き直そうとします。 |
集計の除去 | Aggregation_eliminate | 実行プランから不要な集計演算子を削除しようとします。 |
突起物の除去 | Projection_eliminate | 実行プランから不要な射影演算子を削除します。 |
最大/最小除去 | max_min_eliminate | 一部のmax/min関数を集約してorder by + limit 1 形式に書き換えます。 |
述語プッシュダウン | predicate_push_down | データソースに近い演算子に述語をプッシュしようとします。 |
アウタージョインの排除 | external_join_eliminate | 実行プランから不要な左結合または右結合を削除しようとします。 |
パーティションの剪定 | partition_processor | 述部によって拒否されたパーティションを削除し、パーティションテーブルクエリをUnionAll + Partition Datasource 形式に書き換えます。 |
集計プッシュダウン | Aggregation_push_down | アグリゲーションを子にプッシュしようとします。 |
TopNプッシュダウン | topn_push_down | TopNオペレーターをデータソースに近い場所にプッシュしようとします。 |
再注文に参加 | join_reorder | マルチテーブル結合の順序を決定します。 |
最適化ルールを無効にする
一部のルールが特別なクエリの最適ではない実行プランにつながる場合は、最適化ルールのブロックリストを使用して、それらの一部を無効にすることができます。
使用法
ノート:
以下のすべての操作には、データベースの
super privilege
の特権が必要です。各最適化ルールには名前があります。たとえば、列プルーニングの名前はcolumn_prune
です。すべての最適化ルールの名前は、表重要な最適化ルールの2番目の列にあります。
一部のルールを無効にする場合は、その名前を
mysql.opt_rule_blacklist
テーブルに書き込みます。例えば:INSERT INTO mysql.opt_rule_blacklist VALUES("join_reorder"), ("topn_push_down");
次のSQLステートメントを実行すると、上記の操作をすぐに有効にすることができます。有効範囲には、対応するTiDBサーバーのすべての古い接続が含まれます。
admin reload opt_rule_blacklist;
ノート:
admin reload opt_rule_blacklist
は、上記のステートメントが実行されたTiDBサーバーでのみ有効です。クラスタのすべてのTiDBサーバーを有効にする場合は、各TiDBサーバーでこのコマンドを実行します。ルールを再度有効にする場合は、テーブル内の対応するデータを削除してから、次の
admin reload
のステートメントを実行します。DELETE FROM mysql.opt_rule_blacklist WHERE name IN ("join_reorder", "topn_push_down");
admin reload opt_rule_blacklist;
式プッシュダウンのブロックリスト
式のプッシュダウンのブロックリストは、式のプッシュダウンを調整する1つの方法であり、主に特定のデータ型の一部の式を手動で無効にするために使用されます。
プッシュダウンがサポートされている式
特定の式のプッシュダウンを無効にする
式のプッシュダウンが原因で間違った結果が得られた場合は、ブロックリストを使用してアプリケーションをすばやく回復できます。具体的には、サポートされている関数または演算子の一部をmysql.expr_pushdown_blacklist
テーブルに追加して、特定の式のプッシュダウンを無効にすることができます。
mysql.expr_pushdown_blacklist
のスキーマは次のように表示されます。
DESC mysql.expr_pushdown_blacklist;
+------------+--------------+------+------+-------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+------+-------------------+-------+
| name | char(100) | NO | | NULL | |
| store_type | char(100) | NO | | tikv,tiflash,tidb | |
| reason | varchar(200) | YES | | NULL | |
+------------+--------------+------+------+-------------------+-------+
3 rows in set (0.00 sec)
上記の各フィールドの説明は次のとおりです。
name
:プッシュダウンが無効になっている関数の名前。store_type
:計算のために関数がプッシュダウンされないようにするコンポーネントを指定します。使用可能なコンポーネントはtidb
、およびtikv
tiflash
。store_type
では大文字と小文字は区別されません。複数のコンポーネントを指定する必要がある場合は、コンマを使用して各コンポーネントを区切ります。store_type
がtidb
の場合、TiDBメモリテーブルの読み込み中に他のTiDBサーバーで機能を実行できるかどうかを示します。store_type
がtikv
の場合、TiKVサーバーのコプロセッサーコンポーネントで機能を実行できるかどうかを示します。store_type
がtiflash
の場合、TiFlashサーバーのコプロセッサーコンポーネントで機能を実行できるかどうかを示します。
reason
:この関数がブロックリストに追加された理由を記録します。
使用法
このセクションでは、式プッシュダウンのブロックリストの使用方法について説明します。
ブロックリストに追加
1つ以上の式(関数または演算子)をブロックリストに追加するには、次の手順を実行します。
対応する関数名または演算子名、およびプッシュダウンを無効にするコンポーネントのセットを
mysql.expr_pushdown_blacklist
のテーブルに挿入します。admin reload expr_pushdown_blacklist
を実行します。
ブロックリストから削除する
ブロックリストから1つ以上の式を削除するには、次の手順を実行します。
対応する関数名または演算子名、およびプッシュダウンを無効にするコンポーネントのセットを
mysql.expr_pushdown_blacklist
のテーブルから削除します。admin reload expr_pushdown_blacklist
を実行します。
ノート:
admin reload expr_pushdown_blacklist
は、このステートメントが実行されるTiDBサーバーでのみ有効です。クラスタのすべてのTiDBサーバーを有効にする場合は、各TiDBサーバーでこのコマンドを実行します。
式ブロックリストの使用例
次の例では、 <
と>
の演算子がブロックリストに追加され、次に>
の演算子がブロックリストから削除されます。
ブロックリストが有効かどうかを判断するには、 EXPLAIN
の結果を観察します( TiDBクエリ実行プランの概要を参照)。
次のSQLステートメントの
WHERE
節の述語a < 2
とa > 2
は、TiKVにプッシュダウンできます。EXPLAIN SELECT * FROM t WHERE a < 2 AND a > 2;
+-------------------------+----------+-----------+---------------+------------------------------------+ | id | estRows | task | access object | operator info | +-------------------------+----------+-----------+---------------+------------------------------------+ | TableReader_7 | 0.00 | root | | data:Selection_6 | | └─Selection_6 | 0.00 | cop[tikv] | | gt(ssb_1.t.a, 2), lt(ssb_1.t.a, 2) | | └─TableFullScan_5 | 10000.00 | cop[tikv] | table:t | keep order:false, stats:pseudo | +-------------------------+----------+-----------+---------------+------------------------------------+ 3 rows in set (0.00 sec)
式を
mysql.expr_pushdown_blacklist
テーブルに挿入し、admin reload expr_pushdown_blacklist
を実行します。INSERT INTO mysql.expr_pushdown_blacklist VALUES('<','tikv',''), ('>','tikv','');
Query OK, 2 rows affected (0.01 sec) Records: 2 Duplicates: 0 Warnings: 0
admin reload expr_pushdown_blacklist;
Query OK, 0 rows affected (0.00 sec)
実行プランをもう一度観察すると、
<
と>
の両方のオペレーターがTiKVコプロセッサーにプッシュダウンされていないことがわかります。EXPLAIN SELECT * FROM t WHERE a < 2 and a > 2;
+-------------------------+----------+-----------+---------------+------------------------------------+ | id | estRows | task | access object | operator info | +-------------------------+----------+-----------+---------------+------------------------------------+ | Selection_7 | 10000.00 | root | | gt(ssb_1.t.a, 2), lt(ssb_1.t.a, 2) | | └─TableReader_6 | 10000.00 | root | | data:TableFullScan_5 | | └─TableFullScan_5 | 10000.00 | cop[tikv] | table:t | keep order:false, stats:pseudo | +-------------------------+----------+-----------+---------------+------------------------------------+ 3 rows in set (0.00 sec)
ブロックリストから1つの式(ここでは
>
)を削除し、admin reload expr_pushdown_blacklist
を実行します。DELETE FROM mysql.expr_pushdown_blacklist WHERE name = '>';
Query OK, 1 row affected (0.01 sec)
admin reload expr_pushdown_blacklist;
Query OK, 0 rows affected (0.00 sec)
実行プランをもう一度観察すると、
>
がTiKVコプロセッサーにプッシュダウンされている間、<
はプッシュダウンされていないことがわかります。EXPLAIN SELECT * FROM t WHERE a < 2 AND a > 2;
+---------------------------+----------+-----------+---------------+--------------------------------+ | id | estRows | task | access object | operator info | +---------------------------+----------+-----------+---------------+--------------------------------+ | Selection_8 | 0.00 | root | | lt(ssb_1.t.a, 2) | | └─TableReader_7 | 0.00 | root | | data:Selection_6 | | └─Selection_6 | 0.00 | cop[tikv] | | gt(ssb_1.t.a, 2) | | └─TableFullScan_5 | 10000.00 | cop[tikv] | table:t | keep order:false, stats:pseudo | +---------------------------+----------+-----------+---------------+--------------------------------+ 4 rows in set (0.00 sec)