如何选取统计信息自动采集策略

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

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一致

不涉及

注意事项

  • 在表数据量比较大的情况下,存储节点可能由于执行统计信息采集任务,在凌晨出现IOPS增高的情况。

  • 在非凌晨时间出现IOPS升高,有可能是以下两种情况:

    1. 表数据量过大,导致统计信息采集任务针对单个逻辑表采集时间过长,任务从凌晨运行至非凌晨时间。

    2. 数据发生剧烈变化的场景,常见于数据导入过长,会触发实时的统计信息采集。

建议

  1. 如果不希望在凌晨执行采集,可以在控制台参数设置页面,将ENABLE_BACKGROUND_STATISTIC_COLLECTION参数的值设置为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的查询语句。