学习处理一个大的MySQL数据库

在数据库/服务器pipe理方面的newb总数,但目前正在运行一个大型数据库:

  • LAMP Stack Ubuntu
  • WordPress平台(不能更改)
  • 超过100,000个数据库条目
  • 网站每天通过API添加新的条目
  • 网站每天删除过期的条目2次
  • 用户search关键字匹配的条目
  • 一天下100个用户

服务器经常给出mysql-慢速错误,变得无法响应或使用> 200%的服务器资源。 (主要是CPU,似乎源于MySQLd进程)。

我正在Linode机器LAMP堆栈上运行:

4 GB RAM 4 CPU Cores 96 GB SSD Storage 19.72 GB swap 

不知道从哪里开始了解这些types的问题。 如果有人能把我推向正确的方向来学习大型数据库的常见问题,甚至了解MySQLd如何使用CPU内存,以及如何更好地优化这些内容,那么这将是非常好的 – 正如我认为这样低的stream量,它必须是一个configuration问题或坏脚本。

我不希望任何人解决这个问题,我甚至不知道从哪里开始。

我首先看看你的应用程序代码和你正在生成的查询。 使用“SHOW PROCESSLIST”将显示你的mysql进程和状态。 如果您看到使用全表扫描,文件sorting或copy-to-tmp的查询,则需要使用“EXPLAIN [sql语句] ..”并查看可以优化的位置。

由于您提供的信息有限,您只能猜测是由于未索引的查询导致的I / O瓶颈,或者查询太大以至于超出了分配的内存量。 你不应该使用交换的MySQL,至less你应该有尽可能多的内存作为你的分贝需要留在内存中尽可能多。

对于mysql调优你可以从http://mysqltuner.com/开始(你可以在这里发布输出)。

对于wordpress,我build议使用像W3总caching一样的caching插件与memcached后端,并启用所有的caching,你可以。 对象caching应该有助于mysql负载。

用mysql删除很多数据运行mysqlcheck -Ao也可能有所帮助。 另外,如果mysql查询遇到locking问题,将一些表移动到InnoDB可能会有所帮助,但在你的情况下似乎没有这种方式。