GreatSQL统计信息相关知识点
相关知识点:
INNODB_STATS_PERSIST=ON
或用STATS_PERSIST=1
定义单个表时,优化器统计信息将持久化到磁盘。默认情况下,innodb_stats_persistent
是启用的。
持久统计信息存储在mysql.innodb_table_stats
和mysql.innodb_index_stats
表中。
默认情况下启用的innodb_stats_auto_recalc
变量控制当表中超过10%的行发生更改时是否自动计算统计信息。可以通过在创建或更改表时指定STATS_AUTO_RECALC
子句来为单个表配置自动统计数据重新计算。
由于在后台进行的自动统计数据重新计算的异步性质,即使启用了innodb_stats_auto_recalc
,在运行影响表10%以上的DML操作后,也不会立即重新计算统计数据。在某些情况下,统计数据的重新计算可能会延迟几秒钟。如果立即需要最新的统计数据,运行ANALYZE TABLE以启动统计数据的同步(前台)重新计算。
如果禁用innodb_stats_auto_recalc
则可以通过在对索引列进行大量更改后执行ANALYZE TABLE语句来确保优化器统计信息的准确性。
当INNODB_STATS_PERSIST=OFF
或使用STATS_PERSIST=0
创建或更改单个表时,优化器统计信息不会持久化到磁盘。相反,统计信息存储在内存中,当服务器关闭时会丢失。统计数据也会通过某些操作和在某些条件下定期更新。
当向现有表中添加索引时,或者当添加或删除列时,无论innodb_stats_auto_recalc
的值如何,都会计算索引统计信息并将其添加到innodb_index_stats
表中。
影响统计信息的五个参数
-
innodb_stats_persistent
:指定InnoDB索引统计信息是否持久化到磁盘,默认打开。 -
innodb_stats_persistent_sample_pages
:估计索引列的基数和其他统计信息(如由分析表计算的统计信息)时要采样的索引页数。增加该值可以提高索引统计信息的准确性,但为innodb_stats_persistent_sample_pages
设置较高的值可能会导致分析表执行时间过长。 -
innodb_stats_auto_recalc
:使InnoDB在表中的数据发生重大变化后自动重新计算持久统计信息。阈值为表中行数的10%,默认打开。 -
innodb_stats_include_delete_marked
:计算持久优化器统计信息时InnoDB是否包括已标记删除的记录,默认关闭。 -
innodb_stats_transient_sample_pages
:估计索引列的基数和其他统计信息(如由分析表计算的统计信息)时要采样的索引页数。默认值为8。增加该值可以提高索引统计信息的准确性,从而改进查询执行计划,但代价是在打开InnoDB表或重新计算统计信息时会增加I/O。该参数仅适用于为表禁用innodb_stats_persistent
的情况,如果启用了INNODB_STATS_PERSIST
则应用INNODB_STATS_PERSIST_SAMPLE_PAGES
代替innodb_stats_sample_pages
总结:
1、非持久化统计信息在以下情况会被自动更新:
- 执行ANALYZE TABLE
innodb_stats_on_metadata=ON
情况下,执SHOW TABLE STATUS, SHOW INDEX, 查询INFORMATION_SCHEMA下的TABLES, STATISTICS- 启用--auto-rehash功能情况下,使用mysql client登录
- 表第一次被打开
- 距上一次更新统计信息,表1/16的数据被修改
非持久化统计信息的缺点显而易见,数据库重启后如果大量表开始更新统计信息,会对实例造成很大影响,所以目前都会使用持久化统计信息。
2、持久化统计信息在以下情况会被自动更新:
-
INNODB_STATS_AUTO_RECALC=ON
的情况下,表中10%的数据被修改 -
增加新的索引
3、统计信息不准确的处理
我们查看执行计划,发现未使用正确的索引,如果是innodb_index_stats中统计信息差别较大引起,可通过以下方式处理:
- 手动更新统计信息,注意执行过程中会加读锁:
ANALYZETABLE TABLE_NAME;
- 如果更新后统计信息仍不准确,可考虑增加表采样的数据页,两种方式可以修改:
a. 全局变量INNODB_STATS_PERSISTENT_SAMPLE_PAGES
默认为20;
b. 单个表可以指定该表的采样:
ALTER TABLE TABLE_NAME STATS_SAMPLE_PAGES=40;
经测试,此处STATS_SAMPLE_PAGES
的最大值是65535,超出会报错。
c. 手动更新innodb_table_stats
和innodb_index_stats
表统计信息(修改这两个表不会产生binlog),然后使用FLUSH TABLE tbl_name
语句加载更新后的统计信息。
Enjoy GreatSQL :)
关于 GreatSQL
GreatSQL是适用于金融级应用的国内自主开源数据库,具备高性能、高可靠、高易用性、高安全等多个核心特性,可以作为MySQL或Percona Server的可选替换,用于线上生产环境,且完全免费并兼容MySQL或Percona Server。
相关链接: GreatSQL社区 Gitee GitHub Bilibili
GreatSQL社区:
社区有奖建议反馈: https://greatsql.cn/thread-54-1-1.html
社区博客有奖征稿详情: https://greatsql.cn/thread-100-1-1.html
(对文章有疑问或者有独到见解都可以去社区官网提出或分享哦~)
技术交流群:
微信&QQ群:
QQ群:533341697
微信群:添加GreatSQL社区助手(微信号:wanlidbc
)好友,待社区助手拉您进群。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
OurBMC大咖说|第4期:基于飞腾腾珑E2000的国产化BMC固件开发简介
栏目介绍:"OurBMC大咖说" 是由 OurBMC 社区精心策划的线上讲座栏目,邀请 BMC 相关领域大咖共同探讨 BMC 全栈技术的发展趋势、挑战和机遇。无论你是初学者还是资深从业者,"OurBMC大咖说" 都将为你提供一个宝贵的学习和交流的平台。 欢迎各位关注 "OurBMC大咖说",聆听大咖们的智慧之声,共同推动 BMC 全栈技术的进步和发展! 本期人物介绍:王亚洲,昆仑太科(北京)技术股份有限公司固件产品一部经理,昆仑BMC团队负责人。毕业于北京航空航天大学计算机学院,从事固件开发17年,参加包括国家 “核高基”、产业发展基金等多项重点工程项目开发,参与多项BMC固件行业和团体标准制定。 开源社区支持国产BMC产业快速健康发展 BMC(Baseboard Management Controller)系统作为服务器不可或缺的带外管理系统,承担着服务器远程集中运维、管理和监控的重要职责,是服务器运作的中枢神经系统。该系统主要由两大部分组成:BMC 芯片与 BMC 固件。其中,BMC 芯片作为计算力载体,承载着 BMC 固件的运行,而 BMC 固件则扮演着实现各类带外管理功能的关键...
- 下一篇
Stream 指标输出
NGINX 向云原生演进,All inOpenNJet 1. 介绍 NJet将开源社区提供的STS模块(https://github.com/vozlt/nginx-module-sts)进行修改适配后,用于输出Stream Server 的指标信息,支持返回 json, html 及prometheus 格式。 2. 配置指令 数据面配置指令 server_traffic_status_zone 语法 server_traffic_status_zone [shared:name:size] 默认值 shared:stream_server_traffic_status:1m 配置位置 stream 描述: 配置一个共享内存区域,该区域存储stream server的运行状态。 server_traffic_status 语法 server_traffic_status<on 默认值 off 配置位置 stream,server 描述: 是否记录stream server 的指标,如果配置了server_traffic_status_zone指令,将自动开启指标采集。 ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS7设置SWAP分区,小内存服务器的救世主
- Hadoop3单机部署,实现最简伪集群
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题