iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >Percona MySQL 5.6如何配置InnoDB优化器永久统计信息
  • 972
分享到

Percona MySQL 5.6如何配置InnoDB优化器永久统计信息

2024-04-02 19:04:59 972人浏览 八月长安
摘要

这篇文章主要介绍Percona Mysql 5.6如何配置InnoDB优化器永久统计信息,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! 优化器永久统计信息

这篇文章主要介绍Percona Mysql 5.6如何配置InnoDB优化器永久统计信息,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

优化器永久统计信息通过把统计信息保存在磁盘上,使得MySQL在选择语句的执行计划时,会选择相对一致的执行计划,提升了SQL执行计划的稳定性。
当开启innodb_stats_persistent=ON这个参数时或在建表时带了STATS_PERSISTENT=1参数,优化器的统计信息会永久保存到磁盘上。在之前的版本,每当MySQL服务重启或执行某些特定操作时,优化器的统计信息会被清除。
表下一次被访问时,MySQL会重新收集优化器统计信息,这样会导致统计信息的改变,从而导致MySQL在解析语句时执行计划的改变,进而影响查询性能。
优化器永久统计信息保存在mysql.innodb_table_stats和mysql.innodb_index_stats这两张表中。

mysql> select @@version;
+-----------------+
| @@version       |
+-----------------+
| 5.6.31-77.0-log |
+-----------------+
1 row in set (0.01 sec)

mysql> show variables like 'innodb_stats_persistent';
+-------------------------+-------+
| Variable_name           | Value |
+-------------------------+-------+
| innodb_stats_persistent | ON    |
+-------------------------+-------+
1 row in set (0.00 sec)
mysql> desc mysql.innodb_table_stats;
+--------------------------+---------------------+------+-----+-------------------+-----------------------------+
| Field                    | Type                | Null | Key | Default           | Extra                       |
+--------------------------+---------------------+------+-----+-------------------+-----------------------------+
| database_name            | varchar(64)         | NO   | PRI | NULL              |                             |
| table_name               | varchar(64)         | NO   | PRI | NULL              |                             |
| last_update              | timestamp           | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
| n_rows                   | bigint(20) unsigned | NO   |     | NULL              |                             |
| clustered_index_size     | bigint(20) unsigned | NO   |     | NULL              |                             |
| sum_of_other_index_sizes | bigint(20) unsigned | NO   |     | NULL              |                             |
+--------------------------+---------------------+------+-----+-------------------+-----------------------------+
6 rows in set (0.00 sec)
mysql> select * from mysql.innodb_table_stats;
+---------------+---------------+---------------------+---------+----------------------+--------------------------+
| database_name | table_name    | last_update         | n_rows  | clustered_index_size | sum_of_other_index_sizes |
+---------------+---------------+---------------------+---------+----------------------+--------------------------+
| fire          | t1            | 2016-06-11 23:12:34 |  392945 |                  801 |                      481 |
| fire          | t2            | 2016-06-11 23:15:12 | 2080004 |                 4070 |                     2341 |
| fire          | test          | 2016-06-09 01:23:06 |       0 |                    1 |                        0 |
| mysql         | gtid_executed | 2016-06-07 01:28:28 |       0 |                    1 |                        0 |
| sys           | sys_config    | 2016-06-07 01:28:30 |       2 |                    1 |                        0 |
+---------------+---------------+---------------------+---------+----------------------+--------------------------+
5 rows in set (0.08 sec)

mysql> desc mysql.innodb_index_stats;
+------------------+---------------------+------+-----+-------------------+-----------------------------+
| Field            | Type                | Null | Key | Default           | Extra                       |
+------------------+---------------------+------+-----+-------------------+-----------------------------+
| database_name    | varchar(64)         | NO   | PRI | NULL              |                             |
| table_name       | varchar(64)         | NO   | PRI | NULL              |                             |
| index_name       | varchar(64)         | NO   | PRI | NULL              |                             |
| last_update      | timestamp           | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
| stat_name        | varchar(64)         | NO   | PRI | NULL              |                             |
| stat_value       | bigint(20) unsigned | NO   |     | NULL              |                             |
| sample_size      | bigint(20) unsigned | YES  |     | NULL              |                             |
| stat_description | varchar(1024)       | NO   |     | NULL              |                             |
+------------------+---------------------+------+-----+-------------------+-----------------------------+
8 rows in set (0.00 sec)
mysql> select * from mysql.innodb_index_stats;
+---------------+---------------+-----------------+---------------------+--------------+------------+-------------+-----------------------------------+
| database_name | table_name    | index_name      | last_update         | stat_name    | stat_value | sample_size | stat_description                  |
+---------------+---------------+-----------------+---------------------+--------------+------------+-------------+-----------------------------------+
| fire          | t1            | GEN_CLUST_INDEX | 2016-06-11 23:12:34 | n_diff_pfx01 |     392945 |          20 | DB_ROW_ID                         |
| fire          | t1            | GEN_CLUST_INDEX | 2016-06-11 23:12:34 | n_leaf_pages |        763 |        NULL | Number of leaf pages in the index |
| fire          | t1            | GEN_CLUST_INDEX | 2016-06-11 23:12:34 | size         |        801 |        NULL | Number of pages in the index      |
| fire          | t1            | idx_t1_a        | 2016-06-11 23:12:34 | n_diff_pfx01 |          2 |           4 | a                                 |
| fire          | t1            | idx_t1_a        | 2016-06-11 23:12:34 | n_diff_pfx02 |     395866 |          20 | a,DB_ROW_ID                       |
| fire          | t1            | idx_t1_a        | 2016-06-11 23:12:34 | n_leaf_pages |        403 |        NULL | Number of leaf pages in the index |
| fire          | t1            | idx_t1_a        | 2016-06-11 23:12:34 | size         |        481 |        NULL | Number of pages in the index      |
| fire          | t2            | GEN_CLUST_INDEX | 2016-06-11 23:15:12 | n_diff_pfx01 |    2079570 |          20 | DB_ROW_ID                         |
| fire          | t2            | GEN_CLUST_INDEX | 2016-06-11 23:15:12 | n_leaf_pages |       4038 |        NULL | Number of leaf pages in the index |
| fire          | t2            | GEN_CLUST_INDEX | 2016-06-11 23:15:12 | size         |       4070 |        NULL | Number of pages in the index      |
| fire          | t2            | idx_t2_a        | 2016-06-11 23:15:12 | n_diff_pfx01 |          3 |           5 | a                                 |
| fire          | t2            | idx_t2_a        | 2016-06-11 23:15:12 | n_diff_pfx02 |    2084334 |          20 | a,DB_ROW_ID                       |
| fire          | t2            | idx_t2_a        | 2016-06-11 23:15:12 | n_leaf_pages |       2122 |        NULL | Number of leaf pages in the index |
| fire          | t2            | idx_t2_a        | 2016-06-11 23:15:12 | size         |       2341 |        NULL | Number of pages in the index      |
| fire          | test          | GEN_CLUST_INDEX | 2016-06-09 01:23:06 | n_diff_pfx01 |          0 |           1 | DB_ROW_ID                         |
| fire          | test          | GEN_CLUST_INDEX | 2016-06-09 01:23:06 | n_leaf_pages |          1 |        NULL | Number of leaf pages in the index |
| fire          | test          | GEN_CLUST_INDEX | 2016-06-09 01:23:06 | size         |          1 |        NULL | Number of pages in the index      |
| mysql         | gtid_executed | PRIMARY         | 2016-06-07 01:28:28 | n_diff_pfx01 |          0 |           1 | source_uuid                       |
| mysql         | gtid_executed | PRIMARY         | 2016-06-07 01:28:28 | n_diff_pfx02 |          0 |           1 | source_uuid,interval_start        |
| mysql         | gtid_executed | PRIMARY         | 2016-06-07 01:28:28 | n_leaf_pages |          1 |        NULL | Number of leaf pages in the index |
| mysql         | gtid_executed | PRIMARY         | 2016-06-07 01:28:28 | size         |          1 |        NULL | Number of pages in the index      |
| sys           | sys_config    | PRIMARY         | 2016-06-07 01:28:30 | n_diff_pfx01 |          2 |           1 | variable                          |
| sys           | sys_config    | PRIMARY         | 2016-06-07 01:28:30 | n_leaf_pages |          1 |        NULL | Number of leaf pages in the index |
| sys           | sys_config    | PRIMARY         | 2016-06-07 01:28:30 | size         |          1 |        NULL | Number of pages in the index      |
+---------------+---------------+-----------------+---------------------+--------------+------------+-------------+-----------------------------------+
24 rows in set (0.00 sec)

--配置优化器永久统计信息的自动收集
当表中条目发生改变时(10%以上的行发生改变),innodb_stats_auto_recalc参数决定是否重新收集统计信息。这个参数默认是开启的。可以在CREATE TABLE、ALTER TABLE语句上面添加STATS_AUTO_RECALC选项来开启指定表的统计信息自动收集。
统计信息的自动收集是在后台以异步的方式进行的。当对一张表执行了影响表中10%行数的DML操作,在innodb_stats_auto_recalc参数开启的情况下,统计信息可能不会立刻开始重新收集,这个收集可能会延迟几十秒。如果需要最新的统计信息,可以执行ANALYZE TABLE语句,在前台统计收集统计信息。
mysql> show variables like 'innodb_stats_auto_recalc';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| innodb_stats_auto_recalc | ON    |
+--------------------------+-------+
1 row in set (0.21 sec)

如果innodb_stats_auto_recalc参数没有开启时,在表中索引字段数据发生大的改变时,例如表中被导入大量数据,或表有阶段性的大改变索引字段的DML操作,需要及时执行ANALYZE TABLE语句,来保证优化器统计信息的准确性。当在一张已存在的表上创建索引时,不管是否开启innodb_stats_auto_recalc参数,索引的统计信息会自动收集并保存在innodb_index_stats表中。

--配置优化器统计信息Sampled Pages的数量
在执行计划中,MySQL查询优化器根据索引的selectivity,使用索引分布统计信息来选择使用的索引。当执行ANALYZE TABLE操作时,InnoDB会对每个索引进行采样来估算cardinality(某字段非重复值的数量),这个技术被称为random dives。可以通过innodb_stats_persistent_sample_pages参数来改变采样使用的页数,这个参数的默认值是20。当发生下面情况时,可以考虑修改这个参数:

1、在EXPLaiN输出中,统计信息不准确,优化器选择了非最优的执行计划。可以通过比较SELECT DISTINCT索引字段和mysql.innodb_index_stats表中的索引的cardinality,来查看索引实际的cardinality的准确性。
如果统计信息不准确,应该增加innodb_stats_persistent_sample_pages这个参数的值,直到统计信息足够准确为止。如果将这个参数的值增加太大,会导致ANALYZE TABLE操作运行缓慢。

2、ANALYZE TABLE操作太慢。这时可以考虑减小innodb_stats_persistent_sample_pages这个参数的值,直到ANALYZE TABLE的执行时间能在一个接受的范围内。然而,将这个参数的值设的太小,可能会导致统计信息的不准确,进而影响执行计划的优劣。

3、如果在统计信息的准确性和ANALYZE TABLE执行时间之间不能取得平衡,考虑减少表中索引字段的数量或减少ANALYZE TABLE所分析的分区数量。

以上是“Percona MySQL 5.6如何配置InnoDB优化器永久统计信息”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网数据库频道!

您可能感兴趣的文档:

--结束END--

本文标题: Percona MySQL 5.6如何配置InnoDB优化器永久统计信息

本文链接: https://www.lsjlt.com/news/63285.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Percona MySQL 5.6如何配置InnoDB优化器永久统计信息
    这篇文章主要介绍Percona MySQL 5.6如何配置InnoDB优化器永久统计信息,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! 优化器永久统计信息...
    99+
    2024-04-02
  • 云服务器如何配置环境信息系统
    云服务器通常包含许多配置选项和环境信息,以便您可以根据您的需求和配置选择最适合您工作负载的环境信息系统。 以下是常见的云服务器选项: SAS:SAS是IBM的云基础设施,它可以提供高度可扩展性和灵活性。它可以为多种不同的工作负载提供服务...
    99+
    2023-10-26
    信息系统 环境 服务器
  • 云服务器如何配置环境信息系统功能
    一、配置基础信息 服务器类型:服务器分为两种类型:通用服务器和云服务器。通用服务器是针对不同的应用场景设计的,例如企业级服务器、桌面级服务器等,适合不同的应用场景;而云服务器则是针对互联网应用场景设计的,具有高可靠性、高性能和高可扩展性...
    99+
    2023-10-28
    信息系统 功能 环境
  • 云服务器如何配置路由协议信息系统
    云服务器可以配置路由协议来帮助客户端通过网络连接到服务器。以下是一些常用的路由协议以及它们如何工作的一些细节: Route Name Relationship:Route Name Relationship (RR) 协议用于在路由中设...
    99+
    2023-10-27
    信息系统 路由协议 服务器
  • 云服务器如何配置环境信息系统设备
    对于环境信息系统设备,包括服务器、存储设备、网络设备等,它们都是环境信息系统的核心组成部分,直接关系到环境信息系统的稳定性、安全性和性能。在配置环境信息系统设备时,需要考虑以下几个方面: 服务器配置:服务器的配置是服务器整体性能的基础,...
    99+
    2023-10-27
    信息系统 环境 服务器
  • 如何登录亚马逊服务器配置信息系统
    亚马逊 AWS(Amazon Web Services)是一种云计算平台,它提供了一系列的云服务,包括计算、存储、数据库、分析、机器学习、人工智能、物联网等。如果你想要登录亚马逊服务器配置信息系统,可以按照以下步骤进行操作。 1. 创建 ...
    99+
    2023-10-27
    亚马逊 信息系统 服务器配置
  • MySQL中如何优化4G内存服务器配置
    这篇文章主要介绍了MySQL中如何优化4G内存服务器配置,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 公司网...
    99+
    2024-04-02
  • 云服务器如何配置路由协议信息系统功能
    IP地址策略:根据用户需求和应用场景,制定合理的IP地址策略,如全球IP地址策略、本地IP地址策略、VLAN划分等,以实现对不同设备的IP地址分配和路由策略控制。 路由协议选择:根据应用场景和路由需求,选择适当的路由协议,如HTTP、FT...
    99+
    2023-10-27
    信息系统 路由协议 功能
  • 云服务器如何配置路由协议信息传输系统
    在选择云服务器的路由协议信息传输系统时,用户需要考虑以下几个方面: 可靠性 在选择路由协议信息传输系统时,用户需要考虑系统的可靠性。云服务器通常使用大型云服务商提供的云服务,这些云服务商通常具有更高的可靠性和安全性,能够提供更好的数据...
    99+
    2023-10-27
    路由协议 服务器 系统
  • 云服务器如何配置路由协议信息系统设备
    首先,对于云服务器的路由协议来说,需要考虑的主要因素包括: 网络流量控制:当云服务器连接到网络时,需要考虑网络流量的控制,以确保云服务器不会被过多的用户访问导致服务中断。 数据转发控制:当用户需要从云服务器获取数据时,需要确保数据的传输...
    99+
    2023-10-28
    信息系统 路由协议 服务器
  • 如何实现MySQL底层优化:日志系统的高级配置和性能调优
    如何实现MySQL底层优化:日志系统的高级配置和性能调优摘要:MySQL是一种开源的关系型数据库管理系统,被广泛应用于各种规模的应用程序中。在大数据量和高并发的场景下,MySQL的性能优化显得尤为重要。本文将重点介绍MySQL底层的日志系统...
    99+
    2023-11-08
    MySQL 性能调优 日志配置
  • 如何使用 atmadm 来显示 ATM 适配器上传入和传出呼叫的统计信息
    本篇内容介绍了“如何使用 atmadm 来显示 ATM 适配器上传入和传出呼叫的统计信息”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Atm...
    99+
    2023-06-09
  • 如何在MySQL中设计仓库管理系统的表结构来管理仓库位置和货架信息?
    如何在MySQL中设计仓库管理系统的表结构来管理仓库位置和货架信息?随着物流和仓储业务的发展,仓库管理系统成为了许多企业重要的工具。在一个仓库中,对于货物的存放和管理,合理的仓库位置和货架布局是非常重要的。而MySQL作为一种常用的关系型数...
    99+
    2023-10-31
    MySQL 仓库管理 表结构
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作