文章来源: 学习通http://www.bdgxy.com/

普学网http://www.boxinghulanban.cn/

智学网http://www.jaxp.net/

目录
  • 1、innodb_buffer_pool_size
  • 2、innodb_log_buffer_size
    • 1、查看
    • 2、在配置文件中写上相关的参数,开启统计,以memory/innodb/row_log_buf为例,配置文件修改的如下:
    • 3、启动实例,并在performance_schema数据库的memory_summary_global_by_event_name表中查看内存统计结果。

在MySQL8.0在启动的时候,会配置各种各样的buffer和cache来提高数据库的性能。如果我们在一台服务器上配置了MySQL8.0的服务,那么这台服务器的内存会同时被操作系统、MySQL8.0服务、以及其他应用程序所共享。

生产环境中,经常会遇到内存的报警,在处理这些报警之前,你需要知道MySQL本身消耗内存最多的点在哪里,这样才能比较直观的判断出来你的MySQL服务占用的内存有多少,以及如何降低MySQL本身的内存消耗。

在MySQL配置文件中,最常用的两个内存相关的参数是innodb_buffer_pool_size、innodb_log_buffer_size,我们来看这两个参数。

1、innodb_buffer_pool_size

这个参数定义了buffer pool的大小,大家可能都比较熟悉,buffer pool中的内容包含innodb 表、索引、以及其他的辅助buffer,buffer pool的大小对MySQL系统性能影响比较大,默认情况下,MySQL8.0配置的buffer pool大小是128MB,通常情况下,如果是单机单实例,没有其他业务,那么MySQL官方建议配置的大小为系统内存的50%到75%之间。当然,如果你的服务器上还部署了其他的应用程序,那么你需要酌情减小这个比例,从而腾出内存。

如果你的操作系统的内存很充裕,你可以设置多个innodb buffer pool实例,可以使用下面的参数来调整这个实例的个数:

mysql> show variables like '%innodb_buffer_pool_instances%';
+------------------------------+-------+
| Variable_name    | Value |
+------------------------------+-------+
| innodb_buffer_pool_instances | 1  |
+------------------------------+-------+
1 row in set (0.00 sec)

2、innodb_log_buffer_size

这个参数定义了innodb存储引擎向磁盘上写redo log之前,最多在内存中缓存数据的大小,默认是16MB。这个值增加之后,大的事务可以不用在事务提交之前将redo log落盘。如果你的update、delete和insert操作影响行数比较多,那么你需要考虑增大这个值。

重点来了:

在操作系统里面,MySQL占用的内存不仅仅是上述两个内存配置参数有关,通常情况下,我们计算MySQL占用的内存的时候,会使用下面4个值相加的方式:

1、innodb_buffer_pool_size

2、key_buffer_size  (这个参数通常是myisam表占用内存的关键参数)

3、max_connections*(sort_buffer_size+read_buffer_size+binlog_cache_size) (这三个是连接级别的buffer)

4、max_connections*2MB

所以当你使用top命令看到你的MySQL占用的内存远远超过innodb_buffer_pool_size的时候,你需要考虑的另外一个关键因素是连接数是否超标了,一旦连接数过高,那么上述3、4这两部分消耗的内存将会非常多。

当然,上面列举的,是MySQL最主要占用内存的几个因素,除此之外,其他的内存消耗的地方,可以查看官方文档:

https://dev.mysql.com/doc/refman/8.0/en/memory-use.html

上述文档中,还有介绍我们如何使用performance_schema来监控MySQL的内存使用,这里我提一下整个流程,详细的细节以及参数介绍请参看官方文档。

1、查看

performance_schema.setup_instruments

这张表,找到你关注的内存变量的名称(直接搜索,结果有490多条,分为好几个大类,一定记得过滤自己关注的参数)。举个例子,我们搜索memory/innodb相关参数,代表innodb存储引擎占用的内存,结果如下:

mysql> SELECT * FROM performance_schema.setup_instruments  WHERE NAME LIKE '%memory/innodb%';
+-------------------------------------------+---------+-------+-------------------+------------+---------------+
| NAME          | ENABLED | TIMED | PROPERTIES  | VOLATILITY | DOCUMENTATION |
+-------------------------------------------+---------+-------+-------------------+------------+---------------+
| memory/innodb/adaptive hash index   | YES  | NULL |     |   0 | NULL   |
| memory/innodb/log and page archiver  | YES  | NULL |     |   0 | NULL   |
| memory/innodb/buf_buf_pool    | YES  | NULL | global_statistics |   0 | NULL   |
| memory/innodb/buf_stat_per_index_t  | YES  | NULL |     |   0 | NULL   |
| memory/innodb/clone      | YES  | NULL |     |   0 | NULL   |
| memory/innodb/dict_stats_bg_recalc_pool_t | YES  | NULL |     |   0 | NULL   |
| memory/innodb/dict_stats_index_map_t  | YES  | NULL |     |   0 | NULL   |
| memory/innodb/dict_stats_n_diff_on_level | YES  | NULL |     |   0 | NULL   |
| memory/innodb/other      | YES  | NULL |     |   0 | NULL   |
| memory/innodb/partitioning    | YES  | NULL |     |   0 | NULL   |
| memory/innodb/row_log_buf     | YES  | NULL |     |   0 | NULL   |
| memory/innodb/row_merge_sort    | YES  | NULL |     |   0 | NULL   |
| memory/innodb/std       | YES  | NULL |     |   0 | NULL   |
| memory/innodb/trx_sys_t::rw_trx_ids  | YES  | NULL |     |   0 | NULL   |
| memory/innodb/undo::Tablespaces   | YES  | NULL |     |   0 | NULL   |
| memory/innodb/ut_lock_free_hash_t   | YES  | NULL |     |   0 | NULL   |
| memory/innodb/api0api      | YES  | NULL |     |   0 | NULL   |
| memory/innodb/api0misc     | YES  | NULL |     |   0 | NULL   |
| memory/innodb/btr0btr      | YES  | NULL |     |   0 | NULL   |

2、在配置文件中写上相关的参数,开启统计,以memory/innodb/row_log_buf为例,配置文件修改的如下:

performance-schema-instrument='memory/innodb/row_log_buf=COUNTED'

3、启动实例,并在performance_schema数据库的memory_summary_global_by_event_name表中查看内存统计结果。

SELECT * FROM performance_schema.memory_summary_global_by_event_name WHERE EVENT_NAME LIKE 'memory/innodb/row_log_buf'\G

当然,你还可以根据sys表中的结果,查看每个大类的聚合结果,如下:

mysql> SELECT SUBSTRING_INDEX(event_name,'/',2) AScode_area, FORMAT_BYTES(SUM(current_alloc))AS current_allocFROM sys.x$memory_global_by_current_bytesGROUP BY SUBSTRING_INDEX(event_name,'/',2)ORDER BY SUM(current_alloc) DESC;
+---------------------------+---------------+
| code_area     | current_alloc |
+---------------------------+---------------+
| memory/innodb    | 843.24 MiB |
| memory/performance_schema | 81.29 MiB  |
| memory/mysys    | 8.20 MiB  |
| memory/sql    | 2.47 MiB  |
| memory/memory    | 174.01 KiB |
| memory/myisam    | 46.53 KiB  |
| memory/blackhole   | 512 bytes  |
| memory/federated   | 512 bytes  |
| memory/csv    | 512 bytes  |
| memory/vio    | 496 bytes  |
+---------------------------+---------------+

更详细的信息,请参见官方文档。

以上就是详解分析MySQL8.0的内存消耗的详细内容,更多关于MySQL8.0 内存消耗的资料请关注菜鸟教程https://www.piaodoo.com/其它相关文章!

详解分析MySQL8.0的内存消耗相关推荐

  1. 【图文详解】Mysql8.0安装教程

    双击.msi安装运行程序 勾选[I accept the license terms],点击[Next] 选择[Custom],点击[Next] 点击"+"依次展开[MySQL S ...

  2. 源码详解Android 9.0(P) 系统启动流程之SystemServer

    源码详解Android 9.0(P) 系统启动流程目录: 源码详解Android 9.0(P)系统启动流程之init进程(第一阶段) 源码详解Android 9.0(P)系统启动流程之init进程(第 ...

  3. java线程的生命周期及wait(),notify(),notifyAll()的详解分析

    1.java线程的生命周期     线程是一个动态执行的过程,它也有一个从产生到死亡的过程. (1)生命周期的五种状态 新建(new Thread)     当创建Thread类的一个实例(对象)时, ...

  4. c语言菜单选择如何用字符形式,【创客天地】计算机二级C语言、VB考试详解分析...

    原标题:[创客天地]计算机二级C语言.VB考试详解分析 01 马上就要迎来计算机二级考试了,你准备好了吗?今天助手君准备了一点C语言干货,希望对即将考试的你有所帮助.(上期刚刚推了office,有需要 ...

  5. Pixhawk(PX4)之驱动详解篇(0)_前期准备(招贤令)

    Pixhawk(PX4)之驱动详解篇(0)_前期准备(招贤令) 原创 2017年03月01日 22:58:39 标签: 开发人员 / UAV / 软件 / 硬件 一.开篇 开源精神常在!!! 谁说软件 ...

  6. php java集成_PHP和Java 集成开发详解分析 强强联合第1/4页

    PHP和Java 集成开发详解分析 强强联合第1/4页 更新时间:2008年11月14日 12:28:23   作者: 很久以前,有人从www上看到看到天空上一个很亮的亮点,它就是Java语言,与此同 ...

  7. SOME/IP协议详解「2.0·服务化通信概述」

    SOME/IP协议详解「2.0·服务化通信概述」 点击返回雪云飞星的SOME/IP协议详解「总目录」 SOME/IP协议详解「2.0·服务化通信概述」 1 SOME/IP服务的组成 2 Method| ...

  8. 详解JPA 2.0动态查询机制:Criteria API

    转载自详解JPA 2.0动态查询机制:Criteria API-51CTO.若有侵权,请留言删除. 自从 JPA 于 2006 年首次被引入之后,它就得到了 Java 开发社区的广泛支持.该规范的下一 ...

  9. 详解JPA 2.0动态查询机制:Criteria API(2)

    详解JPA 2.0动态查询机制:Criteria API(2) 2009-11-13 09:24 Pinaki Poddar IBMDW 字号:T | T JPA 2.0引入了 Criteria AP ...

最新文章

  1. 人民广场怎么走? 地铁换乘算法的实现 MikeTech | MikeTech
  2. 微信语音怎么转发给别人听_微信语音怎么转发出去?这个小技巧超级好用
  3. WSL2——Linux C中进程相关操作编程问题
  4. 解决 Tomcat 下 getInitParameter 返回 null
  5. picturectrl控件中加载图片并显示_在 CRA 中使用 webp 图片提升加载性能
  6. 每天学点Linux命令:倒叙打印文件第二行的前100个大写字母
  7. 研发管理:产品研发团队的早会
  8. php读这文件速度,php 测试硬盘读写-php 测试硬盘写速率
  9. UltraEdit的高亮【原创】
  10. 6491: Daydream
  11. arcgis重心迁移分析_【停课不停研ArcGIS制图微教程系列】土地利用分布图的制作——以温州市为例...
  12. 九、面向对象三大特征(三)—— 多态
  13. Delphi Xe Web开发之 unigui入门视频教程
  14. 使用SVN将项目从服务器下载到本地
  15. adobe flash builder4.6 安装存在问题,可能未安装某些必需组件
  16. 医院信息管理系统有哪些功能?
  17. mp c2011sp文件服务器,理光Ricoh MP C2011SP驱动
  18. 李阳疯狂英语学习方法大全集-英语,单词
  19. python爬取b站弹幕分析_B站直播弹幕获取 - 用python写一个B站弹幕姬吧
  20. jQuery停止动画——stop()方法的使用

热门文章

  1. 行车记录仪效果由=方案(主控芯片)+镜头+图像传感器
  2. matlab 龙格现象,利用MATLAB分析数值积分中的龙格(Runge)现象(1)
  3. 低成本、云边端、软硬件一体化智能视频监控解决方案
  4. 泡妞技术帖:一物降一物 金庸爷爷教你如何谈恋爱
  5. 【毕业设计】基于stm32的便携用电功率统计系统 -物联网 嵌入式 单片机
  6. 计算机中的数学【阿贝尔-鲁菲尼定理】五次方程的根
  7. 国内有哪些可用的云平台?
  8. commvault备份mysql数据库_CommVault备份项目实施方案.docx
  9. Java项目:SSM在线二手图书交易商城网站平台
  10. python使用matplotlib画图时在指定位置加上文字