课程名称:301+监控与调优
学习时长:120
课程收获:
- 运维中的关键监控
- TiDB 的 SQL 的生命周期和关键监控指标
- 查询优化器检查检查
- TIDB的索引
- TiDB 的分表
- 如何处理数据热点问题
课程内容:
运维中的关键监控
- 系统, grafana overview
- CPU
- mem
- IO
tikv 解压后数据的页面使用block cache
2.TIDB
- 延迟
- 错误
ideal CPS帮助判断延迟发生在服务端还是客户端
Get Token 限流值关注,默认值为1000
锁冲突过多,建议使用悲观锁,降低冲突。
3.TIKV
- 延迟
- cpu
-错误
GRPC延迟越低越好,
raft propose 调用 raft IO ,所以延迟根因也是向下
p999需要关注,检查是否有毛刺
4.PD
- ETCD
- hearbeat
5.Dashboard
- slow log
- sql
- key viz 表现业务读写模式,详见【TiDB 4.0 PCTA学习笔记】2.5高阶应用-2
TiDB 的 SQL 的生命周期和关键监控指标
TIDB
parse 一般batch insert 时比较慢
TIKV
写阶段会会使用
与处理的数据量正相关
查询优化器检查检查
cause:
- 热点
- 统计信息过期导致缓存过期
- 读写冲突
- …
获取信息途径:
-
STATEMENTS_SUMMARY 系统内存表,sql指纹和plan指纹
SQL指纹
-
SLOW_QUERY
表数据从日志文件中解析的,兼容mysql格式
集群查询
示例:
TIDB的索引
索引类型
- 唯一索引和主键索引
- 唯一索引,多列唯一,可以在多个可空列含有多个空值
- 主键索引, 唯一非空
mysql innodb 主键索引就是聚簇索引,聚簇索引不需要回表操作,但是如果存在热点可能导致性能下降
- 多列索引,最左前缀匹配原则
- 表达式索引,like ’%%’ 支持通配符表达式索引
- 前缀索引,建立在CHAR VARCHAR BINARY VARBINARY 指定为BOLB TEXT
索引管理
系统表
infomation_schema.tidb-_indexes
show index from table_name
hint:
select * from table_name use index(index_name)
select * from table_name force use index(index_name)
ignore:
select * from table_name ignore index(index_name)
select * from table_name use index()
TiDB 的分表
分区表:
每个分区是独立的物理表
- range分区:
- range: 通过分区表达式分区
- range columns;
- range: 通过分区表达式分区
- hash分区;
hash结果必须是个整数
分区裁剪:
优化器根据分区指定执行分区的过程。
函数作为分区表达式只能是单调函数
hash分析必须表达式是具体的值才能使用分区裁剪
V4.0的分区裁剪发生在逻辑优化阶段,运行阶段导出结果的表达式不能进行分区裁剪。
如何处理数据热点问题
热点问题,大部分是顺序写导致的,自增主键导致的顺序写.x
row_id;
写热点现象;
热点小表;
负载单位是region所有一个包含多个region的table不能避免热点
处理手段
- 分区表;
- shard_row_id_bits,随机化自增主键
- 预分裂 region,
- follower read
- scatter range
- shuffle leader/region 非常规手段解决range 偏斜,完全随机分配region和leader
学习过程中遇到的问题或延伸思考:
- 问题 1:
- 问题 2:
- 延伸思考 1:
- 延伸思考 2: