![如何优化 MySQL 服务器以同时运行多个查询](https://linux22.com/image/583030/%E5%A6%82%E4%BD%95%E4%BC%98%E5%8C%96%20MySQL%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%BB%A5%E5%90%8C%E6%97%B6%E8%BF%90%E8%A1%8C%E5%A4%9A%E4%B8%AA%E6%9F%A5%E8%AF%A2.png)
我对服务器还不熟悉,我有一台托管服务器,规格为双核 CPU、4GB RAM、500GB HDD。
我使用 OS Centos 5 64bit、Kloxo Panel、Apache Web Server 和 MySQL 服务器。
我有一个问题,MySQL 服务经常会突然死机,特别是当我尝试同时执行多达 10-20 次 mysql_query 命令时,但我只看到未使用的 RAM 内存 <512MB,剩余 3GB 的状态。我如何优化我的 MySQL 服务器以便能够执行大量查询和顺序查询,例如 100 个查询。请帮忙。谢谢
答案1
您的问题几乎缺乏细节,但这是关于 MySQL 的一般想法。
如果您的表是 MyISAM 格式,那么混合长时间运行的 SELECT 和大量写入活动的工作负载肯定会损坏您的 MySQL 服务器。或者,至少,使其运行速度非常慢。
“如何微调 MySQL” 是完全不同的难题,它涉及不同类型的工作负载。您是否有大量的短期连接/查询,例如每秒数千个选择查询,但表结构非常简单且索引制作精良?或者查询和同时连接并不多,但选择非常繁重且复杂?优化这些需要完全不同的设置。
缺少适当的索引通常是 MySQL 行为不当的原因。您确定已设置所有必要的索引吗?
MySQL 工作台在排除 MySQL 故障时,它可以成为非常有用的工具。运行它,看看哪些查询会长时间卡住。当然,启用 MySQL 慢查询日志和使用 也是很方便的
mysqltuner
。对于面向写入的工作负载,MySQL 查询缓存有时会造成危害。对于随机 SELECT,它不会有太大帮助,而且一直重建无效的缓存只会造成另一个无用的性能损失。
在应用程序级别memcached可以为您提供很大帮助,因为它大大减轻了您的数据库服务器负载。
答案2
通常,您应该在基本层面采取两个步骤;
- 优化查询结构以充分利用索引、缓存和 mysql 功能
- 配置 MySQL 以针对您的数据和查询类型进行最佳优化。
通过这两个步骤,可以与花一些时间上网阅读有关查询优化和调整 mysql 性能的信息相比。
但是对于 1 和 2,你可以使用Percona 工具包为您提供如何改善当前情况的建议。首先,请确保您已启用“慢速查询日志”,如下/etc/my.cnf
所示;
# Here you can see queries with especially long duration
log_slow_queries = /var/lib/mysql/slow.log
然后,您可以检查/var/lib/mysql/slow.log
文件中是否存在特别糟糕的查询,如下所示;
pt-query-advisor /path/to/slow-query.log
这将提供有关优化服务器上的慢查询的非常详细的输出。您还可以使用pt-变量顾问查看您可能需要更改的任何设置以提高服务器速度。