使用MySQL数据库很慢

时间:2011-01-20 12:18:43

标签: mysql performance drupal

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

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

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

我尝试过的一件事是innodb_buffer_pool大小。这被设置为默认的8M。我尝试将它提升到512MB(机器有~2GB的RAM,并且额外的RAM可用),因为读数我表示更多应该提供更好的性能,但这使得系统运行速度变慢,所以它现在回到了8MB。

感谢阅读。

4 个答案:

答案 0 :(得分:5)

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

尝试使用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错误日志中是否存在“连接太多”错误。

答案 1 :(得分:0)

Hello Rupertj ,因为我读到你正在使用表类型innodb,对吗?

innodb表比myisam表慢一点,但我不认为这是一个主要问题,正如你所说,你使用的是drupal系统,是一种多站点,就像一个字压系统?

如果是,抱歉这种系统,每次安装插件或其他东西时,它会在表格中扩展数据库,当然还有数据......它可能会变成非常慢的东西。我自己经历过不使用Drupal而是使用Word-press博客系统,这对我和我的朋友来说是一场噩梦......

从那以后,我放弃了这个项目......我唯一的建议就是,不要在你的drupal系统中安装很多插件。

我希望这个建议对你有所帮助,因为它对我有很大的帮助。

答案 2 :(得分:0)

这听起来像是Drupal中的缓存问题,而不是MYSQL。似乎有一些非常繁重的查询,或许多,很多小的,或两者兼而有之,它们会破坏数据库服务器。完成后,Drupal会在多个缓存层中缓存它。在此之后,只有一个(或很少)查询是构建页面所需的全部内容。在开始时很慢,之后很快。

答案 3 :(得分:0)

您必须对其进行分析以确定原因,但表缓存似乎可能是个嫌疑人。

但是,你也应该注意持久的连接 - 绝对应该永远关闭(是的,对每个人而言,不仅仅是你)。 Apache / PHP持久连接是一种悲观情绪,你和其他人通常都可以这样做。