2

MySQL基础篇--innodb内存逻辑

 1 year ago
source link: https://blog.51cto.com/u_13874232/5801356
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

MySQL基础篇--innodb内存逻辑

精选 原创

进击的CJR 2022-10-27 15:19:52 博主文章分类:MySQL ©著作权

文章标签 数据 链表 数据库 文章分类 MySQL 数据库 yyds干货盘点 阅读数185

FREE链表

FREE链表就是存放没有被使用的数据块的链表,当数据缓存到内存中的时候, 就从FREE链表优先获取空快来缓存数据。如果FREE使用完,就从LRU链表利用LRU算法 淘汰旧的数据。

LRU链表

缓存数据的链表,利用LRU算法来淘汰旧的数据,保证我们的内存中始终是经常被访问到的数据 。

LRU:最近最少使用算法,最近不经常被使用的数据会被放到链表的一端(冷数据 冷端),经常被访问的数据 被放到另一端(热数据 热端)。

LRU链表存在脏块的:已经被修改(内存),但是没有落盘的数据。

innodb_max_dirty_pages_pct

脏块写入磁盘,刷脏 innodb_max_dirty_pages_pct 默认75% LRU内的脏块如果超过75%,强制性的刷脏。 如果不确定,使用默认值就可以了。 如果业务有大量数据写入,而且不会频繁的访问或者修改(数据不活跃),可以考虑调低一些。 如果业务数据比较活跃,可以调高一些默认值。

innodb_old_blocks_pct

确定modpoint位置, 默认37, modpoint指新读取到的⻚放入LRU(最近最少使⽤算法) 列表中的位置。

innodb_old_blocks_time

表示页读入mid位置后需要等待多久才会被加入到LRU列表的热端。

FLUSH链表

刷脏链表,脏块被写入硬盘,先载入flush链表,然后由flush链表进行刷脏。

​Innodb buffer pool数据预热

数据库被频繁访问到,热点数据都被加载到内存,提高访问效率,数据库重启, 数据库内热点数据已经消失,需要业务再次反问的时候,再从硬盘调入到内存,在数据库的一段时时间内 访问效率比较低。

innodb_buffer_pool_dump_at_shutdown = 1

在关闭数据库得的时候,持久化热数据到硬盘

innodb_buffer_pool_load_at_startup = 1

在开启数据库的时候,把数据从硬盘直接载入到内存

innodb_buffer_pool_dump_pct = 40

选择热数据关闭数据库持久化到硬盘的百分比 ib_buffer_pool文件,就持久化innodb热数据的文件

innodb_flush_neighbors

刷新邻接页:合并IO请求,减少随机IO 默认是开的, 这个⼀定要开着,充分利⽤顺序IO去写数据

  • 收藏
  • 评论
  • 分享
  • 举报

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK