PolarDB-X 1.0-SQL 手册-Hint-指定分库执行SQL

简介: 在使用 PolarDB-X 的过程中,如果遇到某个 PolarDB-X 不支持的 SQL 语句,可以通过 PolarDB-X 提供的NODE HINT,直接将 SQL 下发到一个或多个分库上去执行。此外如果需要单独查询某个分库或者已知分库的某个分表中的数据,也可以使用NODE HINT,直接将 SQL 语句下发到分库中执行。

在使用 PolarDB-X 的过程中,如果遇到某个 PolarDB-X 不支持的 SQL 语句,可以通过 PolarDB-X 提供的NODE HINT,直接将 SQL 下发到一个或多个分库上去执行。此外如果需要单独查询某个分库或者已知分库的某个分表中的数据,也可以使用NODE HINT,直接将 SQL 语句下发到分库中执行。

注意事项

  • 本文适用于PolarDB-X 5.3 及以上版本,其他版本请参见PolarDB-X 5.2 HINT
  • 从版本 5.4.1 开始,PolarDB-X 在拆分表的物理表名中增加了4个字符的随机串,请务必使用 SHOW TOPOLOGY 命令获取逻辑表拓扑和实际的物理表名。
  • 从版本 5.4.4 开始,PolarDB-X 提供开关来控制拆分表的物理表名中是否包含随机串,默认为开启,可以在控制台“参数设置”的数据库级别参数中,将“是否启用随机物理表名 ENABLE_RANDOM_PHY_TABLE_NAME”改为 false 来关闭,也可以用 HINT 来实现语句级别的控制:/*+TDDL:cmd_extra(ENABLE_RANDOM_PHY_TABLE_NAME=FALSE)*/
  • PolarDB-X 自定义 HINT 支持 /*+TDDL:hint_command*//!+TDDL:hint_command*/ 两种格式。
  • 如果使用 /*+TDDL:hint_command*/ 格式,在使用 MySQL 官方命令行客户端执行带有 PolarDB-X 自定义 HINT 的 SQL 时,请在登录命令中加上 -c 参数。否则,由于 PolarDB-X 自定义 HINT 是以 MySQL 注释 形式使用的,该客户端会将注释语句删除后再发送到服务端执行,导致 PolarDB-X 自定义 HINT 失效。具体请参见MySQL 官方客户端命令

语法

NODE HINT支持通过分片名指定 SQL 在分库上执行。其中分片名是 PolarDB-X 中分库的唯一标识,可以通过 SHOW NODE 语句得到。

通过分库名指定 SQL 在分库上执行分两种使用方式,分别是指定 SQL 在某个分库上执行和指定 SQL 在多个分库上执行。

如果在目标表包含 Sequence 的 INSERT 语句上使用了指定分库的 HINT,那么 Sequence 将不生效。更多相关信息,请参见Sequence 限制及注意事项

  • 指定 SQL 在某个分库上执行:
  1. /*+TDDL:node('node_name')*/
  • node_name 为分片名,通过这个 PolarDB-X 自定义 HINT,就可以将 SQL 下发到node_name对应的分库中执行。
  • 指定 SQL 在多个分库上执行:
  1. /*+TDDL:node('node_name'[,'node_name1','node_name2'])*/
  • 在参数中指定多个分片名,将 SQL 下发到多个分库上执行,分片名之间使用逗号分隔。
  • 使用该自定义 HINT 时,PolarDB-X 会将 SQL 直接下发到分库上执行,所以在 SQL 语句中,表名必须是该分库中已经存在的表名。
  • NODE HINT支持 DML、DDL、DAL 语句。

示例

对于名为 drds_test 的 PolarDB-X 数据库,SHOW NODE 的结果如下:


  1. mysql> SHOW NODE\G
  2. ***************************1. row ******************
  3.                 ID:0
  4.               NAME: DRDS_TEST_1473471355140LRPRDRDS_TEST_VTLA_0000_RDS
  5.  MASTER_READ_COUNT:212
  6.   SLAVE_READ_COUNT:0
  7. MASTER_READ_PERCENT:100%
  8. SLAVE_READ_PERCENT:0%
  9. ***************************2. row ******************
  10.                 ID:1
  11.               NAME: DRDS_TEST_1473471355140LRPRDRDS_TEST_VTLA_0001_RDS
  12.  MASTER_READ_COUNT:29
  13.   SLAVE_READ_COUNT:0
  14. MASTER_READ_PERCENT:100%
  15. SLAVE_READ_PERCENT:0%
  16. ***************************3. row ******************
  17.                 ID:2
  18.               NAME: DRDS_TEST_1473471355140LRPRDRDS_TEST_VTLA_0002_RDS
  19.  MASTER_READ_COUNT:29
  20.   SLAVE_READ_COUNT:0
  21. MASTER_READ_PERCENT:100%
  22. SLAVE_READ_PERCENT:0%
  23. ***************************4. row ******************
  24.                 ID:3
  25.               NAME: DRDS_TEST_1473471355140LRPRDRDS_TEST_VTLA_0003_RDS
  26.  MASTER_READ_COUNT:29
  27.   SLAVE_READ_COUNT:0
  28. MASTER_READ_PERCENT:100%
  29. SLAVE_READ_PERCENT:0%
  30. ***************************5. row ******************
  31.                 ID:4
  32.               NAME: DRDS_TEST_1473471355140LRPRDRDS_TEST_VTLA_0004_RDS
  33.  MASTER_READ_COUNT:29
  34.   SLAVE_READ_COUNT:0
  35. MASTER_READ_PERCENT:100%
  36. SLAVE_READ_PERCENT:0%
  37. ***************************6. row ******************
  38.                 ID:5
  39.               NAME: DRDS_TEST_1473471355140LRPRDRDS_TEST_VTLA_0005_RDS
  40.  MASTER_READ_COUNT:29
  41.   SLAVE_READ_COUNT:0
  42. MASTER_READ_PERCENT:100%
  43. SLAVE_READ_PERCENT:0%
  44. ***************************7. row ******************
  45.                 ID:6
  46.               NAME: DRDS_TEST_1473471355140LRPRDRDS_TEST_VTLA_0006_RDS
  47.  MASTER_READ_COUNT:29
  48.   SLAVE_READ_COUNT:0
  49. MASTER_READ_PERCENT:100%
  50. SLAVE_READ_PERCENT:0%
  51. ***************************8. row ******************
  52.                 ID:7
  53.               NAME: DRDS_TEST_1473471355140LRPRDRDS_TEST_VTLA_0007_RDS
  54.  MASTER_READ_COUNT:29
  55.   SLAVE_READ_COUNT:0
  56. MASTER_READ_PERCENT:100%
  57. SLAVE_READ_PERCENT:0%
  58. 8 rows inset(0.02 sec)

可以看到每个分库都有 NAME 这个属性,这就是分库的分片名。每个分片名都唯一对应一个分库名,比如DRDS_TEST_1473471355140LRPRDRDS_TEST_VTLA_0003_RDS这个分片名对应的分库名是drds_test_vtla_0003。得到了分片名,就可以使用 PolarDB-X 的自定义 HINT 指定分库执行 SQL 语句了。

  • 指定 SQL 在第 0 个分库上执行:
  1. SELECT /*TDDL:node('DRDS_TEST_1473471355140LRPRDRDS_TEST_VTLA_0000_RDS')*/* FROM table_name;
  • 指定 SQL 在多个分库上执行:
  1. SELECT /*TDDL:node('DRDS_TEST_1473471355140LRPRDRDS_TEST_VTLA_0000_RDS','DRDS_TEST_1473471355140LRPRDRDS_TEST_VTLA_0006_RDS')*/* FROM table_name;
  • 这条 SQL 语句将在DRDS_TEST_1473471355140LRPRDRDS_TEST_VTLA_0000_RDSDRDS_TEST_1473471355140LRPRDRDS_TEST_VTLA_0006_RDS这两个分片上执行。
  • 查看 SQL 在第 0 个分库上物理执行计划:
  1. /*TDDL:node('DRDS_TEST_1473471355140LRPRDRDS_TEST_VTLA_0000_RDS')*/ EXPLAIN SELECT * FROM table_name;
相关文章
|
关系型数据库 分布式数据库 数据库
PolarDB产品使用问题之将RDS切换到PolarDB-X 2.0时,代码层的SQL该如何改动
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
SQL 存储 缓存
PolarDB-X SQL限流
本文首先介绍了SQL限流的使用场景,它可通过限制边缘业务查询,留出资源来为核心业务保驾护航。接着是功能简介,PolarDB-X结合自身云原生分布式的特点,提供了具有简洁易用的交互接口、多样的限流策略、平均复杂度O(1)、节点级限流实例级监控的SQL限流能力。
409 1
PolarDB-X SQL限流
|
SQL Java 调度
PolarDB-X SQL限流 (二)
当前PolarDB-X正在全面对接阿里云 ''数据库自治服务 DAS",PolarDB-X限流能力将会以白屏化的方式提供给用户,经一步提升用户体验,降低使用门槛。
467 0
PolarDB-X SQL限流 (二)
|
SQL 弹性计算 测试技术
实践教程之如何在PolarDB-X中优化慢SQL
PolarDB-X 为了方便用户体验,提供了免费的实验环境,您可以在实验环境里体验 PolarDB-X 的安装部署和各种内核特性。除了免费的实验,PolarDB-X 也提供免费的视频课程,手把手教你玩转 PolarDB-X 分布式数据库。本期实验将指导您使用对 PolarDB-X 进行慢SQL优化。...
实践教程之如何在PolarDB-X中优化慢SQL
|
SQL 运维 数据库
PolarDB-X 限流慢SQL的方法
如果用户发现活跃连接数、cpu 使用率等指标处于高位, 同时慢SQL日志中发现大量记录, 分析得出是大量慢 SQL占用了数据库资源,而且这些慢SQL已经影响到整体核心业务的稳定运行,此时我们需要对其进行限流。
580 0
PolarDB-X 限流慢SQL的方法
|
12月前
|
关系型数据库 分布式数据库 数据库
一库多能:阿里云PolarDB三大引擎、四种输出形态,覆盖企业数据库全场景
PolarDB是阿里云自研的新一代云原生数据库,提供极致弹性、高性能和海量存储。它包含三个版本:PolarDB-M(兼容MySQL)、PolarDB-PG(兼容PostgreSQL及Oracle语法)和PolarDB-X(分布式数据库)。支持公有云、专有云、DBStack及轻量版等多种形态,满足不同场景需求。2021年,PolarDB-PG与PolarDB-X开源,内核与商业版一致,推动国产数据库生态发展,同时兼容主流国产操作系统与芯片,获得权威安全认证。
|
9月前
|
存储 关系型数据库 分布式数据库
喜报|阿里云PolarDB数据库(分布式版)荣获国内首台(套)产品奖项
阿里云PolarDB数据库管理软件(分布式版)荣获「2024年度国内首版次软件」称号,并跻身《2024年度浙江省首台(套)推广应用典型案例》。
|
10月前
|
关系型数据库 分布式数据库 数据库
再获殊荣,阿里云PolarDB数据库蝉联SIGMOD最佳论文奖
内存池化技术新突破,阿里云PolarDB蝉联SIGMOD最佳论文奖
|
7月前
|
Cloud Native 关系型数据库 MySQL
免费体验!高效实现自建 MySQL 数据库平滑迁移至 PolarDB-X
PolarDB-X 是阿里云推出的云原生分布式数据库,支持PB级存储扩展、高并发访问与数据强一致,助力企业实现MySQL平滑迁移。现已开放免费体验,点击即享高效、稳定的数据库升级方案。
免费体验!高效实现自建 MySQL 数据库平滑迁移至 PolarDB-X

热门文章

最新文章

相关产品

  • 云原生分布式数据库 PolarDB-X