返回顶部
首页 > 资讯 > 数据库 >innodb新特性之怎么使用buffer pool动态调整大小
  • 798
分享到

innodb新特性之怎么使用buffer pool动态调整大小

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

这篇文章主要介绍“innodb新特性之怎么使用buffer pool动态调整大小”,在日常操作中,相信很多人在innodb新特性之怎么使用buffer pool动态调整大小问题上存在疑惑,小编查阅了各式资料

这篇文章主要介绍“innodb新特性之怎么使用buffer pool动态调整大小”,在日常操作中,相信很多人在innodb新特性之怎么使用buffer pool动态调整大小问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”innodb新特性之怎么使用buffer pool动态调整大小”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

5.7 开始支持buffer pool 动态调整大小,每个buffer_pool_instance都由同样个数的chunk组成(chunks数组), 每个chunk内存大小为innodb_buffer_pool_chunk_size(实际会偏大5%,用于存放chuck中的block信息)。buffer pool以innodb_buffer_pool_chunk_size为单位进行动态增大和缩小。调整前后innodb_buffer_pool_size应一直保持是innodb_buffer_pool_chunk_size*innodb_buffer_pool_instances的倍数。

同样的buffer pool动态调整大小由后台线程buf_resize_thread,set命令会立即返回。通过InnoDB_buffer_pool_resize_status可以查看调整的运行状态。

  • resize流程

    • 如果开启了AHI,需禁用AHI

    • 如果是收缩内存

    • 开始resize

    • 如果禁用了AHI,此时开启

    1. 住所有instance的buffer_pool,page_hash

    2. 收缩pool:以chunk为单位释放要收缩的内存

    3. 清空withdraw列表buf_pool->withdraw

    4. 增大pool:分配新的chunk

    5. 重新分配buf_pool->chunks

    6. 如果改变/缩小超过2倍,会重置page hash,改变桶大小

    7. 释放buffer_pool,page_hash锁

    8. 如果改变/缩小超过2倍,会重启和buffer pool大小相关的内存结构,如锁系统(lock_sys_resize),AHI(btr_search_sys_resize), 数据字段(dict_resize)等

    1. 计算需收缩的chunk数, 从chunks开始尾部删除指定个数的chunk.

    2. 锁buf_pool

    3. 从free_list中摘除待删chunk的page放入待删链表buf_pool->withdraw

    4. 如果待删chunk的page为脏页,则刷脏

    5. 重新加载LRU中要删除的页,从LRU中摘除,重新从free列表获取page老的page放入待删链表buf_pool->withdraw

    6. 释放buffer pool锁

    7. 如果需收缩的chunk pages没有收集全,重复2-6

由上可以看出,扩大内存比缩小内存相对容易些。缩小内存时,如果遇到有事务一直未提交且占用了待收缩的page时,导致收缩一直重试,error log会打印这种重试信息, 包含可能引用此问题的事务信息。为了避免频繁重试,每次重试的时间间隔会指数增长。

以上步骤中resize阶段buffer pool会不可用,此阶段会锁所有buffer pool, 但此阶段都是内存操作,时间比较短。收缩内存阶段耗时可能会很长,也有一定影响,但是每次都是以instance为单位进行锁定的。 总的来说,buffer pool 动态调整大小对应用的影响并不大。

  • 重新加载LRU中要删除的页的影响

    search 过程中btr游标保存的page可能重新加载过,自适应哈希保存的root page也可能重新加载过, 都需要重新读取。

到此,关于“innodb新特性之怎么使用buffer pool动态调整大小”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

您可能感兴趣的文档:

--结束END--

本文标题: innodb新特性之怎么使用buffer pool动态调整大小

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

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

猜你喜欢
  • innodb新特性之怎么使用buffer pool动态调整大小
    这篇文章主要介绍“innodb新特性之怎么使用buffer pool动态调整大小”,在日常操作中,相信很多人在innodb新特性之怎么使用buffer pool动态调整大小问题上存在疑惑,小编查阅了各式资料...
    99+
    2024-04-02
  • Go1.18新特性之泛型怎么使用
    本篇内容主要讲解“Go1.18新特性之泛型怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Go1.18新特性之泛型怎么使用”吧!01 Go中的泛型是什么众所周知,Go是一门静态类型的语言。...
    99+
    2023-06-30
  • 怎么使用Spring特性实现接口多类的动态调用
    今天小编给大家分享一下怎么使用Spring特性实现接口多类的动态调用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。正好用到。...
    99+
    2023-06-29
  • 怎么使用CSS动态调整旋转半径
    这篇文章将为大家详细讲解有关怎么使用CSS动态调整旋转半径,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。代码:<!DOCTYPE HTML> <...
    99+
    2024-04-02
  • CSS动画新特性@scroll-timeline怎么使用
    这篇文章主要介绍“CSS动画新特性@scroll-timeline怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“CSS动画新特性@scroll-timeli...
    99+
    2024-04-02
  • 怎么在Linux中使用gThumb批量调整图片大小
    这篇文章将为大家详细讲解有关怎么在Linux中使用gThumb批量调整图片大小,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。如何在  Linux 桌面系统中使用 gThumb 软件来批量调整图片...
    99+
    2023-06-16
  • 怎么用CSS自动调整图像大小以适合DIV容器
    这篇文章给大家分享的是有关怎么用CSS自动调整图像大小以适合DIV容器的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 答案:使用CSSmax-width属性 您可以简单地使用...
    99+
    2024-04-02
  • 怎么在微信小程序中使用ECharts实现动态刷新
    怎么在微信小程序中使用ECharts实现动态刷新?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。方法实例首先到ECharts官网下载它的例子,然后把ec-canvas文件拷贝...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作