GreatSQL统计信息相关知识点

这篇具有很好参考价值的文章主要介绍了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社区:

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

GreatSQL统计信息相关知识点

技术交流群:

微信:扫码添加GreatSQL社区助手微信好友,发送验证信息加群

GreatSQL统计信息相关知识点文章来源地址https://www.toymoban.com/news/detail-856680.html

到了这里,关于GreatSQL统计信息相关知识点的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringMVC相关知识点

    传统开发中的控制层: 接收请求参数 request.getParameter 封装实体 new 实体类调用其set方法 访问业务层 接收访问结果 指派页面 通过request和response对象进行页面跳转 将共有行为进行抽取成DispatcherServlet【SpringMVC内部集成】,通过Spring-MVC.xml配置文件去配置。 Spring: 获取请求参数

    2024年02月16日
    浏览(45)
  • ThreadLocal相关知识点

    ThreadLocal是Java中的一个类,它提供了一种线程局部变量的机制。它的作用是,为每个线程创建一个独立的变量副本,各个线程之间互不干扰。简单来说,ThreadLocal为多线程环境下的线程提供了一种线程私有的数据存储方式。 使用ThreadLocal可以避免多线程中的数据共享和竞争条

    2024年02月11日
    浏览(44)
  • DAC相关知识点

    1.回放数据64bit的数据来源有两个地方: A——ROM波形数据表(数据来源可由dds产生或者matlab产生,本实际项目选择由dds产生的数据:通过写地址出来相应频率的波形)。 B——预留的接口给客户用来回访他们的I/Q数据 (64bit数据一般是4组16bit的IQ拼接的{i0,q0,i1,q1})。 2.6

    2024年02月12日
    浏览(44)
  • Redis相关知识点

    Redis (REmote DIctionary Server) 是用 C 语言开发的一个开源的高性能键值对(key-value)数据库,它支持网络,可基于内存亦可持久化,并提供多种语言的API。Redis具有高效性、原子性、支持多种数据结构、持久化、高并发读写等特点。 特征: 1.数据间没有必然的关联关系 2.内部采用

    2024年01月23日
    浏览(69)
  • JVM相关知识点

    Java可以跨平台的原因是因为它使用了Java虚拟机(JVM)作为中间层。Java源代码首先被编译成字节码,然后由JVM解释执行或即时编译成本地机器代码。这样,在不同的操作系统上,只需要安装适合该操作系统的JVM,就可以运行相同的Java程序。JVM提供了一个抽象的执行环境,使得

    2024年02月08日
    浏览(46)
  • Linux相关知识点

    Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。 Linux内核 是一个Linux系统的内核,而不是一个操作系统 Linux操作系统 红帽操

    2024年02月11日
    浏览(43)
  • Hadoop相关知识点

    开启防火墙 sudo ufw enable 关闭防火墙 sudo ufw disable 查看防火墙状态 sudo ufw status 修改主机名 sudo vi /etc/hostname 修改映射 sudo vi /etc/hosts (考题) 建立文件夹 mkdir 文件夹名字 删除文件夹 rm -rf 递归删除文件夹向下穿透,其下所有文件、文件夹都会被删除 rm -f 强制删除文件 rm -r 递归

    2024年02月06日
    浏览(38)
  • java相关知识点

    1.String和StringBuffer如何互相转化 StringBuffer buffer = new StringBuffer(string); String string = buffer.toString();  2.如何实现两个数组内容的拷贝  3.如何去除字符串首尾空格 str.trim()  4.字符串和字符数组如何相互转换 字符串转字符数组:str.toCharArray(); 字符数组转字符串:strs.valueOf(char[] ch)  

    2023年04月23日
    浏览(43)
  • 华为云计算相关知识点

    云计算离不开网络基础设施,云计算中的网络分为不同的平面。 管理平面:负责整个系统的监控、操作维护(系统配置,系统加载、告警上报)和虚拟机管理(创建、删除虚拟机、虚拟机调度)等。 存储平面:主要为存储系统提供通信平面,并未虚拟机提供存储资源,用于

    2024年02月07日
    浏览(39)
  • 深度学习相关知识点概念

    卷积神经网络(Convolutional Neural Network,CNN) 是一种专门用于处理和分析具有网格结构数据的人工神经网络。CNN主要应用于计算机视觉领域,用于图像识别、物体检测、图像分割等任务。 CNN的设计受到了生物视觉系统的启发,其主要特点是在网络中引入了卷积层(convolutiona

    2024年04月16日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包