1. tidb查询优化
tidb数据库查询3亿条数据需要花费20s以上,然后按照下面的优化方式执行过后,查询只需要1.5s;
- 查看表的健康度
1
2
3
4
5show stats_healthy where table_name='xxxx';
```
2. 查看自动统计状态
```sql
show variables like '%auto_analyze%';- tidb_auto_analyze_start_time和tidb_auto_analyze_end_time控制了自动收集统计信息的窗口;
- tidb_auto_analyze_ratio 控制了可以进行自动收集统计信息的阈值,默认为0.5,如果后续表的数据量增加,可以酌情调整这个参数到0.3或者0.2,意味着这张表的数据修改超过总表行数的30%或者20%就会自动收集,会更敏感一些
- 调整自动收集统计信息的阈值
1
set global tidb_auto_analyze_ratio = 0.2;
- 查看健康度低于阈值的表信息
1
show stats_healthy where healthy<80;
- 低于80的重新收集统计信息
1
analyze table xxx
- 加快索引添加速度 如果某张表因为业务需求导入了大量的数据,而这些数据在达到tidb_auto_analyze_start_time之前就需要使用SQL进行查询,此时建议对导入的表进行手动的收集;
1
2
3
4
5show global variables like 'tidb_ddl_reorg_%';
# 记录原来的数值, 添加完索引后记得改回去
set global tidb_ddl_reorg_batch_size = 1024;
set global tidb_ddl_reorg_worker_cnt = 16;
我们也可以分析业务的行为,如果某张表有定时任务会自动插入大量数据,自动任务完成后需要产生报表的需求,也建议在自动任务结束后手动对相关的表进行手动收集;