什么是MySQL间歇性问题?
间歇性的问题比如系统偶尔停顿或者慢查询,很难诊断。有些幻影问题只在没有注意到的时候才发生,而且无法重现。诊断这样的问题往往要花费很多时间。
列举一些曾经遇到的间歇性数据库性能问题的实际案例:
如何判断是单条查询问题还是服务器问题?
可以通过下面技术来解决:
1、使用SHOW GLOBAL STATUS
以高频率的执行一次SHOW GLOBAL STATUS
命令来捕获Threads_running、Threads_connected、Questions和Queries 的“尖刺”或者“凹陷”。下面是输出的命令:
mysqladmin -u USER -p extended-status -i1 | awk ' /Queries/{q=$4-qp; qp=$4} /Threads_connected/{tc=$4} /Threads_running/{printf "%5d %5d %5d\n", q, tc, $4}'
-- 输出结果
799 136 7
768 134 9
829 134 7
684 134 7
109 135 24
188 134 31
178 134 28
1178 134 7
1152 134 7
1241 135 7
请注意替换 USER
为您的 MySQL 用户名。
这个命令每秒捕获一次SHOW GLOBAL STATUS
的数据,该命令的工作原理如下:
mysqladmin extended-status
获取 MySQL 的扩展状态变量。
-i1
每一秒执行一次。
awk
程序解析这些状态变量的输出:
/Queries/
匹配包含 "Queries" 的行,并计算自上次以来的查询增量。/Threads_connected/
匹配包含 "Threads_connected" 的行,并获取当前连接的线程数。/Threads_running/
匹配包含 "Threads_running" 的行,并打印出查询增量、连接的线程数以及正在运行的线程数。如何解析上述的结果现象。猜测有两个原因的可能性比较大。其中之一是服务器内部碰到了某种瓶颈,导致新查询在开始执行前因为需要获取老查询正在等待的锁而造成堆积。另一个原因是服务器突然遇到了大量查询请求的冲击,比如memcached突然失效导致的查询风暴。
还有两种技术也可以判断:SHOW PROCESSLIST
、使用查询日志。我们之后再介绍。请关注我!
每天学习一点,每天进步一点,加油!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。