我正在工作的一个网站,我相信每天大约有 70,000 人次访问,它使用了很多查询,这些查询使用了UNION's
大约 45 个不同的表,这些表通常每个表包含大约 15,000 行到大约 500,000 行。
我们已经query cache
尽可能地进行了优化,但是每当其中一个表发生更改并且必须删除缓存中的数据时,服务器就会开始锁定,mysqltmp dir
就会填满,服务器负载就会变得很高,必须执行以下操作来修复该问题:
- 停止mysql(负载恢复正常)
- 修复数据库表
- 清除 mysql 缓存
- 刷新内存缓存
- 再次修复数据库表
- 重启 mysql
我知道复制可能是最好的主意,但也可能是最昂贵的。所以想知道是否可以Sphinx
利用http://sphinxsearch.com/会有很大帮助吗?
我之前在另一个网站上使用过它,这样我就可以在 INNODB 表上进行全文搜索,因此对它的工作原理有一点了解,但不确定它如何处理这样的事情。
它是否利用了自己的缓存方法?我不想改变这一点,但仍然遇到与 Sphinx 相同的问题。
编辑:EXPLAIN
下面是(缺少第一行,截图程序有问题)的截图
更新:网站目前每天仅有 30/k 位访客。
答案1
您应该识别并解决数据库问题,每天 7 万次访问并不算多,MySQL 能够处理这么多的工作。您应该下载并使用mysqlreport
类似工具来分析和调整 MySQL MyISAM 和 InnoDB 缓冲区的使用情况(如果您仍在使用 MyISAM,我还建议您切换到 InnoDB)。下一步是启用 MySQL 中的慢查询日志记录,并使用pt-query-digest
工具和EXPLAIN
MySQL 命令每天分析慢查询日志。您的数据库可能缺少适当的索引。