本文整理了 TiDB 日常运维中常用的 SQL 语句和集群管理命令,涵盖了状态监控、慢查询分析、配置管理、锁问题排查等多个方面,可以作为 DBA 的日常运维参考手册。
一、集群状态监控
1.1 查看 TiKV 存储状态
SELECT ADDRESS, STORE_STATE_NAME, AVAILABLE, REGION_SIZE
FROM INFORMATION_SCHEMA.TIKV_STORE_STATUS;
1.2 查看集群会话信息
SELECT instance, user, host, db, time, substr(info,1,50) as info, mem, disk
FROM INFORMATION_SCHEMA.CLUSTER_PROCESSLIST;
1.3 查看实例配置
-- 查看所有配置
SHOW CONFIG;
-- 按类型过滤配置
SHOW CONFIG WHERE type='tidb';
1.4 查看 TiFlash 副本状态
SELECT * FROM information_schema.tiflash_replica;
二、慢查询分析
2.1 按用户分析慢查询
SELECT a.user, a.host, a.db, a.query_time, a.digest, a.plan_digest
FROM slow_query a,
(SELECT Digest, MAX(query_time) as q_time
FROM slow_query
WHERE time BETWEEN '2022-06-20 17:00:00' AND '2022-06-20 18:30:00'
AND user IN ('yaowq_test')
GROUP BY digest) b
WHERE a.query_time = b.q_time AND a.digest = b.digest
ORDER BY b.q_time DESC LIMIT 10;
2.2 按数据库分析慢查询
SELECT a.user, a.host, a.db, a.query_time, a.digest, a.plan_digest
FROM slow_query a,
(SELECT Digest, MAX(query_time) as q_time
FROM slow_query
WHERE is_internal = false
AND time BETWEEN '2022-06-20 17:00:00' AND '2022-06-20 18:30:00'
AND db IN ('xk_ch')
GROUP BY digest) b
WHERE a.query_time = b.q_time AND a.digest = b.digest
ORDER BY b.q_time DESC LIMIT 10;
2.3 根据 Digest 查询具体语句
SELECT query_time, query, plan
FROM slow_query
WHERE digest = "0de44c96f23a3f3430347a272b5dc00f2598a3748781239900ed3c2c03803fce"
ORDER BY query_time LIMIT 1;
三、在线配置管理
3.1 在线修改 TiKV 配置
重要提示:在线修改 TiKV 配置后,需要同时使用 tiup edit-config 修改对应配置项,否则升级或重启操作会覆盖在线修改的结果。
-- 修改全部 TiKV 实例配置
SET CONFIG tikv `split.qps-threshold` = 1000;
-- 修改单个 TiKV 实例配置
SET CONFIG "127.0.0.1:20180" `split.qps-threshold` = 1000;
3.2 在线修改 PD 配置
PD 不支持单个实例独立配置,所有实例共享同一份配置:
SET CONFIG pd `log.level` = 'info';
3.3 在线修改 TiDB 配置
通过系统变量修改 TiDB 配置:
-- 修改慢日志阈值
SET tidb_slow_log_threshold = 200;
SELECT @@tidb_slow_log_threshold;
四、会话和锁管理
4.1 查看死锁信息
SELECT * FROM information_schema.deadlocks;
4.2 查询热点 Key 等待
-- 查询 Top 5 热点 Key 等待数量
SELECT `key`, COUNT(*) as `count`
FROM information_schema.data_lock_waits
GROUP BY `key`
ORDER BY `count` DESC
LIMIT 5;
-- 根据 Key 查询事务信息
SELECT trx.*
FROM information_schema.data_lock_waits as l
LEFT JOIN information_schema.tidb_trx as trx ON l.trx_id = trx.id
WHERE l.key = "7480000000000000415F728000000000000001"\G
-- 根据事务 ID 查询 blocker 信息
SELECT l.key, trx.*, tidb_decode_sql_digests(trx.all_sql_digests) as sqls
FROM information_schema.data_lock_waits as l
JOIN information_schema.cluster_tidb_trx as trx ON l.current_holding_trx_id = trx.id
WHERE l.trx_id = 426831965449355272\G
五、TiUP 集群管理
5.1 基础集群操作
# 查看集群列表
tiup cluster list
# 启动集群
tiup cluster start ${cluster-name}
# 启动特定组件
tiup cluster start ${cluster-name} -R pd
# 启动特定节点
tiup cluster start ${cluster-name} -N 1.2.3.4:2379,1.2.3.5:2379
# 查看集群状态
tiup cluster display ${cluster-name}
5.2 修改集群配置
# 编辑集群配置
tiup cluster edit-config ${cluster-name}
# 重载配置
tiup cluster reload ${cluster-name} [-N <nodes>] [-R <roles>]
配置示例(调整事务大小限制):
server_configs:
tidb:
performance.txn-total-size-limit: 1073741824
5.3 集群维护
# 集群重命名
tiup cluster rename ${cluster-name} ${new-name}
# 停止集群
tiup cluster stop ${cluster-name}
# 停止特定组件
tiup cluster stop ${cluster-name} -R tidb
5.4 数据清理
警告:此操作不可恢复,请谨慎执行!
# 清理数据但保留日志
tiup cluster clean ${cluster-name} --data
# 清理日志但保留数据
tiup cluster clean ${cluster-name} --log
# 清理所有数据和日志
tiup cluster clean ${cluster-name} --all
# 排除特定节点进行清理
tiup cluster clean ${cluster-name} --all --ignore-node 172.16.13.11:9000
# 销毁集群
tiup cluster destroy ${cluster-name}
六、实用工具函数
6.1 TSO 时间转换
-- 解析当前 TSO
SELECT TIDB_PARSE_TSO(@@tidb_current_ts);
-- 将时间转换为 TSO
SELECT conv(concat(bin(unix_timestamp('2022-01-06 12:30:59') * 1000),'000000000000000001'),2,10);
总结
本文整理的 TiDB 运维命令涵盖了日常维护的主要场景,熟练掌握这些命令可以大大提高运维效率。建议 DBA 根据实际工作需求,选择性地将这些命令纳入日常运维检查清单中。
在实际生产环境中,请务必在测试环境验证后再执行相关操作,特别是涉及数据清理和配置修改的命令。