MYSQL数据库MySQL优化之InnoDB优化

MYSQL数据库MySQL优化之InnoDB优化,第1张

概述介绍《MYSQL数据库MySQL优化之InnoDB优化》开发教程,希望对您有用。

《MysqL数据库MysqL优化之InnoDB优化》要点:
本文介绍了MysqL数据库MysqL优化之InnoDB优化,希望对您有用。如果有疑问,可以联系我们。

MysqL实例学习计划很容易就被打断,坚持也不容易.最近公司里开会,要调整业务方向,建议学习NodeJs.NodeJs之前我就会一点,但是没有深入研究.Node的语法和客户端Js基本上是一样的,这半年来很少开发有客户端的东西.本来Js基础还行的我,也对这块的知识陌生了.看起来知识都是用进废退的,不常用了,过不了多久就会遗忘.所以又重新复习了Js的相关知识.学习了Node的服务器与socket知识.MysqL的计划就这样的搁浅起来,星期天的时候吃吃喝喝睡睡,早上又懒的要命,熬着熬着就熬到了下午.废话不多说了,继续进行MysqL的优化系列,这次看下InnoDB的优化项.

MysqL实例InnoDB的主索引是聚簇索引,索引与数据公用表空间.对于InnoDB来说,数据就是索引,索引就是数据.InnoDB缓存机制与MyISAM的最大区别在于,InnoDB不仅缓存索引,同时还会缓存数据.

MysqL实例一、InnoDB缓存池

MysqL实例InnoDB缓存池(InnoDB buffer pool)是提升InnoDB提升性能的关键,它既可以缓存数据,又可以缓存索引,甚至其他的管理数据(元数据、行级锁)等.可以使用show variables like 'innodb%pool%'; 来查看相关的参数选项.

MysqL实例MysqL> show variables like 'innodb%pool%';+-------------------------------------+----------------+| Variable_name            | Value     |+-------------------------------------+----------------+| innodb_additional_mem_pool_size   | 8388608    || innodb_buffer_pool_dump_at_shutdown | OFF      || innodb_buffer_pool_dump_Now     | OFF      || innodb_buffer_pool_filename     | ib_buffer_pool || innodb_buffer_pool_instances    | 8       || innodb_buffer_pool_load_abort    | OFF      || innodb_buffer_pool_load_at_startup | OFF      || innodb_buffer_pool_load_Now     | OFF      || innodb_buffer_pool_size       | 134217728   |+-------------------------------------+----------------+

MysqL实例innodb_buffer_pool_size

MysqL实例innodb_buffer_pool_size是用于设置InnoDB缓存池(InnoDBBufferPool)的大小,默认值是128M.InnoDB缓存池的大小对InnoDB的整体性能影响较大,如果当前的MysqL服务器专门用作MysqL服务,那么可以尽量的增加该参数的大小.

MysqL实例innodb_buffer_pool_instance

MysqL实例innodb_buffer_pool_instance默认值是1,表示InnoDB缓存池被划分为一个区域,适当的增加该参数值,可以提升InnoDB的并发性能.

MysqL实例innodb_additional_mem_pool_size

MysqL实例指定InnoDB用于来存储数据字典和其他内部数据的缓存大小,默认值是2M.InnoDB的表个数越多,就应该适当的增加该参数的大小.

MysqL实例二、InnoDB缓存池内部结构

MysqL实例InnoDB在内存中维护一个缓存池用于缓存数据和索引.缓存池可以认为是一条很长的链表(List).该链表分为两个子链表,一个子链表存放old page数据,old page 数据是长时间未被访问的数据页,亮一个子链表存放new page,new page 是最近被访问的数据页.old page 默认占整个链表大小的37%,可以通过innodb_old_blocks_pct参数查看.

MysqL实例MysqL> show variables like 'innodb_old_blocks%';+------------------------+-------+| Variable_name     | Value |+------------------------+-------+| innodb_old_blocks_pct | 37  || innodb_old_blocks_time | 1000 |+------------------------+-------+

MysqL实例old page 和 new page 的交汇点称为mIDpoint.

MysqL实例当用户访问数据时,InnoDB首先会再InnoDB缓存中查找数据,如果缓存池中没有数据,InnoDB会将硬盘中的数据插入到InnoDB缓存池中,如果缓存池已满,则利用LRU算法清楚过期的老数据

MysqL实例三、InnoDB缓存池预热.

MysqL实例MysqL服务器启动一段时间后,InnoDB会将经常访问的数据(业务数据,管理数据)放入InnoDB缓存中,即InnoDB缓存池中保存的是频繁需要访问的数据(简称热数据).当InnoDB缓存池的大小是几十G或者上百G的时候,如果重启MysqL,如果将之前InnoDB缓存池中的热数据加载到InnoDB缓存池中呢?

MysqL实例如果单靠InnoDB自身预热的InnoDB缓存池,将会是一个不短的时间周期,这对于业务繁忙的系统来说,长时间的挂机,是严重的生产事故,不能够容忍.幸好在MysqL5.6版本支持关闭服务时,可以将热数据保存至硬盘,MysqL重启是首先将硬盘中的热数据加载到InnoDB的缓存中去,这样可以缩短预热的时间,提高业务繁忙高并发时的效率.

MysqL实例MysqL> show variables like '%innodb%pool%';+-------------------------------------+----------------+| Variable_name            | Value     |+-------------------------------------+----------------+| innodb_additional_mem_pool_size   | 8388608    || innodb_buffer_pool_dump_at_shutdown | OFF      || innodb_buffer_pool_dump_Now     | OFF      || innodb_buffer_pool_filename     | ib_buffer_pool || innodb_buffer_pool_instances    | 8       || innodb_buffer_pool_load_abort    | OFF      || innodb_buffer_pool_load_at_startup | OFF      || innodb_buffer_pool_load_Now     | OFF      || innodb_buffer_pool_size       | 134217728   |+-------------------------------------+----------------+

MysqL实例innodb_buffer_pool_dump_at_shutdown

MysqL实例默认是关的,如果开启参数,停止MysqL服务是,InnoDB缓存中的热数据将会保存到硬盘中.

MysqL实例innodb_buffer_pool_load_at_starup

MysqL实例默认是关闭的,如果开启该参数,启动MysqL服务时,MysqL将本地硬盘的热数据加载到InnoDB缓存池中.

MysqL实例innodb_buffer_pool_dump_Now

MysqL实例默认关闭,停止MysqL服务时,以手动方式将InnoDB缓存池中的热数据保存到本地硬盘.

MysqL实例innodb_buffer_pool_load_Now

MysqL实例默认关闭,以手动方式将本地硬盘的数据加载到InnoDB缓存池中,

MysqL实例innodb_buffer_pool_filename

MysqL实例如果开启InnoDB预热功能,MysqL将InnoDB缓存池中的热数据保存到数据库根目录下,默认文件名是这个参数的值.

MysqL实例开启InnoDB缓存后,可以使用如下命令查看当前InnoDB缓存池预热的状态信息:

MysqL实例show status like 'innodb_buffer%';+---------------------------------------+-------------+| Variable_name             | Value    |+---------------------------------------+-------------+| Innodb_buffer_pool_dump_status    | not started || Innodb_buffer_pool_load_status    | not started || Innodb_buffer_pool_pages_data     | 218     || Innodb_buffer_pool_bytes_data     | 3571712   || Innodb_buffer_pool_pages_dirty    | 0      || Innodb_buffer_pool_bytes_dirty    | 0      || Innodb_buffer_pool_pages_flushed   | 1      || Innodb_buffer_pool_pages_free     | 7973    || Innodb_buffer_pool_pages_misc     | 0      || Innodb_buffer_pool_pages_total    | 8191    || Innodb_buffer_pool_read_a@R_301_6882@_rnd   | 0      || Innodb_buffer_pool_read_a@R_301_6882@     | 0      || Innodb_buffer_pool_read_a@R_301_6882@_evicted | 0      || Innodb_buffer_pool_read_requests   | 1497    || Innodb_buffer_pool_reads       | 219     || Innodb_buffer_pool_wait_free     | 0      || Innodb_buffer_pool_write_requests   | 1      |+---------------------------------------+-------------+

MysqL实例这里面的英语都比较简单,就不解释了.

MysqL实例四、InnoDB实时监控

MysqL实例MysqL> show engine innodb status\G

总结

以上是内存溢出为你收集整理的MYSQL数据库MySQL优化之InnoDB优化全部内容,希望文章能够帮你解决MYSQL数据库MySQL优化之InnoDB优化所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1163354.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存