故障排除对于所有人来说都不会是一件有趣的事情,尤其是在没有崩溃报告的情况下。如果MySQL因内存不足而崩溃时应该怎么办?彼得·扎伊采夫曾在2012年写过的一篇博客中给出了许多有用的提示,而利用新版本的MySQL(5.7及以上)和performance_schema,我们可以更轻松地解决MySQL内存分配问题。
<李>
当MySQL尝试分配比可用内存更多的内存时,例如没有正确设置通过innodb_buffer_pool_size;
李> <李>服务器上还有一些其他进程可以分配内存,比如它应用程序(java、python、php), Web服务器,或者是备份(即,mysqldump)。
李> <李>MySQL中的内存泄漏。这是最糟糕的情况,我们需要进行故障排除。
李>以上,就是常见的三种MySQL因内存不足而崩溃的情况,其中前两种情况比较好解决,而第三种情况就比较棘手。
<强> 从哪里开始排除MySQL内存泄漏问题 强>
假设这是一个Linux服务器,首先我们要 <强> 检查Linux操作系统和配置 强> ,
-
<李>
检查mysql错误日志和Linux日志文件(即/var/log/消息或/var/log/syslog)来识别崩溃。你可能会看到伯父杀手杀死mysql的条目,可以使用“dmesg命令”来显示相关的详细信息。
李> <李><强> 检查可用的内存: 强> free -g ,//cat proc meminfo
李> <李><强> 检查哪些应用程序正在使用内存: 强> “顶级”或“htop”
李> <李><强> 检查mysql配置: 强>/etc/my.cnf或一般/etc/my*(包括/etc/mysql/*等文件),MySQL可能正在运行不同的my.cnf (run ps , ax |, grep mysql ,)
李> <李><强> 运行,vmstat 5, 5,,以查看系统是否正在通过虚拟内存进行读/写以及是否正在进行交换 强>
李> <李><强> 对于非生产环境,我们可以使用其他工具(如Valgrind gdb等)来检查MySQL的使用情况。 强>
李><强> 检查MySQL内部 强>
我们也可以通过检查MySQL内部来发现潜在的MySQL内存泄露.MySQL在很多地方都会有内存分配,尤其是在以下情况下:
现在我们可以检查MySQL内部的东西来寻找潜在的MySQL内存泄漏。
MySQL在很多地方分配内存。特别:
-
<李>
表缓存
李> <李>Performance_schema(运行:show engine performance_schema status ,并查看最后一行)。
李> <李>InnoDB(运行,show engine  innodb status ,并检查缓冲池部分,为buffer_pool和相关缓存分配的内存)
李> <李>RAM中的临时表(通过运行以下语句查找所有内存表:,select *,得到information_schema .tables where engine =& # 39;记忆# 39;,,)
李> <李>准备好的语句。
李>不过,从MySQL 5.7版本开始,我们就可以在performance_schema中查看内存分配,那么,如何使用呢?
首先,我们需要启用收集内存指标.Run:
<前> UPDATE setup_instruments  SET ENABLED =,,, & # 39;是的# 39; WHERE NAME  LIKE & # 39;内存/% & # 39;; >之前系统模式 报告
<前> select event_name, current_alloc, high_alloc 得到sys.memory_global_by_current_bytes where current_count 祝辞,0; >之前