一、持久化统计信息的意义:

  统计信息用于指导mysql生成执行计划,执行计划的准确与否直接影响到SQL的执行效率;如果mysql一重启

  之前的统计信息就没有了,那么当SQL语句来临时,那么mysql就要收集统计信息然后再生成SQL语句的执行

  计划。如果能在关闭mysql的时候就把统计信息保存起来,那么在启动时就不要再收集一次了,这种处理方式

  有助于效率的提升。

 

二、统计信息准确与否也同样重要:

  第一目中我们说明了“持久化统计信息的意义”,我们的假设统计信息是有用的,是准确的;如果统计信息本身

  已经过时了,比如说统计信息是在表中只有100行时统计出来的,这种情况下往往走全表扫描开销会更小,但是

  呢! 现在表中的行数已经达到了100万行,明显这种过时的统计信息会引发性能灾难,所以统计信息的时效性也

  是同样重要的。那mysql它什么时候自动更新统计信息呢?默认情况下当表中的数据有10%被修改过的就会更新。

三、mysql对统计信息的处理:

  针对上面的两个问题mysql都有给出解决方案,并且都可能通过简单的配置来解决

  1、针对是否持久化统计信息mysql可以通过innodb_stats_persistent参数来控制

  2、针对统计信息的时效性,mysql通过innodb_stats_auto_recalc参数来控制是否自动更新

  3、针对统计信息的准确性,mysql通过innodb_stats_persistent_sample_pages 参数来控制更新

  统计信息时的采样,样本页面的数量。

[mysqld]
innodb_stats_persistent=1
innodb_stats_auto_recalc=1
innodb_stats_persistent_sample_pages=20

四、手动更新统计信息的方式:

  mysql通过analyze table 语句来手动的更新统计信息

五、查看表的统计信息是什么时候更新的:

  mysql把统计信息相关的内容记录在mysql.innodb_table_stats ,mysql.innodb_index_stats 这两张表里面。

  mysql.innodb_table_stats以表为单位记录着统计信息

mysql> select * from innodb_table_stats;
+---------------+----------------------------+---------------------+--------+----------------------+--------------------------+
| database_name | table_name                 | last_update         | n_rows | clustered_index_size | sum_of_other_index_sizes |
+---------------+----------------------------+---------------------+--------+----------------------+--------------------------+
| fdb           | auth_group                 | 2017-08-10 14:36:40 |      0 |                    1 |                        1 |
| fdb           | auth_group_permissions     | 2017-08-10 14:36:41 |      0 |                    1 |                        2 |
| fdb           | auth_permission            | 2017-08-10 14:36:41 |     30 |                    1 |                        1 |
| fdb           | auth_user                  | 2017-08-10 14:36:41 |      0 |                    1 |                        1 |
| fdb           | auth_user_groups           | 2017-08-10 14:36:41 |      0 |                    1 |                        2 |
| fdb           | auth_user_user_permissions | 2017-08-10 14:36:41 |      0 |                    1 |                        2 |
| fdb           | cninfo_company             | 2017-08-10 14:36:58 |   4996 |                  161 |                        6 |
| fdb           | csindex_indexdetail        | 2017-09-17 14:04:27 |      0 |                    1 |                        0 |
| fdb           | csindex_indexoverview      | 2017-09-01 12:44:18 |     11 |                    1 |                        0 |
| fdb           | django_admin_log           | 2017-08-10 14:36:47 |      0 |                    1 |                        2 |
| fdb           | django_content_type        | 2017-08-10 14:36:47 |     10 |                    1 |                        1 |
| fdb           | django_migrations          | 2017-09-04 14:04:09 |     37 |                    1 |                        0 |
| fdb           | django_session             | 2017-08-10 14:36:47 |      0 |                    1 |                        1 |
| fdb           | glod_glodprice             | 2017-08-10 14:36:48 |   2271 |                   10 |                        0 |
| fdb           | pbc_moneysupply            | 2017-08-10 14:37:08 |     78 |                    1 |                        0 |
| fdb           | shibor_shiborrate          | 2017-08-10 14:37:18 |   2711 |                   14 |                        0 |
| fdb           | sse_marketoverview         | 2017-08-15 16:06:12 |      0 |                    1 |                        0 |
| mysql         | gtid_executed              | 2017-09-06 11:02:14 |      2 |                    1 |                        0 |
| sys           | sys_config                 | 2017-08-10 12:19:06 |      6 |                    1 |                        0 |
| tempdb        | person                     | 2017-09-14 11:18:15 |      1 |                    1 |                        0 |
| tmp           | t                          | 2017-08-15 11:06:18 |      2 |                    1 |                        0 |
+---------------+----------------------------+---------------------+--------+----------------------+--------------------------+
21 rows in set (0.00 sec)

  各个列所代表的意义:

  database_name        表所在的库名

  table_name          表名

  last_update          最近一次的更新时间

  n_rows            表中的行数

  clustered_index_size       主键的大小

  sum_of_other_index_sizes   所有二级索引的大小

 六、一些在analyze table 过程中的经验:

  如果我们用explan 语句查看SQL的执行计划的时候发现,计划走的不准,多半是由于统计信息过时引起的,这个

  时候就要执行一下analyze table 来重新生成一下执行计划了;有时候可能发现重新生成执行计划后并没有什么用

  SQL还是走的不准,这个时候最可能的原因就是生成执行计划时的采样页的数量太低了,innodb_stats_persistent_sample_pages

  这个参数的值,注意这个值也不要加的太大,要不然会老半天都执行不完analyze table 语句。

  

七、附加说明

  上文中说的mysql实际上指的只是Innodb这个引擎

----

-----------------------------------------------------------------------

转载于:https://www.cnblogs.com/JiangLe/p/7535710.html

mysql-5.7 持久化统计信息详解相关推荐

  1. mysql获取当天每小时统计_详解mysql 获取某个时间段每一天、每一个小时的统计数据...

    获取每一天的统计数据 做项目的时候需要统对项目日志做分析,其中有一个需求是获取某个给定的时间段内,每一天的日志数据,比如说要获取从2018-02-02 09:18:36到2018-03-05 23:1 ...

  2. linux下mysql数据库基础及客户端命令详解

    linux下mysql数据库基础及客户端命令详解 1.mysql数据库存储引擎: SHOW ENGINES;   #查看mysql支持的存储引擎 常见有如下两个存储引擎: MyISAM:每表三个文件: ...

  3. mysql语句性能开销检测profiling详解

    转载自 mysql语句性能开销检测profiling详解 之前我介绍过msyql查询优化explain检查命令的使用,explain主要是检查sql语句的基本性能,sql是否优秀,但不能查看具体的涉及 ...

  4. MySQL的用户密码过期功能详解

    MySQL的用户密码过期功能详解 作者:chszs,未经博主允许不得转载.经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs 先说明两个术语. Payment Ca ...

  5. mysql数据库表分区_MySQL数据库之MySQL的分区和分表详解

    本文主要向大家介绍了MySQL数据库之MySQL的分区和分表详解 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 1. 分区 MySQL中的分区是指将一个数据表按照某种规则(如时 ...

  6. Redis持久化——AOF机制详解

    在运行情况下,Redis 以数据结构的形式将数据维持在内存中,为了让这些数据在 Redis 重启之后仍然可用,需要将数据写入持久存储 持久化是指将数据写入持久存储,例如固态磁盘(SSD) Redis ...

  7. mysql启动参数(/etc/my.cnf)详解汇总

    mysql启动参数(/etc/my.cnf)详解汇总 MYSQL–my.cnf配置中文详解 basedir = path 使用给定目录作为根目录(安装目录). character-sets-dir = ...

  8. 灰度图像特征提取之统计方式详解

    灰度图像特征提取之统计方式详解 统计方法的优势: 具有较强的适应能力和鲁棒性. 统计方法的不足 : 与人类视觉模型脱节,缺少全局信息的利用,难以研究纹理尺度间像素的遗传或依赖关系:缺乏理论支撑:计算复 ...

  9. mysql物理备份与逻辑备份详解

    mysql物理备份与逻辑备份详解 条件: 本文针对mysql版本为5.7,存储引擎为InnoDB,其他版本未做实验 一.逻辑备份恢复 备份: $ mysqldump -h127.0.0.1 --add ...

最新文章

  1. python *args 元组 **kargs 字典
  2. erp沙盘采购总监的心得_erp沙盘模拟采购总监心得
  3. JZOJ 3808. 【NOIP2014模拟8.25】道路值守
  4. Linux 查看CPU,内存,硬盘
  5. struts2工作原理
  6. ubuntu 16.04安装nVidia显卡驱动和cuda/cudnn踩坑过程
  7. 地球上这10个奇幻景观,带你踏入外太空
  8. DevOps发布策略简介
  9. FineUI(专业版)v3.1发布(ASP.NET控件库)!
  10. Python编程 - 不调用相关choose库函数,“众数“挑选器、随机挑选器 的源码编程实现
  11. 王者服务器维护11月,11月17日体验服停机更新公告
  12. 一篇文章学会er图绘制
  13. PS如何修改扩展插件的名字(Photoshop重命名插件教程)
  14. 时域、频域、傅里叶变换
  15. BI工具和数据中台有什么区别?
  16. core+Fleck+redis
  17. python批量请求url_python批量请求注册接口爬虫相关问题记录
  18. ENVI系列--安装扩展工具的两种方法
  19. UDS之浅谈31服务
  20. 流程图和火车程序Jackson图

热门文章

  1. 微信公众平台“自定义回复”技巧
  2. xcode5(iOS7)新特性-asset catalog与image slicing
  3. SQL经典问题1——产品、颜色、数量
  4. 测试回收站测试回收站2测试回收站2测试回收站2测试回收站2测试回收站2测试回收站2测试回收站2测试回收站2测试回收站2测试回收站2测试回收站2测试回收站2测试回收站2测试回收站2测试回收站2测试回收站
  5. 被冻结的钱,银行可以私自处理吗?
  6. Linux : find big file in the all directories
  7. NDIS与WinSock关系之自我扫盲
  8. 电脑下面的任务栏怎么取消隐藏_电脑工具栏怎么调到下面
  9. python csv读写方法_python中csv文件的若干读写方法小结
  10. hdfs中8031是什么端口号_在宿主机如何访问docker中hadoop的hdfs:ip:9000啊, 端口映射出来啊...