【问题标题】:Making a PHP website scale a lot more使 PHP 网站规模更大
【发布时间】:2013-10-29 16:54:17
【问题描述】:

我的服务器的平均负载飙升至 150(服务器实际上非常强大,8cpus 太多 RAM 等),其原因是 MySQL 占用了我所有的 CPU 700%!

我知道 Apache/MySQL 进行了调整以获得更好的性能,我已经做了一些,它工作了一点,但与我需要的结果相去甚远。

我所有的问题都来自这种情况:当基于网站文件的缓存失效时,PHP 脚本运行以重新制作这些缓存区域,生成 MySQL 查询(相当繁重的查询,也对它们进行了一些优化,但它们仍然对 MySQL 造成负担)。这很正常,问题是当 100 个人在缓存无效的那个精确时间访问网站时,他们会生成 100 次相同的查询 - 这使得 MySQL 一直与我的服务器一起下沉。

是否有任何 MySQL 解决方案来防止相同查询的重复?还是有任何其他技术可以解决这种特殊情况?

【问题讨论】:

  • 也许可以确保您的页面缓存在稍有不同的时间失效,因此您不必一次全部重建它们
  • 绝对是,但即使一个页面缓存失效,当时有 100 个人访问同一页面也会杀死它!
  • 听起来缓存不应该由访问您网站的用户触发,而是由计划的事件/联合作业触发。网上有很多方法,随便搜一下就可以了:)

标签: php mysql scalability


【解决方案1】:

我认为,如果重建缓存已经在进行中,您将需要另一个标记,以便只完成一个更新查询,直到完成之前使用旧缓存。

这只会触发一次昂贵的查询。

要获得更好的答案,请说明您如何使缓存无效。

【讨论】:

  • 听起来很有趣!它基本上是一个基于 joomla 的网站,因此缓存处理程序会检查缓存 TTL 并决定重新运行脚本或使用缓存的数据
  • Hmm...,然后您可以将标记放入数据库中(一个新表:每次运行时带有时间戳的行...,每次 joomla 调用您的脚本时检查那里)。所以你不必改变 yoomla 机制。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-07
  • 2023-03-12
  • 2021-07-26
  • 1970-01-01
  • 1970-01-01
  • 2013-02-28
  • 1970-01-01
相关资源
最近更新 更多