DRDS 运维指令详解

DRDS运维指令详解

帮助语句

SHOW HELP

SHOW HELP展示了DRDS所有辅助SQL指令及其说明。

查看规则和节点拓扑类语句

SHOW RULE [FROM table_name]

SHOW FULL RULE [FROM table_name]

SHOW TOPOLOGY FROM table_name

SHOW PARTITIONS FROM table_name

SHOW BROADCASTS

SHOW DATASOURCES

SHOW NODE

# SHOW RULE [FROM table_name]

使用说明:

show rule:查看数据库下每一个逻辑表的拆分情况。

show rule from table_name:查看数据库下指定逻辑表的拆分情况。

重要列详解:

BROADCAST:是否为广播表(0:否,1:是)

DB_PARTITION_KEY:分库的拆分键,没有分库的话,值为空

DB_PARTITION_POLICY:分库的拆分策略,取值包括哈希或YYYYMM等日期策略

DB_PARTITION_COUNT:分库数

TB_PARTITION_KEY:分表的拆分键,没有分表的话,值为空

TB_PARTITION_POLICY:分表的拆分策略,取值包括哈希或MM、DD等日期策略

TB_PARTITION_COUNT:分表数

# SHOW FULL RULE [FROM table_name]

查看数据库下逻辑表的拆分规则,比SHOW RULE指令展示的信息更加详细。

重要列详解:

BROADCAST:是否为广播表(:否,1:是)

JOIN_GROUP:保留字段,暂时无意义

ALLOW_FULL_TABLE_SCAN:分库分表在没有指定分表键值的情况下是否允许查询数据,如果配置为1,此时需要扫描每一个物理表来查找出符合条件的数据,简称为全表扫描

DB_NAME_PATTERN:DB_NAME_PATTERN中{}之间的0为占位符,执行SQL时会被DB_RULES_STR计算出的值替代,并保持位数。比如,DB_NAME_PATTERN的值为SEQ__RDS,DB_RULES_STR的值为[1,2,3,4],则会产生4个DB_NAME,分别为SEQ_0001_RDS、SEQ_0002_RDS、SEQ_0003_RDS、SEQ_0004_RDS

DB_RULES_STR:具体的分库规则

TB_NAME_PATTERN:TB_NAME_PATTERN 中 {} 之间的 0 为占位符,执行 SQL 时会被 TB_RULES_STR 计算出的值替代,并保持位数。比如,TB_NAME_PATTERN 的值为 table_,TB_RULES_STR 的值为 [1,2,3,4,5,6,7,8],则会产生8张表,分别为table_01、table_02、table_03、table_04、table_05、table_06、table_07、table_08

TB_RULES_STR:分表规则

PARTITION_KEYS:分库和分表键集合,对于既分库又分表的情形,分库键在前,分表键在后

DEFAULT_DB_INDEX:单库单表存放的分库

# SHOW TOPOLOGY FROM table_name

查看指定逻辑表的拓扑分布,展示该逻辑表保存在哪些分库中,每个分库下包含哪些分表。

# SHOW PARTITIONS FROM table_name

查看分库分表键集合,分库键和分表键之间用逗号分割。如果最终结果有两个值,说明是既分库又分表的情形,第一个是分库键,第二个是分表键。如果结果只有一个值,说明是分库不分表的情形,该值是分库键。

# SHOW BROADCASTS

查看广播表列表。

# SHOW DATASOURCES

查看底层存储信息,包含数据库名、数据库分组名、连接信息、用户名、底层存储类型、读写权重、连接池信息等。

重要列详解:

SCHEMA:数据库名;

GROUP:数据库分组名。分组的目标是管理多组数据完全相同的数据库,比如通过RDS(MySQL)进行数据复制后的主备数据库。主要用来解决读写分离、主备切换的问题;

URL:底层RDS(MySQL)的连接信息;

TYPE:底层存储类型,目前只支持RDS(MySQL);

READ_WEIGHT:读权重。在主实例的读压力比较大的时候,可以通过DRDS读写分离功能将读流量进行分流,减轻RDS主实例的压力。DRDS会自动识别读写流量,引导写流量进入RDS主实例,读流量则按配置的权重流向所有RDS实例;

WRITE_WEIGHT:写权重。解释见上。

# SHOW NODE

查看物理库的读写次数(历史累计数据)、读写权重(历史累计数据)。

重要列详解:

MASTER_READ_COUNT:RDS主实例处理的只读查询次数(历史累计数据);

SLAVE_READ_COUNT:RDS备实例处理的只读查询次数(历史累计数据);

MASTER_READ_PERCENT:RDS主实例处理的只读查询占比(注意该列显示的是累计的实际数据占比,并不是用户配置的百分比);

SLAVE_READ_PERCENT:RDS备实例处理的只读查询占比(注意该列显示的是累计的实际数据占比,并不是用户配置的百分比)。

注意:事务中的只读查询会被发送到RDS主实例;

SQL调优类语句如下

SHOW [FULL] SLOW [WHERE expr] [limit expr]

SHOW [FULL] PHYSICAL_SLOW [WHERE expr] [limit expr]

CLEAR SLOW

EXPLAIN SQL

EXPLAIN DETAIL SQL

EXPLAIN EXECUTE SQL

TRACE SQL和SHOW TRACE

CHECK TABLE table_name

SHOW TABLE STATUS

#SHOW [FULL] SLOW [WHERE expr] [limit expr]

执行时间超过 1 秒的 SQL 语句是慢 SQL,逻辑慢 SQL 是指应用发送到 DRDS 的慢 SQL。

SHOW SLOW: 查看自 DRDS 启动或者上次执行CLEAR SLOW以来最慢的 100 条逻辑慢 SQL(注意,这里记录的是最慢的 100 个,缓存在 DRDS 系统中,当实例重启或者执行CLEAR SLOW时会丢失);

SHOW FULL SLOW: 查看实例启动以来记录的所有逻辑慢 SQL(持久化到 DRDS 的内置数据库中)。该记录数有一个上限(具体数值跟购买的实例规格相关),DRDS 会滚动删除比较老的慢 SQL 语句。实例的规格如果是 4C4G 的话,最多记录 10000 条慢 SQL 语句(包括逻辑慢 SQL 和 物理慢 SQL);实例的规格如果是 8C8G 的话,最多记录 20000 条慢 SQL 语句(包括逻辑慢 SQL 和 物理慢 SQL),其它规格依此类推。

重要列详解:

HOST:来源 IP;

START_TIME:执行开始时间;

EXECUTE_TIME:执行时间;

AFFECT_ROW:对于 DML 语句是影响行数;对于查询语句是返回的记录数。

mysql> show slow where execute_time > 1000 limit 1;

# SHOW [FULL] PHYSICAL_SLOW [WHERE expr] [limit expr]

执行时间超过1秒的 SQL 语句是慢 SQL,物理慢 SQL 是指 DRDS 发送到 RDS 的慢 SQL。

SHOW PHYSICAL_SLOW: 查看自 DRDS 启动或者上次执行CLEAR SLOW以来最慢的 100 条物理慢 SQL(注意,这里记录的是最慢的 100 个,缓存在 DRDS 系统中,当实例重启或者执行CLEAR SLOW时会丢失);

SHOW FULL PHYSICAL_SLOW: 查看实例启动以来记录的所有物理慢 SQL(持久化到 DRDS 的内置数据库中)。该记录数有一个上限(具体数值跟购买的实例规格相关),DRDS 会滚动删除比较老的慢 SQL 语句。实例的规格如果是 4C4G 的话,最多记录 10000 条慢 SQL 语句(包括逻辑慢 SQL 和 物理慢 SQL);实例的规格如果是 8C8G 的话,最多记录 20000 条慢 SQL 语句(包括逻辑慢 SQL 和 物理慢 SQL),其它规格依此类推。

重要列详解:

GROUP_NAME:数据库分组;

START_TIME:执行开始时间;

EXECUTE_TIME:执行时间;

AFFECT_ROW:对于 DML 语句是影响行数;对于查询语句是返回的记录数。

mysql> show physical_slow;

# CLEAR SLOW

清空自 DRDS 启动或者上次执行CLEAR SLOW以来最慢的 100 条逻辑慢 SQL 和 最慢的 100 条物理慢 SQL。

注意:SHOW SLOW和SHOW PHYSICAL_SLOW展示的是最慢的 100 个 SQL,如果长时间未执行CLEAR SLOW,可能都是非常老的 SQL 了,一般执行过 SQL 优化之后,建议都执行下CLEAR SLOW。

# EXPLAIN SQL

查看指定 SQL 在 DRDS 层面的执行计划,注意这条 SQL 不会实际执行。

# EXPLAIN DETAIL SQL

查看指定 SQL 在 DRDS 层面的执行计划。注意这条 SQL 不会实际执行。

# EXPLAIN EXECUTE SQL

查看底层存储的执行计划,等同于 MYSQL 的 EXPLAIN 语句。

# TRACE SQL 和 SHOW TRACE

查看具体 SQL 的执行情况。TRACE [SQL] 和 SHOW TRACE 要结合使用。注意 TRACE SQL 和 EXPLAIN SQL 的区别在于TRACE SQL 会实际执行该语句。

# CHECK TABLE table_name

对数据表进行检查。主要用于 DDL 建表失败的情形。

对于拆分表,检查底层物理分表是否有缺失的情况,底层的物理分表的列和索引是否是一致;

对于单库单表,检查表是否存在。

# SHOW TABLE STATUS [LIKE 'pattern' | WHERE expr]

获取表的信息,该指令聚合了底层各个物理分表的数据。

重要列详解:

NAME:表名称;

ENGINE:表的存储引擎;

VERSION:表的存储引擎的版本;

ROW_FORMAT:行格式,主要是 Dynamic、Fixed、Compressed 这三种格式。动态(Dynamic)行的行长度可变,例如 VARCHAR 或 BLOB 类型字段;固定(Fixed)行是指行长度不变,例如 CHAR 和 INTEGER 类型字段;

ROWS:表中的行数;

AVG_ROW_LENGTH:平均每行包括的字节数;

DATA_LENGTH:整个表的数据量(单位:字节);

MAX_DATA_LENGTH:表可以容纳的最大数据量;

INDEX_LENGTH:索引占用磁盘的空间大小 ;

CREATE_TIME:表的创建时间;

UPDATE_TIME:表的最近更新时间;

COLLATION:表的默认字符集和字符排序规则;

CREATE_OPTIONS:指表创建时的其他所有选项。

和 DRDS 的 SCAN HINT 结合,还可以查看每个物理分表的数据量。

mysql> /!TDDL:SCAN='table_name'*/show table status like 'table_name';

统计信息查询类语句

DRDS 提供以下语句用于查询实时统计信息。

SHOW [FULL] STATS

SHOW DB STATUS

SHOW FULL DB STATUS

# SHOW [FULL] STATS

查看整体的统计信息,这些信息都是瞬时值。注意不同版本的 DRDSSHOW FULL STATS的结果是有区别的。

重要列说明:

QPS:应用到 DRDS 的 QPS,通常称为逻辑 QPS;

RDS_QPS:DRDS 到 RDS 的 QPS,通常称为物理 QPS;

ERROR_PER_SECOND:每秒的错误数,包含 SQL 语法错误,主键冲突,系统错误,连通性错误等各类错误总和;

VIOLATION_PER_SECOND:每秒的主键或者唯一键冲突;

MERGE_QUERY_PER_SECCOND:通过分库分表,从多表中进行的查询;

ACTIVE_CONNECTIONS:正在使用的连接;

CONNECTION_CREATE_PER_SECCOND:每秒创建的连接数;

RT(MS):应用到 DRDS 的响应时间,通常称为逻辑 RT(响应时间);

RDS_RT(MS):DRDS 到 RDS/MySQL 的响应时间,通常称为物理 RT;

NET_IN(KB/S):DRDS 收到的网络流量;

NET_OUT(KB/S):DRDS 输出的网络流量;

THREAD_RUNNING:正在运行的线程数;

# SHOW DB STATUS

用于查看物理库容量/性能信息,所有返回值为实时信息。 容量信息通过 MySQL 系统表获得,与真实容量情况可能有差异。

重要列说明:

NAME:代表一个 DRDS DB,此处显示的是 DRDS 内部标记,与 DRDS DB 名称不同;

CONNECTION_STRING:分库的连接信息;

PHYSICAL_DB:分库名称,TOTAL行代表一个 DRDS DB 中所有分库容量的总和;

SIZE_IN_MB:分库中数据占用的空间,单位为 MB;

RATIO:单个分库数据量在当前 DRDS DB 总数据量中的占比;

THREAD_RUNNING:物理数据库实例当前正在执行的线程情况,含义与 MySQLSHOW GLOBAL STATUS指令返回值的含义相同,

# SHOW FULL DB STATUS [LIKE ]

用于查看物理库表容量和性能信息,所有返回值为实时信息。 容量信息通过 MySQL 系统表获得,与真实容量情况可能有差异。

重要列说明:

NAME:代表一个 DRDS DB。此处显示的是 DRDS 内部标记,与 DRDS DB 名称不同;

CONNECTION_STRING:分库的连接信息;

PHYSICAL_DB:分库名称,TOTAL行代表经过 LIKE 关键字筛选后得到的分库容量的总和。如果没有 LIKE,则为全部分库容量的总和;

PHYSICAL_TABLE:分表名称,TOTAL行代表经过 LIKE 关键字筛选后得到的分表容量的总和。如果没有LIKE,则为全部分表容量的总和;

SIZE_IN_MB:分表中数据占用的空间,单位为 MB;

RATIO:单个分表数据量在当前筛选出的分表总数据量中的占比;

THREAD_RUNNING:物理数据库实例当前正在执行的线程情况,含义与 MySQLSHOW GLOBAL STATUS指令返回值的含义相同。

SHOW PROCESSLIST 指令与 KILL 指令

# SHOW PROCESSLIST 指令

DRDS 中,可以使用SHOW PROCESSLIST指令查看 DRDS 中的连接与正在执行的 SQL 等信息。

SHOW [FULL] PROCESSLIST \G;

结果集各字段含义:

ID:连接的 ID,为一个 Long 型数字。

USER:建立此连接所使用的用户名。

HOST:建立此连接的机器的 IP 与端口。

DB:此连接所访问的库名。

COMMAND,目前有两种取值:

Query,代表当前连接正在执行 SQL 语句;

Sleep,代表当前连接正处于空闲状态。

TIME:连接处于当前状态持续的时间。

当 COMMAND 为 Query 时,代表当此连接上正在执行的 SQL 已经执行的时间;

当 COMMAND 为 Sleep 时,代表当此连接空闲的时间。

STATE:目前无意义,恒为空值。

INFO:当 COMMAND 为 Query 时,为此连接上正在执行的 SQL 的内容。当不带 FULL 参数时,最多返回正在执行的 SQL 的前 30 个字符。当带 FULL 参数时,最多返回正在执行的 SQL 的前1000个字符;当 COMMAND 为其他值时,无意义,为空值。

#SHOW PHYSICAL_PROCESSLIST 指令

DRDS 中,可以使用SHOW PHYSICAL_PROCESSLIST指令查看底层所有 MySQL/RDS 上正在执行的 SQL 信息。

SHOW [FULL] PHYSICAL_PROCESSLIST

当 SQL 比较长的时候,SHOW PHYSICAL_PROCESSLIST会截断,这时可以使用SHOW FULL PHYSICAL_PROCESSLIST获取完整 SQL。返回结果中每一列的含义与 MySQL 的SHOW PROCESSLIST指令等价。

注意:与 MySQL 不同,DRDS 返回的物理连接的 ID 列为一个字符串,并非一个数字。

# KILL 指令

KILL 指令用于终止一个正在执行的 SQL。

DRDS 使用 DRDS 在 MySQL/RDS 上创建的用户名连接 MySQL/RDS,所以一般直接连接 MySQL/RDS 是没有权限对 DRDS 发起的请求进行 KILL 操作的。

如果需要终止一个 DRDS 上正在执行的 SQL,需要使用 MySQL 命令行、DMS 等工具连接 DRDS,在 DRDS 上执行 KILL 指令。

KILL PROCESS_ID | 'PHYSICAL_PROCESS_ID' | 'ALL'

终止一个特定的逻辑 SQL:KILL PROCESS_ID

终止一个特定的物理 SQL:KILL 'PHYSICAL_PROCESS_ID'

SQL 自动保护

# SQL 限制

为了防止误操作,DRDS 默认禁止全表删除和全表更新的操作。

下列语句默认会被禁止:

DELETE 语句不带 WHERE 条件或者 LIMIT 条件;

UPDATE 语句不带 WHERE 条件或者 LIMIT 条件。

如果确实需要执行这类操作,可以通过 HINT 来临时跳过这个限制:

HINT:/!TDDL:FORBID_EXECUTE_DML_ALL=false*/

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180621G0OAMT00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券