ALTER TABLE ... SET TIFLASH MODE ...

使用 ALTER TABLE ... SET TIFLASH MODE ... 语句,你可以在对应表上启用或禁用 FastScan:

  • Normal Mode:默认选项。该选项会禁用 FastScan,从而能够保证查询结果精度以及数据一致性。
  • Fast Mode:即FastScan,该选项可以实现更高效的查询性能,但不保证查询结果精度和数据一致性。

该语句执行时不会阻塞现有 SQL 语句的执行或 TiDB 功能的使用,包括事务、DDL、GC 等,也不会改变通过 SQL 语句访问获得的数据内容。该语句会在 FastScan 切换完毕后正常结束。

该语句仅支持对表在 TiFlash 中的 FastScan 选项进行修改,因此该选项修改后也仅对涉及到 TiFlash 表部分的读取产生对应的影响。

对 FastScan 的修改在表具有 TiFlash Replica 时才真实生效。若切换 FastScan 时,表的 TiFlash Replica 为空,则需等后续重新设置表的 TiFlash Replica 后,修改才真正生效。你可以使用 ALTER TABLE ... SET TIFLASH REPLICA ... 语句来设置表的 TiFlash Replica。

可以通过系统表 information_schema.tiflash_replica 查询对应表目前的 TiFlash table mode。

语法图

AlterTableSetTiFlashModeStmt
ALTERTABLETableNameSETTIFLASHMODEmode

示例

假设表 test 有一个 TiFlash 副本。

USE TEST;

CREATE TABLE test (a INT NOT NULL, b INT);

ALTER TABLE test SET TIFLASH REPLICA 1;

test 表默认不开启 FastScan 功能。你可以通过以下语句查询该表的 FastScan 功能是否开启:

SELECT table_mode FROM information_schema.tiflash_replica WHERE table_name = 'test' AND table_schema = 'test'
+------------+
| table_mode |
+------------+
| NORMAL     |
+------------+

如果要启用 FastScan 查询 test 表,执行以下语句来切换,并查询当前表的 FastScan 功能是否开启。

ALTER TABLE test SET tiflash mode FAST

SELECT table_mode FROM information_schema.tiflash_replica WHERE table_name = 'test' AND table_schema = 'test'
+------------+
| table_mode |
+------------+
| FAST       |
+------------+

如果想禁用 FastScan,执行以下语句。

ALTER TABLE test SET tiflash mode NORMAL

MySQL 兼容性

ALTER TABLE ...SET TiFLASH MODE ... 语法是 TiDB 引入的对标准 SQL 语法的扩展。尽管没有对应的 MySQL 语法,你仍然可通过 MySQL 各版本客户端,或各个遵循 MySQL 协议的数据库驱动执行该语句。

TiDB Binlog 及 TiCDC 兼容性

当下游也为 TiDB 时,ALTER TABLE ...SET TiFLASH MODE .. 会被 TiDB Binlog 同步到下游。其他场景下,TiDB Binlog 不会同步该语句。

FastScan 不支持 TiCDC。

另请参阅

下载 PDF文档反馈社区交流
文档内容是否有帮助?
产品
TiDB
学习
客户案例
PingCAP Education
TiDB in Action
© 2022 PingCAP. All Rights Reserved.