本文介绍了统计信息采集的三种策略和采集建议。
SQL查询执行计划的好坏对数据库性能有重要的影响,为了给优化器CBO提供准确的统计信息用于生成更优的执行计划,PolarDB-X会在后台发起统计信息采集任务。
统计信息采集说明
PolarDB-X包括以下三种采集策略:
名称 | 采集频率 | 采集SQL特征 | 参数控制 |
Auto analyze | 每周一次,默认02:00-05:00 |
| ENABLE_BACKGROUND_STATISTIC_COLLECTION |
information_schema查询 | 每天一次,默认02:00-05:00 | SELECT table_schema, table_name, table_rows FROM information_schema.tables WHERE table_schema IN (xxx,xxx,xxx....) AND table_name IN (yyy,yyy,yyy...) | 不涉及 |
实时反馈采集 | 数据量更新(insert或delete)超过上次记录表数据行20%的时候触发。 | 同Auto analyze一致 | 不涉及 |
注意事项
在表数据量比较大的情况下,存储节点可能由于执行统计信息采集任务,在凌晨出现IOPS增高的情况。
在非凌晨时间出现IOPS升高,有可能是以下两种情况:
表数据量过大,导致统计信息采集任务针对单个逻辑表采集时间过长,任务从凌晨运行至非凌晨时间。
数据发生剧烈变化的场景,常见于数据导入过长,会触发实时的统计信息采集。
建议
如果不希望在凌晨执行采集,可以在控制台参数设置页面,将ENABLE_BACKGROUND_STATISTIC_COLLECTION参数的值设置为False,关闭后台定时采集任务与实时采集任务。任务关闭后,建议定期通过手动执行
analyze table [table_name];
语句,在业务可以接受的时间进行统计信息采集。如果希望立即停止采集任务,请执行以下步骤:
执行
show full physical_processlist where info like '%rand%';
,查看存储节点正在执行的SQL语句;通过kill语句关闭对应的采集SQL。例如
kill '0-0-222';
,'0-0-222'含义为0号存储节点,0号分库上的ID为222的查询语句。