最近,我们将 Rails 网站的应用服务器从 mongrel 更改为 Passenger [使用 REE 和 Rails 2.3.8]。生产设置有 6 台机器指向单个 mysql 服务器和 memcache 服务器。之前每台机器有 5 个 mongrel 实例。现在我们有 45 个 Passenger 实例,因为每台机器的 RAM 为 16GB,配有 2、4 核 CPU。一旦我们在生产中部署此 Passenger 设置,网站就会变得非常慢。所有请求都开始排队。最终我们不得不回滚。
现在我们怀疑原因应该是 Mysql 服务器的负载增加。之前只有 30 个 mysql 连接,现在有 275 个连接。mysql 服务器的设置与我们的网站机器类似。但所有配置都保留为默认限制。buffer_pool_size 只有 8 mb,尽管我们有 16GB 内存。并发线程数为 8。
与只有 30 个连接时相比,增加与 mysql 的同时连接是否会导致 mysql 响应速度变慢?如果是这样,我们如何才能在 275 个同时连接的情况下使 mysql 性能更好。
非常感谢您的任何建议。
更新:
有关mysql服务器的更多信息:
RAM:16GB CPU:两个处理器,每个处理器有 4 个核心
表是具有默认配置的 innoDB。
谢谢
答案1
我需要以下信息。
- myISAM 还是 InnoDB?(my.cnf 暗示 myisam,请确认)
您可能需要考虑的工具:
创新顶峰(http://code.google.com/p/innotop/)myisam_defrag(https://github.com/Oneiroi/myisam_defrag)mysqltuner(http://mysqltuner.pl/mysqltuner.pl)
有些发送数据的时间超过 700 秒,您能对此进行解释吗?
EXPLAIN SELECT `reviews`.* FROM `reviews` WHERE (`reviews`.user_id IN (78707,123639,30671,31638)) AND (reviews.deleted_at IS NULL OR reviews.deleted_at > '2011-03-25 06:00:07')
临时表 == 不好!请对以下内容进行解释。
State: Copying to tmp table
Info: SELECT `reviews`.* FROM `reviews` inner join users on users.id = reviews.user_id WHERE (reviews.user_id is not null and reviews.karma>0 and datediff(curdate(),reviews.created_at)<=30) AND (reviews.deleted_at IS NULL OR reviews.deleted_at > '2011-03-25 06:12:11') ORDER BY reviews.karma desc, reviews.unhelpful_count asc, users.reviews_count desc,reviews.created_at desc LIMIT 3