使用MySQL数据库很慢

rup*_*rtj 3 mysql performance drupal

我们有一个专用的MySQL服务器,上面有大约2000个小型数据库.(这是Drupal多站点安装 - 每个数据库都是一个站点).

当您第一次加载每个站点时,最多可能需要30秒才能返回第一页.之后,页面以可接受的速度返回.我已经通过堆栈跟踪到MySQL了.此外,当您使用命令行mysql客户端连接时,连接速度很快,然后"使用dbname"很慢,然后查询速度很快.

我的预感是,这是由于服务器配置不正确,未使用的dbs掉出缓存,或类似的东西,但我不确定在这种情况下适用哪个缓存或设置.

我尝试过的一件事是innodb_buffer_pool大小.这被设置为默认的8M.我试了一下提高到512MB(本机具有〜2GB的RAM,以及额外的RAM可用)因为我没有表示更多的应该提供更好的性能阅读,但本作的系统运行慢,所以它现在回到了8MB.

谢谢阅读.

reg*_*ero 5

使用2000个数据库,您应该调整表缓存设置.你肯定在这个缓存中有很多缓存未命中.

尝试使用mysqltunner和/或tunning_primer.sh获取有关设置潜在问题的其他信息.

现在drupal使数据库密集型工作,检查Drupal安装,你可能会产生很多(太多)请求.

关于innodb_buffer_pool_size,你肯定有很多分页缓存缺失和一点缓冲区(8Mb).理想的大小是当你的所有数据和索引大小都适合这个缓冲区时,以及2000个数据库......当然它很小,但是你很难成长.调整MySQL服务器很难,如果MySQL占用太多RAM,你的apache将无法获得足够的RAM.

解决方案是:

  • 检查您是否使用DNS名称但使用IP
    (如果是)
  • 买更多内存
  • 将MySQL设置在单独的服务器上
  • 调整您的设置

对于Drupal,尝试将会话设置为不在数据库中,而是在memcache中(您需要RAM,但对MySQL来说会更好),可以使用模块.如果您有Drupal 7,您甚至可以尝试在memcache而不是MySQL中设置一些缓存表(不要使用大缓存表).

编辑:最后一件事,我希望你没有修改Drupal使用持久数据库连接,一些模块允许(或有一个老drupal 5尝试自动执行).使用2000数据库,您将杀死您的服务器.尝试检查mysql错误日志中是否存在"连接太多"错误.