在我看来,好像我工作服务器上总是运行着 1 个 SQL 任务,而我的个人事务却“卡住”了,并且永远运行下去。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
890 mysql 20 0 326m 54m 7704 S 9999 1.4 13:05.03 mysqld
有没有办法可以设置一个机器人来查找类似的东西,关闭它并重新启动 MySQL,这样我就不需要手动执行此操作了?
更新
我应该指出,它并不总是保持在 9999% 的 CPU 水平。有时它会显示 1.4 或类似的数字
答案1
您永远不应该通过重新启动数据库来终止查询。在 MySQL 中,您可以使用 查看正在运行的查询,show full processlist;
并使用 终止进程kill $CONNECTIONNUMBER;
。
您可以编写脚本来执行此功能。
答案2
您是否运行过类似 MySQL 调优脚本mysqltuner.pl或者调优入门指南确保您的基本 MySQL 设置正确?
您不能随意将设置值更改为某人拥有的值,因为配置高度依赖于可用的硬件资源、存储的数据量以及针对该数据运行的查询。在我的服务器上运行良好的 MySQL 配置可能会使您的服务器崩溃。
答案3
我与我的一位 MySQL DBA 进行了交流,他告诉我 key_buffer_size 可能设置为默认值,这可能是 CPU 使用率过高的罪魁祸首。如果内存资源可用,通常将默认值从 8M 提高到 330M 左右应该有助于解决此问题。此更改将需要维护窗口来重新启动 MySQL 服务。