MySQL 内存监控
上一篇blog介绍了因为sql查询information_schema表而导致内存暴涨的case。
今天顺便做了一个thd内存的监控:
先来介绍下MySQL的内存:
1. 线程内内存:thd->mem_root, 线程在执行sql的过程中,申请的内存从thd->mem_root进行分配,在sql结束的时候释放。
2. 线程外内存:对象专有的mem_root; 比如,table, table_share,st_transactions等都有专有的mem_root。
所以: 对于sql引起的内存暴涨,可以监控thd->mem_root的变化情况。 但对于其它,比如创建的临时表等,需要另外监控。
在sql/sql_show.cc show processlist调用的函数中添加一个thd_size字段。
最终的结果如下:

变量加锁的问题:
1. thd_size的累计在线程内进行累计,所以thd_size的增加和减少不需要使用mutex来进行保护。
2. show processlist读的问题:
因为show processlist命令的线程和thd线程非同一个线程,所以,如果要保证绝对一致,需要使用mutex,这样的话,thd_size 的变化也要加mutex。
而对于内存分配这种,mutex太重,所以加mutex并不合适,性能开销比较大。
所以这里选择了不加锁的模式:
1. 不需要保证thd_size的实时一致。
2. 但需要保证thd_size内部一致。
什么是内部一致性?
比如:thd_size是long long型变量,在x86-64位的机器上,一共占用64位, 如果出现更改了前4个字节,在更改后4个字节的情况下,读出了数据,那这就是内部不一致。
背景:
在x86-64位的机器上,相比较32位多出了8个64bit的通用寄存器,而基本的mov指令也可以支持64bit的操作,所以从机器的指令上保证了c 基本数据类型的内部一致性。但这里读是单指令操作,对于写,仍然是多指令操作:mov+add+mov。
结论:
对于c 的基本数据类型,在不严格的情况下,比如上面的这种情况,读一致性要求不高,而写又不存在并发的情况下,可以不使用mutex进行保护。
MySQL 内存监控的更多相关文章
- MySQL -- 内存使用监控详解
问题: 1.我们怎么确定MySQL的各个部分分别使用了多少内存? 2.当有MySQL由于内存泄露引起OOM时.我们怎么提前发现? 怎么监控MySQL内存使用: 答案是通过performance_sch ...
- mysql服务器监控参数总结
1)主机健康监控:网络通信.软硬件错误.磁盘空间.内存使用 2)mysql健康监控: 服务端口(telnet尝试连接).mysqld和mysqld_safe进程.errorlog和复制状态 3)主机性 ...
- 论MySQL的监控和调优
懂PHP的人一般都懂MySQL这一点不假,大多数书籍里也是这样,书中前面讲PHP后面到数据库这块就会讲到MySQL的一些知识,前几年MySQL一直是PHP书籍的一部分,后来开始从国外翻译了一些专门讲述 ...
- MySQL 性能监控 4 大指标
[编者按]本文作者为 John Matson,主要介绍 mysql 性能监控应该关注的 4 大指标. 文章系国内 ITOM 管理平台 OneAPM 编译呈现. MySQL 是什么? MySQL ...
- 用python 10min手写一个简易的实时内存监控系统
简易的内存监控系统 本文需要有一定的python和前端基础,如果没基础的,请关注我后续的基础教程系列博客 文章github源地址,还可以看到具体的代码,喜欢请在原链接右上角加个star 腾讯视频链接 ...
- [转]用python 10min手写一个简易的实时内存监控系统
简易的内存监控系统 本文需要有一定的python和前端基础,如果没基础的,请关注我后续的基础教程系列博客 文章github源地址,还可以看到具体的代码,喜欢请在原链接右上角加个star 腾讯视频链接 ...
- MySQL内存使用查看方式
使用版本:MySQL 5.7 官方文档 在performance_schema有如下表记录内存使用情况 mysql> show tables like '%memory%summary%'; + ...
- MySQL 性能监控4大指标——第二部分
[编者按]本文作者为 John Matson,主要介绍 mysql 性能监控应该关注的4大指标. 第一部分介绍了前两个指标:查询吞吐量与查询执行性能.本文将继续介绍另两个指标:MySQL 连接与缓冲池 ...
- MySQL 性能监控4大指标——第一部分
[编者按]本文作者为 John Matson,主要介绍 mysql 性能监控应该关注的4大指标. 第一部分将详细介绍前两个指标: 查询吞吐量与查询执行性能.文章系国内 ITOM 管理平台 OneAPM ...
随机推荐
- OpenJudge/Poj 1226 Substrings
1.链接地址: http://bailian.openjudge.cn/practice/1226/ http://poj.org/problem?id=1226 2.题目: 总时间限制: 1000m ...
- VMware10.0.4下 CentOS 6.5 cmake安装 MySQL 5.5.32
一.准备工作 1.1.创建 zhuzz/tools目录 [root@localhost ~]# mkdir -p /home/zhuzz/tools [root@localhost ~]# cd /h ...
- mirantis fuel puppet执行顺序 和 对整个项目代码的执行流程理解
stage执行顺序 stage {'zero': } -> stage {'first': } -> stage {'openstack-custom-repo': } -> sta ...
- C语言中的指针学习(小黑板)
指针是C语言中的精华所在,也是C语言的危险之在,今天又重现温习了一下C语言,做了一下总结. 欢迎批阅. (1)指针的含义指针的本质也是数据类型,它是指向地址的变量.例如: { int a = 10; ...
- 查看uCOS-II的CPU使用率
代码模板: void main(void) { OSInit(); /* 安装uCOS-II的任务切换向量 */ /* 创建用户起始任务TaskStart */ OSStart(); } void T ...
- ms-grid layout
<!DOCTYPE html> <html> <head> <title></title> <script src="js/ ...
- 常用javascript代码片段集锦
常用方法的封装 根据类名获取DOM元素 var $$ = function (className, element) { if (document.getElementsByClassName) { ...
- Python编程规范及性能优化(转载)
转载地址:http://codeweblog.com/python编程规范及性能优化/
- SanDisk SecureAccess™ Software
买了一个sandisk 的u盘,配套软件有空可以研究一下. QuickStartGuide_SanDiskSecureAccessV2.0.pdf http://www.sandisk.com/pro ...
- [cc150] 硬币问题
Given an infinite number of quarters (25 cents), dimes (10 cents), nickels (5 cents) and pennies (1 ...