全部产品
分布式关系型数据库 DRDS

扫描全部分库分表

更新时间:2017-08-17 14:15:58   分享:   

除了可以将 SQL 单独下发到一个或多个分库执行,DRDS 还提供了扫描全部分库与分表的自定义 HINT。通过这个自定义 HINT,您可以一次将 SQL 下发到每一个分库执行。比如通过这个自定义 HINT,可以查看某个分库上的所有分表。还可以通过这个自定义 HINT,查看某个逻辑表的每个分库的分表数据量。

语法

扫描全部分片的 DRDS 自定义 HINT 有两种使用方式,第一种方式是将 SQL 语句下发到每个分库执行,第二种方式是将 SQL 语句下发到每个分库上对某个逻辑表进行操作。

  • 将 SQL 下发到全部分库上执行:

    1. /!TDDL:SCAN*/
  • 对某个逻辑表进行操作:

    1. /!TDDL:SCAN='table_name'*/

    其中table_name是 DRDS 数据库的某个逻辑表名。该自定义 HINT 是为分库分表提供的,请尽量确保table_name为分库分表。

注意:

  • DRDS 自定义 HINT 支持 /!TDDL:hint command*//*TDDL:hint command*/ 两种格式。

  • 如果使用 /*TDDL:hint command*/ 格式,在使用 MySQL 官方命令行客户端执行带有 DRDS 自定义 HINT 的 SQL 时,请在登录命令中加上 -c 参数。否则,由于 DRDS 自定义 HINT 是以 MySQL 注释 形式使用的,该客户端会将注释语句删除后再发送到服务端执行,导致 DRDS 自定义 HINT 失效。具体请查看 MySQL 官方客户端命令

示例

  • 查看某个广播表每个分库中的数据量:

    1. /!TDDL:SCAN*/SELECT COUNT(1) FROM table_name

    SQL 语句中 table_name 是一个广播表,这条语句会将 SQL 语句下发到每个分库上执行,所以结果集会包含每个分库中 table_name 表的数据量。这条语句可以很方便的检查广播表数据是否正常。

  • 只分库不分表的逻辑表扫描:

    1. /!TDDL:SCAN*/SELECT COUNT(1) FROM table_name

    这条语句将在每个分库中执行语句select count(1) from table_name,其中table_name为 DRDS 数据库中的逻辑表,在执行之前请确保每个分库中都有表名为table_name的分表(也就是table_name为一张只分库,不分表的逻辑表),否则会报找不到表的错误。

  • 分库分表的逻辑表扫描:

    1. /!TDDL:SCAN='table_name'*/SELECT COUNT(1) FROM table_name

    DRDS 在执行这条语句时,首先会计算出逻辑表 table_name 的所有分库和分表,再生成对每个分库中,每个分表的 COUNT 语句。

  • 查看所有分库的执行计划:

    1. /!TDDL:SCAN='table_name'*/EXPLAIN SELECT * FROM table_name;
本文导读目录
本文导读目录
以上内容是否对您有帮助?