本文介绍了统计信息采集的三种策略和采集建议。

SQL查询执行计划的好坏对数据库性能有重要的影响,为了给优化器CBO提供准确的统计信息用于生成更优的执行计划,PolarDB-X会在后台发起统计信息采集任务。

统计信息采集说明

PolarDB-X包括以下三种采集策略:

名称 采集频率 采集SQL特征 参数控制
Auto analyze 每周一次,默认02:00-05:00
  1. 包含WHERE (RAND() < 3.9623395E-4) 的查询语句。
  2. 注释中IP为null的语句。
  3. 包含HYPERLOGLOG函数的查询语句。
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一致 ENABLE_STATISTIC_FEEDBACK

注意事项

  • 在表数据量比较大的情况下,存储节点可能由于执行统计信息采集任务,在凌晨出现IOPS增高的情况。
  • 在非凌晨时间出现IOPS升高,有可能是以下两种情况:
    1. 表数据量过大,导致统计信息采集任务针对单个逻辑表采集时间过长,任务从凌晨运行至非凌晨时间。
    2. 数据发生剧烈变化的场景,常见于数据导入过长,会触发实时的统计信息采集。

建议

  1. 如果不希望在凌晨执行采集,可以在控制台参数设置页面,将ENABLE_BACKGROUND_STATISTIC_COLLECTIONENABLE_STATISTIC_FEEDBACK参数的值设置为False,关闭后台定时采集任务与实时采集任务。任务关闭后,建议定期通过手动执行analyze table [table_name];语句,在业务可以接受的时间进行统计信息采集。
  2. 如果希望立即停止采集任务,请执行以下步骤:
    1. 执行show full physical_processlist where info like '%rand%';,查看存储节点正在执行的SQL语句;
    2. 通过kill语句关闭对应的采集SQL。例如kill '0-0-222';,'0-0-222'含义为0号存储节点,0号分库上的ID为222的查询语句。