系统表存储位置
- MySQL 存储TiDB 系统表
- mysql.user 等
- information_schmea提供了一种查看系统元数据的方法
- 与mysql兼容的表:tables、processlist、columns等
- 自定义的表: cluster_config、cluster_hardware、tiflash_replica等等
- metrics_schema: 基于Prometheus 中TiDB监控指标的一组视图
- PERFORMANCE_SCHEMA 目前与MySQL兼容保留了部分视图
常用mysql库系统表
- mysql.user 用户账户,全局权限,以及其他一些非权限的列
- mysql.db 数据库级别的权限
- mysql.tables_priv 表级的权限
- mysql.columns_priv 列级的权限(目前不支持)
- mysql.global_variables 查看TiDB全局变量,支持对variable_value的修改
- mysql.tidb 已KV形式存储集群状态的表,修改variable_value可以调整相关系统行为
information_schema相关表
-
information_schema.cluster_info
- 提供集群当前的拓扑信息,各个节点的版本信息、版本对应的Git hash、各节点的启动时间、各实例的运行时间
- 当集群进行升级或者打了patch版本,确定各个组件版本是否打好,可以查询此表
- version:对应节点的语义版本号
- start_time: 对应节点的启动时间
- uptime: 对应节点已运行的时间
-
information_schema.cluster_config
- 用于获取集群当前所有组件实例的配置
- Type: 节点的类型,取值为tidb pd tikv
- instance: 节点的服务地址
- key: 配置项名
- value: 配置项值
-
information_schema.ddl_jobs
- ddl_jobs 表为admin show ddl jobs 命令提供了一个information_schema接口
- 方便通过SQL查询和过滤相关表近期DDL变更情况
系统慢日志查询
- 搜索某个用户的Top N慢查询
select query_time,query,user from information_schema.slow_query where
is_internal = false -- 排除TiDB内部的慢查询
and user = "user1" --查找的用户名
order by query_time desc
limit 2;
- 根据SQL指纹搜索同类慢查询:
- 先根据最近慢语句list查找特定慢语句:
select query_time,query,digest from information_schema.slow_query where is_internal= false and time between '2022-01-01' and '2022-01-02' order by query_time desc;
2. 再根据SQL指纹搜索同类慢查询:
select query,query_time from information_schema.slow_query where digest="xxxxx"
- 统计信息为pseudo的慢查询SQL:
select query,query_time,stats from information_schema.slow_query
where is_internal = false
and stats like '%pseudo%'; # 如果慢查询日志中的统计信息被标记为 pseudo,往往说明 TiDB 表的统计信息更新不及时,需要运行 analyze table手动收集统计信息。
读写热点数据查询
- 统计当前读写热点表
select db_name,table_name,index_name, type, sum(flow_bytes), count(1), group_concat(h.region_id), count(distinct p.store_id), group_concat(p.store_id) from tidb_hot_regions h join tikv_region_peers p on h.region_id=p.region_id and p.is_leader=1 group by db_name,table_name,index_name,type;
type --读写热点分类
sum(flow_bytes) ---每分钟流量
- 统计当前读写热点STORE
select p.store_id,sum(flow_bytes),count(1) from tidb_hot_regions h join tikv_region_peers p on h.region_id = p.region_id and p.is_leader=1 group by p.store_id order by 2 desc;
SQL阻塞查询
-
data_lock_waits
- 集群中所有TiKV节点上当前正在发生悲观锁等相关锁
- 仅拥有process权限的用户可以查询
- 从所有TiKV节点实时获取
- 如果集群规模很大,负载很高,查询该表有造成性能抖动的潜在风险
-
deadlocks
- 查看最近发生的若干次死锁错误的信息
- 默认容纳最近10次死锁错误的信息
-
tidb_trx
- 返回了所有正在执行的事务信息
- 仅拥有process权限的用户可以查询
-
死锁排查问题
查询deadlocks 表,来确定死锁情况