我的编程空间,编程开发者的网络收藏夹
学习永远不晚

第07问:innodb_buffer_pool_instances 是如何影响性能的?

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

第07问:innodb_buffer_pool_instances 是如何影响性能的?

第07问:innodb_buffer_pool_instances 是如何影响性能的?

问题:

我们都知道 innodb_buffer_pool_instances 参数,将 buffer pool 分成几个区,每个区用独立的锁保护,这样就减少了访问 buffer pool 时需要上锁的粒度,以提高性能。 那么我们如何观察它是如何影响性能呢?

实验:

准备一个空数据库,

在这里我们将 performance_schema_events_waits_history_long_size 调大,是为了让之后实验数据能采集的更多,在此不多做介绍。使用 sysbench,准备一些数据,

对数据进行预热 60s,可以看到预热期间的性能会不太稳定,预热后会比较稳定,

设置 performance_schema,这次我们将仅开启观察项(生产者)hash_table_locks,并开启 waits 相关收集端(消费者)。(相关介绍参看 实验 03

小贴士 为什么我们知道观察项应该选择 hash_table_locks?在 performance_schema.setup_instruments 表中,列出了所有观察项,但我们很难从中选出我们应观察哪个观察项。这时候,可以将所有观察项都启用,然后设计一些对比实验,比如使用几种不同的 SQL,观察这些操作影响了哪些观察项,找到共性或者区。还有一种高效的方式是搜索别人的经验,或者阅读 MySQL 源码。本例中 hash_table_locks 隐藏的比较深,使用了阅读 MySQL 源码和对比试验结合的方法。

由于 MySQL 有一些后台进程会使用 buffer pool,比如刷盘线程,会影响我们的观察,所以需要将 MySQL 的后台线程排除在外。

万事就绪,再运行一次 sysbench 压力。运行前记得将已有的观察结果清除:

运行 sysbench 压力,持续60秒,

等待压力结束后,对 performance_schema 中记录的数据进行分析。

确实采集了 100 万条对 hash_table_locks 的观测数据。我们取其操作时长的平均值,90% 分位数,99% 分位数:

整理到如下表格,但我们先忽略其时间单位,放到最后讨论,

我们按照如上方法,分别再测试 innodb_buffer_pool_instances 为 2 和 4 的情况(记得多测几次,取平均值会更为准确,本实验由于偷懒,只测预热后的一次结果)。表格更新为:

可以看到如下结:

  1. 平均值都在 99% 分位数以上,意味着有极大的数据严重影响的平均值(有几次对 buffer pool 锁的获取,等待了非常久)。
  2. 随着 innodb_buffer_pool_instances 增大,这种严重的影响会逐渐减小。
  3. 在实验的场景中,innodb_buffer_pool_instances 的增大,对 90% 和 99% 分位数影响都不大,即不会影响到大部分 SQL 对 buffer pool 锁的获取时间。

重要说明:

  1. 本实验以介绍实验手法为目的,实验的结论不可作为参考。
  2. 如果大家多做几次实验,会发现在同一个配置下,平均值的变化很大,也就是说那几次非常久的等待时间非常不稳定,受到其他因素影响。
  3. 如果更换数据压力或者更换测试环境,会看到不同的现象。

我们再来看看这些时间的单位是什么?

可以看到 wait 一族的观察项,单位是 cycle,那么 cycle 又是多少秒?

可以看到,1 cycle = 1/2387771144 秒。我们重新看一下 innodb_buffer_pool_instances=1 时,获取 buffer pool 锁的平均时间是 6535546 cycle,大约是 2.7 ms。

7 ms,还是比较长的一段时间(我的虚拟机配置比较一般)。

结论:

本次实验介绍了对 innodb_buffer_pool_instances 参数对性能影响的观测手法,大家可以在进行压力测试时,使用此方法观察 innodb_buffer_pool_instances 的取值对性能的影响,从而决定应该取值多少。

参数设置一直是个平衡问题,innodb_buffer_pool_instances 设置太小,锁冲突集中;设置太大,维护成本升高。

再次强调,本次实验仅介绍手法,结果不足取信。不同压力,不同 buffer pool 配置,不同环境会呈现效果,唯有手法是可以传承的。

按照正常实验的规则,95% 分位数以上的极值可看作是实验误差,但对于本次实验中的极大值进行进一步分析后,我们认为可以用于说明实验效果。


关于 MySQL 的技术内容,你们还有什么想知道的吗?赶紧留言告诉小编吧!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

第07问:innodb_buffer_pool_instances 是如何影响性能的?

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

第07问:innodb_buffer_pool_instances 是如何影响性能的?

问题:我们都知道 innodb_buffer_pool_instances 参数,将 buffer pool 分成几个区,每个区用独立的锁保护,这样就减少了访问 buffer pool 时需要上锁的粒度,以提高性能。那么我们如何观察它是如何影响性能呢?实验:准
第07问:innodb_buffer_pool_instances 是如何影响性能的?
2015-12-30

Golang的gc如何影响程序性能

Golang的gc如何影响程序性能Golang作为一种现代化的编程语言,具有出色的性能和高效的并发能力,其中的垃圾回收机制(Garbage Collection,GC)是其独特之处之一。垃圾回收是一种自动化的内存管理机制,用于检测和清理不
Golang的gc如何影响程序性能
2024-03-06

影响Java EE性能的十大问题分别是什么

影响Java EE性能的十大问题分别是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。下面将和大家分享一下常见的10个影响Java EE性能问题。1.缺乏正确
2023-06-17

HBase的表结构变更如何影响性能

HBase的表结构变更可能会对性能产生显著影响,具体取决于变更的类型和规模。以下是一些关于HBase表结构变更对性能影响的信息:表结构变更对性能的影响数据分布和负载均衡:表结构的变更可能会影响数据的分布,导致数据在RegionServer
HBase的表结构变更如何影响性能
2024-10-19

Golang泛型对函数性能的影响如何?

泛型对函数性能的影响如下:类型推断可通过消除显式类型转换来提高性能。反射机制会增加运行时开销,可能影响性能。实际性能影响取决于具体情况,需要权衡性能和代码可重用性的好处。Go 泛型对函数性能的影响Go 1.18 引入了泛型,这极大地提高了
Golang泛型对函数性能的影响如何?
2024-04-17

算法选择如何影响C++程序的性能?

算法选择会影响 c++++ 程序的性能。常见算法有排序算法、搜索算法和数据结构。影响因素包括数据规模、分布和操作类型。实战案例显示,针对不同场景,哈希查找、二分搜索和线性搜索的性能表现不一。了解算法特性有助于选择最适合任务的算法,从而提高程
算法选择如何影响C++程序的性能?
2024-05-09

C++ 函数异常处理的性能影响如何?

c++++ 异常处理会带来额外的开销,包括内存分配、函数调用展开和查找匹配的 catch 子句。这些开销可能导致缓存未命中,从而影响性能。要减轻这些影响,建议限制异常使用、使用 noexcept 规范和考虑使用错误代码。C++ 函数异常处理
C++ 函数异常处理的性能影响如何?
2024-04-15

内存管理如何影响C++程序的性能?

在 c++++ 中,内存管理通过堆和栈影响程序性能。在堆上分配内存比栈上慢,应尽可能在栈上分配变量。内存泄漏会降低性能,应使用 raii、智能指针和内存分析工具来管理内存。内存管理如何影响 C++ 程序的性能在 C++ 中,内存管理对程序
内存管理如何影响C++程序的性能?
2024-05-08

PHP 函数的安全性如何影响应用程序的性能?

php 安全函数影响应用程序性能,因为它们增加了开销:输入验证需要 cpu 和内存资源。加密要求大量计算。会话管理需要额外的开销。优化建议包括:仅在必要时使用安全函数。尽量减少字符串和数组的处理。使用缓存和第三方库。例如,输入验证可以显著增
PHP 函数的安全性如何影响应用程序的性能?
2024-04-24

编程热搜

目录