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

InnoDB的主索引是聚簇索引,索引与数据公用表空间。对于InnoDB来说,数据就是索引,索引就是数据。InnoDB缓存机制与MyISAM的最大区别在于,InnoDB不仅缓存索引,同时还会缓存数据。
一、InnoDB缓存池
InnoDB缓存池(InnoDB buffer pool)是提升InnoDB提升性能的关键,它既可以缓存数据,又可以缓存索引,甚至其他的管理数据(元数据、行级锁)等。可以使用show variables like 'innodb%pool%'; 来查看相关的参数选项。
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 | +-------------------------------------+----------------+
innodb_buffer_pool_size
innodb_buffer_pool_size是用于设置InnoDB缓存池(InnoDBBufferPool)的大小,默认值是128M.InnoDB缓存池的大小对InnoDB的整体性能影响较大,如果当前的MySQL服务器专门用作MySQL服务,那么可以尽量的增加该参数的大小。
innodb_buffer_pool_instance
innodb_buffer_pool_instance默认值是1,表示InnoDB缓存池被划分为一个区域,适当的增加该参数值,可以提升InnoDB的并发性能。
innodb_additional_mem_pool_size
指定InnoDB用于来存储数据字典和其他内部数据的缓存大小,默认值是2M.InnoDB的表个数越多,就应该适当的增加该参数的大小。
二、InnoDB缓存池内部结构
InnoDB在内存中维护一个缓存池用于缓存数据和索引。缓存池可以认为是一条很长的链表(list).该链表分为两个子链表,一个子链表存放old page数据,old page 数据是长时间未被访问的数据页,亮一个子链表存放new page,new page 是最近被访问的数据页。old page 默认占整个链表大小的37%,可以通过innodb_old_blocks_pct参数查看.
mysql> show variables like 'innodb_old_blocks%'; +------------------------+-------+ | Variable_name | Value | +------------------------+-------+ | innodb_old_blocks_pct | 37 | | innodb_old_blocks_time | 1000 | +------------------------+-------+
old page 和 new page 的交汇点称为midpoint。
当用户访问数据时,InnoDB首先会再InnoDB缓存中查找数据,如果缓存池中没有数据,InnoDB会将硬盘中的数据插入到InnoDB缓存池中,如果缓存池已满,则利用LRU算法清楚过期的老数据
三、InnoDB缓存池预热。
MySQL服务器启动一段时间后,InnoDB会将经常访问的数据(业务数据,管理数据)放入InnoDB缓存中,即InnoDB缓存池中保存的是频繁需要访问的数据(简称热数据)。当InnoDB缓存池的大小是几十G或者上百G的时候,如果重启MySQL,如果将之前InnoDB缓存池中的热数据加载到InnoDB缓存池中呢?
如果单靠InnoDB自身预热的InnoDB缓存池,将会是一个不短的时间周期,这对于业务繁忙的系统来说,长时间的挂机,是严重的生产事故,不能够容忍。幸好在MySQL5.6版本支持关闭服务时,可以将热数据保存至硬盘,MySQL重启是首先将硬盘中的热数据加载到InnoDB的缓存中去,这样可以缩短预热的时间,提高业务繁忙高并发时的效率。
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 | +-------------------------------------+----------------+
innodb_buffer_pool_dump_at_shutdown
默认是关的,如果开启参数,停止MySQL服务是,InnoDB缓存中的热数据将会保存到硬盘中。
innodb_buffer_pool_load_at_starup
默认是关闭的,如果开启该参数,启动MySQL服务时,MySQL将本地硬盘的热数据加载到InnoDB缓存池中。
innodb_buffer_pool_dump_now
默认关闭,如果开启该参数,停止MySQL服务时,以手动方式将InnoDB缓存池中的热数据保存到本地硬盘。
innodb_buffer_pool_load_now
默认关闭,如果开启该参数,启动MySQL服务时,以手动方式将本地硬盘的数据加载到InnoDB缓存池中,
innodb_buffer_pool_filename
如果开启InnoDB预热功能,停止MySQL服务是,MySQL将InnoDB缓存池中的热数据保存到数据库根目录下,默认文件名是这个参数的值。
开启InnoDB缓存后,可以使用如下命令查看当前InnoDB缓存池预热的状态信息:
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_ahead_rnd | 0 | | Innodb_buffer_pool_read_ahead | 0 | | Innodb_buffer_pool_read_ahead_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 | +---------------------------------------+-------------+
这里面的英语都比较简单,就不解释了。
四、InnoDB实时监控
mysql> show engine innodb status\G
# mysql
# innodb
# 优化
# mysql5.7
# mysql5.6
# InnoDB性能优化
# Mysql5.5 InnoDB存储引擎配置和优化
# 修改Innodb的数据页大小以优化MySQL的方法
# 关于mysql中innodb的count优化问题分享
# MySql优化之InnoDB
# 4GB内存
# 多查询的my.ini中文配置方案详解
# MySQL InnoDB MRR优化指南
# 池中
# 链表
# 盘中
# 加载
# 就会
# 将会
# 默认值
# 长时间
# 可以使用
# 重启
# 会将
# 的是
# 都是
# 客户端
# 是一个
# 也不
# 就不
# 说了
# 还会
# 不多
相关文章:
,想在网上投简历,哪几个网站比较好?
企业微网站怎么做,公司网站和公众号有什么区别?
网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?
制作销售网站教学视频,销售网站有哪些?
建站主机系统SEO优化与智能配置核心关键词操作指南
学校为何禁止电信移动建设网站?
教学论文网站制作软件有哪些,写论文用什么软件
?
如何在七牛云存储上搭建网站并设置自定义域名?
宝塔面板如何快速创建新站点?
如何在腾讯云免费申请建站?
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
建站之星导航配置指南:自助建站与SEO优化全解析
如何正确下载安装西数主机建站助手?
开源网站制作软件,开源网站什么意思?
教学网站制作软件,学习*后期制作的网站有哪些?
高端企业智能建站程序:SEO优化与响应式模板定制开发
公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?
如何确认建站备案号应放置的具体位置?
如何零成本快速生成个人自助网站?
兔展官网 在线制作,怎样制作微信请帖?
手机网站制作与建设方案,手机网站如何建设?
寿县云建站:智能SEO优化与多行业模板快速上线指南
如何用已有域名快速搭建网站?
在线制作视频的网站有哪些,电脑如何制作视频短片?
建站之星北京办公室:智能建站系统与小程序生成方案解析
建站主机数据库如何配置才能提升网站性能?
Python文件管理规范_工程实践说明【指导】
ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?
网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?
制作网站哪家好,cc、.co、.cm哪个域名更适合做网站?
网站制作软件有哪些,制图软件有哪些?
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
网页设计与网站制作内容,怎样注册网站?
如何确保西部建站助手FTP传输的安全性?
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
大同网页,大同瑞慈医院官网?
黑客入侵网站服务器的常见手法有哪些?
如何用y主机助手快速搭建网站?
武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
公司网站制作费用多少,为公司建立一个网站需要哪些费用?
网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
宝塔Windows建站如何避免显示默认IIS页面?
电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?
北京制作网站的公司,北京铁路集团官方网站?
网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?
小说建站VPS选用指南:性能对比、配置优化与建站方案解析
b2c电商网站制作流程,b2c水平综合的电商平台?
较简单的网站制作软件有哪些,手机版网页制作用什么软件?
*请认真填写需求信息,我们会在24小时内与您取得联系。