前面两章,我们分析了Linux内存分配的策略以及Linux通过使用 OOM_Killer的机制解决了“超售”引起的风险,MySQL同其他的应用程序一样,在操作系统允许的范围内也是可以超售的,一般人理解,Innodb_buffer_pool必须小于实际物理内存,否则MySQL会启动失败。其实这是一个误区,这个不是MySQL层控制的,这个是操作系统(OS)层控制的,就是前面提到的/proc/sys/overcommit_memory控制OS是否允许“超售”。如果允许“超售”,则Innodb_buffer_pool可以远远超过实际的内存空间大小,但是这部分空间是没有使用的。我们可以做个小实验,见下图:

MySQL的Innodb_buffer_pool开了5G,但实际内存只有3G。

讲了这么多,现在言归正传,回到我们最早提到的RDS实例被OS Kill掉的问题上来,前面我们也提到了,一旦实例可用内存不足,MySQL一般都会成为OOM_Killer的首选目标。这里就涉及到两个问题:

1.为什么会内存不足?

2.如何让MySQL摆脱被Kill的厄运?

首先我们来看一下第一个问题。内存不足这个问题产生原因很多,但是主要就两个方面,第一个是MySQL自身内存的规划有问题。第二个就是一般部署MySQL的服务器,都会部署很多的监控或者定时任务脚本,而这些脚本往往缺少必要的内存限制,导致在高峰期的时候占用大量的内存,导致触发Linux OOM_Killer机制,MySQL就无辜牺牲了。

那如何才能让MySQL摆脱被Kill的厄运呢? MySQL被Kill的根源在于Linux超售的内存分配机制,前面也提到了,只要存在这种超售的机制,就不可能完全避免某一个应用程序被Kill的风险。那要使得MySQL一定不会被Kill掉,只能禁止操作系统超出实际内存空间的分配内存。但是前面我们也提过,对于部署了MySQL的服务器,我们不建议这么做,因为MySQL的很多内存都是刚开始申请了,并不是立即使用的,OS一旦禁止超售,这不仅对MySQL自身内存规划提出更苛刻的要求,同时也存在内存无法充分利用的问题。同时,MySQL的每个连接的私有内存是动态分配的,如果分配不到,就会直接导致服务器Crash,这样也会增加MySQL Crash的风险。

既然受限于操作系统,无法完全做到避免被Kill,那只能尽量降低MySQL被Kill的几率。我觉得至少可以做下面3个事情:

1)合理的规划MySQL的内存使用。

2)调整OOM_adj参数,将MySQL被OOM_Killer锁定的优先级降低。

3)加强内存的监控和报警,一旦报警,DBA应该迅速介入,Kill掉一些占用较多内存的连接。

这就是微学网-程序员之家为你提供的"MySQL OOM 系列三 摆脱MySQL被Kill的厄运"希望对你有所帮助.本文来自网络,转载请注明出处:http://www.weixuecn.cn/article/3877.html

mysql超售_MySQL OOM 系列三 摆脱MySQL被Kill的厄运相关推荐

  1. mysql数据库内存分配_MySQL OOM 系列一 Linux内存分配

    RDS(网易云关系数据库服务)上线已经有一段时间,陆续不断有产品迁入到了RDS中,在线上运维的过程中,也遇到了一些曾经没有考虑到,或者考虑的不全的东西.后续有时间可以分享给大家. 今天想提到的是线上一 ...

  2. mysql终端_MySQL之终端(Terminal)管理MySQL

    前言:MySQL有很多的可视化管理工具,比如"mysql-workbench"和"sequel-pro-". 现在我写MySQL的终端命令操作的文章,是想强化一 ...

  3. mysql 管理instance_MySQL从零开始——第三章 MySQL体系结构

    一.数据库和数据库实例的概念 在数据库领域中有2个词很容易混淆--数据库(database)和实例(instance) 1.数据库 物理操作系统文件或其他形式文件类型的集合.在MySQL数据库中,数据 ...

  4. mysql和mariadb对比_MySQL并发复制系列三:MySQL和MariaDB实现对比

    MariaDB 10通过@@binlog_commit_wait_count and @@binlog_commit_wait_usec 两个参数设置,既事务commit阶段的时候至少等binlog_ ...

  5. mysql varchar 非空判断_工资从1万到3万,你还差mysql数据库优化之系列三

    查询性能的优化 优化查询分析的步骤: 1.应用查询是否检索超过需要的数据 2.mysql服务器是否在分析超过需要的数据 正确使用索引: 1.like语句操作 一般不使用%或_开头例如: select ...

  6. mysql创建bit类型报错_MySQL入门(三)——MySQL数据类型

    MySQL的数据类型包括整数类型.浮点数类型.定点数类型.日期和时间类型.字符串类型和二进制数据类型.不同数据类型决定了数据的存储格式.有效范围和相应的限制. 1.整数类型 MySQL支持的整数类型如 ...

  7. guests mysql权限_MySQL降权运行之MySQL以Guests帐户启动设置方法

    MySQL安装到Windows上,默认是以SYSTEM权限运行,如下图: SYSTEM是超级管理员.不是必须,不推荐用此权限运行任何程序. 本文将演示如何在GUEST帐户下运行MySQL. 第一步:建 ...

  8. 从mysql到大数据(三)--mysql数据库建模一常用数据类型及引擎

    数据库的安装请自行百度.如果你想直捣黄龙练查询,没有表没有数据是不能实现的.我们从建表开始学习.但要知道,我们所有东西都是了解,学习不要有压力,不要必须要求记什么,当然,如果你不累可以记,记不住也没关 ...

  9. mysql mof提权_三、mysql 之mof提权学习

    一.测试环境 win2003 + phpnow 二.使用条件 mysql + root权限 三.工具准备 (1)工具1: 准备好mof提权脚本(具体mof脚本,已上传网盘) (2)工具2: 准备好菜刀 ...

最新文章

  1. 陈雷教授在线受聘清华大学杰出访问教授
  2. Oracle 11g下加密表空间的使用
  3. css 相对定位与绝对定位
  4. 【使用技巧】【图像编辑和处理】将多幅图片放到一块方便对比
  5. oracle临时表空间最大多大,Oracle临时表空间过大解决方法
  6. 统计学(网易云可汗学院公开课笔记)
  7. 我的世界python——方块朋友(方块设置移动路径getline)
  8. Unity 事件中心
  9. 企业怎么制作网站?怎么制作网站教程步骤
  10. OpenCV 图片去水印(不需要自己做水印模板)
  11. 【收藏】eos是什么币?如何购买和储存eos币 —— 教科书式操作
  12. C++中调用MatLab接口等
  13. VM-CtenOS-8+Linux-8+LANMP环境中安装phpMyAdmin
  14. 警告 [http-nio-8080-exec-4] org.springframework.web.servlet.DispatcherServlet
  15. matlab励磁电路图,发电机的励磁方法及工作原理
  16. visual studio STM32上位机开发 LED上位机
  17. 中兴zxr10路由器重启命令_中兴ZXR10系列路由交换机用户、命令行手册
  18. 华容道的求解算法重写
  19. TWS蓝牙耳机哪些品牌好?TWS蓝牙耳机品牌排行榜
  20. 金融工程利率期限结构matlab,2016年武汉大学金融工程实验报告固守内容+利率期限结构及MATLAB应用...

热门文章

  1. 安慰剂检验(stata)
  2. EasyExcel + Vue +Springboot 前后端联动,快捷导出Excel文件
  3. 第四范式冲刺港股IPO:年营收近10亿,上海交大ACM冠军创办
  4. 简易聊天室(Python版)
  5. 云栖干货回顾 |“顶级玩家”集结!分布式数据库专场精华解读
  6. 生产用计算机计入什么科目,生产车间水电费计入什么科目?
  7. CFI Directives调用栈信息指令
  8. 程序员在周末可以做的8件事
  9. 前端饿了吗框架的学习(element)
  10. win10 远程桌面连接 网线直连