GreatSQL统计信息相关知识点

相关知识点:

INNODB_STATS_PERSIST=ON或用STATS_PERSIST=1定义单个表时,优化器统计信息将持久化到磁盘。默认情况下,innodb_stats_persistent是启用的。

持久统计信息存储在mysql.innodb_table_statsmysql.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、非持久化统计信息在以下情况会被自动更新:

  1. 执行ANALYZE TABLE
  2. innodb_stats_on_metadata=ON情况下,执SHOW TABLE STATUS, SHOW INDEX, 查询INFORMATION_SCHEMA下的TABLES, STATISTICS
  3. 启用--auto-rehash功能情况下,使用mysql client登录
  4. 表第一次被打开
  5. 距上一次更新统计信息,表1/16的数据被修改

非持久化统计信息的缺点显而易见,数据库重启后如果大量表开始更新统计信息,会对实例造成很大影响,所以目前都会使用持久化统计信息。

2、持久化统计信息在以下情况会被自动更新:

  1. INNODB_STATS_AUTO_RECALC=ON的情况下,表中10%的数据被修改

  2. 增加新的索引

3、统计信息不准确的处理

我们查看执行计划,发现未使用正确的索引,如果是innodb_index_stats中统计信息差别较大引起,可通过以下方式处理:

  1. 手动更新统计信息,注意执行过程中会加读锁:

ANALYZETABLE TABLE_NAME;

  1. 如果更新后统计信息仍不准确,可考虑增加表采样的数据页,两种方式可以修改:

​ a. 全局变量INNODB_STATS_PERSISTENT_SAMPLE_PAGES默认为20;

​ b. 单个表可以指定该表的采样:

ALTER TABLE TABLE_NAME STATS_SAMPLE_PAGES=40;

​ 经测试,此处STATS_SAMPLE_PAGES的最大值是65535,超出会报错。

​ c. 手动更新innodb_table_statsinnodb_index_stats表统计信息(修改这两个表不会产生binlog),然后使用FLUSH TABLE tbl_name语句加载更新后的统计信息。

Enjoy GreatSQL :)

关于 GreatSQL

GreatSQL是适用于金融级应用的国内自主开源数据库,具备高性能、高可靠、高易用性、高安全等多个核心特性,可以作为MySQL或Percona Server的可选替换,用于线上生产环境,且完全免费并兼容MySQL或Percona Server。

相关链接: GreatSQL社区 Gitee GitHub Bilibili

GreatSQL社区:

image

社区有奖建议反馈: https://greatsql.cn/thread-54-1-1.html

社区博客有奖征稿详情: https://greatsql.cn/thread-100-1-1.html

(对文章有疑问或者有独到见解都可以去社区官网提出或分享哦~)

技术交流群:

微信&QQ群:

QQ群:533341697

微信群:添加GreatSQL社区助手(微信号:wanlidbc )好友,待社区助手拉您进群。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/569931.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

梦境绘师:揭秘生成对抗网络(GAN)的魔法

梦境绘师:揭秘生成对抗网络(GAN)的魔法 1 引言 在今日的深度学习领域,生成对抗网络(GAN)已成为一项无人能外的技术,以其独特的数据生成能力俘获了无数研究者和工程师的心。这项技术不仅在理论上…

CSS3新增特性(二)

四、2D 转换 • 属性名:transform (可用于制作2D转换,也可用于制作3D转转换;2D转换是平面上的转换,3D转换是在三维立体空间的转换) • 作用:对元素进行水平或垂直方向的移动、缩放、旋转、拉长…

【GitHub】2FA认证(双重身份验证)

GitHub 2FA认证(双重身份验证) 写在最前面一、使用 TOTP 应用程序配置双2FA(双因素身份验证)1. 介绍2. github3. 认证 官网介绍小结 & 补充 :权限不足or验证码错误问题 🌈你好呀!我是 是Yu欸…

增加PyQt5界面的交通流量预测(模型为CNN_GRU,CNN_BiGRU_ATTENTION,LSTM,Python代码)

1.效果视频:增加PyQt5界面的交通流量预测(模型为CNN_GRU,CNN_BiGRU_ATTENTION,LSTM)_哔哩哔哩_bilibili) 2.三个模型和数据集的介绍 交通流量预测(python代码,压缩包中带有数据,CN…

又发现一个超好用的youtube字幕翻译插件!!!

最近有了梯子,所以热衷于去youtube、Facebook、Twitter等网站浏览。但英语不好是硬伤,不懈努力之下,让我发现了一个超超超超好用的翻译插件——Relingo。 1.支持Youtube字幕翻译 官网下载安装后,打开youtube视频,右侧…

PVE虚拟机隐藏状态栏虚拟设备

虚拟机启动后,状态栏会出现一些虚拟设备,点击弹出会导致虚拟机无法使用。 解决方案: 1、在桌面新建disable_virtio_removale.bat文件,内容如下: ECHO OFF FOR /f %%A IN (reg query "HKLM\SYSTEM\CurrentContro…

【机器学习与实现】机器学习概述

目录 一、机器学习的基本概念和方法(一)基本概念(二)机器学习的一般过程举例(三)样本和参数估计 二、机器学习的步骤总结(一)机器学习的主要步骤(二)样本及样…

MyBatis基础操作

黑马程序员JavaWeb开发教程 文章目录 根据资料中提供的《tlias智能学习辅助系统》页面原型及需求,完成员工管理的需求开发一、环境准备1、准备数据库表emp2、创建一个新的springboot工程,选择引入对应的起步依赖(mybatis、mysql驱动、lombok&…

SpringBoot项目启动,传参有哪些方式?

SpringBoot项目启动,传参有哪些方式? 1.Spring级别的参数 直接在启动 Spring Boot 应用的命令行中使用 -- 后跟参数名和值的方式来传递参数。 记住:一般是对于Spring Boot应用特有的配置参数,确保它们遵循Spring Boot的配置属性命…

PC端微信软件如何多开【详细教程】

现在工作中,很多小伙伴会用到两个微信。如何在PC端同时登录多个微信呢?赶快跟着下面的教程学起来吧 1、创建一个txt文本文件 2、输入以下代码并保存 echo offstart "" "复制粘贴微信的目标地址" 需要开几个微信就复制几行exit示例…

顺序表leetcode刷题(C语言版)

一.移除元素 对于本题,共有两种解法: 思路一:创建新的数组,遍历原数组,将不为value的值放到新数组中,但本题不允许使用新的数组,因此该方法不行 思路二:使用快慢指针,原数…

2.5G交换机 TL-SE2109简单开箱评测,8个2.5G电口+1个10G光口(SFP+)

TPLINK(普联)的万兆上联的2.5G网管交换机TL-SE2109简单开箱测评。8个2.5电口,1个万兆SFP口。 TL-SH5428 万兆交换机开箱和简单的评测:https://blog.zeruns.tech/archives/707.html WiFi7无线路由器TL-7DR6560简单开箱测评&#x…

震惊!小红书矩阵账号管理-批量发布笔记

“小红书引流软件矩阵工具-笔记批量发” 昨天,有个粉丝急匆匆地来找我,一脸焦急地说:“大佬,我现在运营着好几个小红书账号,每天都要发布内容,可把我忙坏了,有没有什么高效的管理方法啊&#xf…

开源协议的对比和商业上的安全使用

开源协议的对比和商业上的安全使用 开源组件是:“任何人都可以自由使用、更改和共享(以修改或未修改的形式)的软件”。当今企业依靠开源来加速开发、降低成本和推动创新。对开放源码的糟糕管理可能会使组织面临安全、法律和操作风险。 使用…

Python基础进阶语法

目录: 一、基础语法二、进阶语法 一、基础语法 二、进阶语法 1、列表推导式运用 解析:先循环1到10内的数字,然后过滤大于5的数,赋值到new_list数组中进行打印结果。

重学java 22.面向对象 继承、抽象综合案例

我们纵横交错,最后回到原点 —— 24.4.23 综合案例 流程思维图 代码实现 方式1 利用set方法为属性赋值 父类: public abstract class Development extends Employee{}子类1: public class JavaEE extends Development{Overridepublic void w…

Redis可视化工具RedisInsight

下载地址:RedisInsight - The Best Redis GUIRedisInsight provides an intuitive and efficient graphical interface for Redis, allowing you to interact with your databases and manage your data.https://redis.com/redis-enterprise/redis-insight/#insight…

APP自定义身份证相机(Android +iOS)

基本上同时兼容安卓和苹果的插件都需要付费,这里我找了2个好用的免费插件 1.仅支持安卓:自定义身份证相机(支持蒙版自定义),内置蒙版,照片预览,身份证裁剪 - DCloud 插件市场、 2.支持iOS(已测…

前端CSS基础8(盒子模型(margin、border、padding、content))

前端CSS基础8(盒子模型(margin、border、padding、content)) CSS盒子模型CSS中常用的长度单位元素的分类,各个元素的显示模式修改元素的显示模式(类型)盒子模型的组成部分盒子内容区-contentCSS…

激活虚拟环境.ps1“因为在此系统上禁止运行脚本”解决办法

激活虚拟环境.ps1“因为在此系统上禁止运行脚本”解决办法 1.问题收录 Django激活虚拟环境时遇到的,已解决,作以收录,希望能帮到大家 2.分析问题 核心是Powershell的安全策略,将XX命令视为不安全脚本,不允许执行&…