我的一个网站有太多的 MySql 连接,我在脚本中做了一些性能改进并关闭了一些昂贵的查询,以使该网站再次更易于访问。
因为我的进程列表中充满了 100% 的查询,所以我认为它将有助于服务器重新启动 mysql(以再次快速响应)。
/etc/init.d/mysql stop
不,我尝试关闭 mysql,它说可以。但 10 分钟后,命令似乎冻结了,我没有看到任何反应。我按 ctrl+x 退出,我想再次尝试 mysql stop 命令,失败了!我也无法启动 mysql。
如果您查看命令“top”,它会给我一些严重的mysql CPU 结果。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
28429 mysql 20 0 356m 128m 6336 S 88.2 6.4 1095:39 mysqld
我希望有人能帮助我!
谢谢!
答案1
看起来 DBMS 上可能仍在运行一些错误的查询 - 请注意,设置超时/终止客户端不会停止 DBMS 上启动的任何查询。
用于mysqladmin processlist
识别仍在运行的查询并mysqladmin kill $mysqlprocess
停止它们。
这种事情在 MyISAM 引擎上比在 Innodb 上更容易发生(在顺序工作负载下速度稍慢,但处理并发请求要好得多)。如果您目前正在大量使用 MyISAM,那么请切换到 Innodb。
除此之外,您仍需要对 DBMS 进行一些调整 - MyISAM 充分利用了 VFS 缓存 - 但对于 Innodb,您需要设置一个大型缓冲池并启用 o_direct。然后,您需要开始检查查询并确定要添加哪些索引/要删除哪些索引以及要重写哪些语句。
(顺便说一句,反弹服务器不会对性能产生影响)