【问题标题】:Slow server performance on ecommerce website电子商务网站上的服务器性能缓慢
【发布时间】:2016-03-09 15:51:42
【问题描述】:

我有一个电子商务网站,其中包含超过一百万种产品。它在 debian 7 上运行,带有 apache2.2 、 php5.4 、 mysql 5.5 和 laravel 4.1。以前运行流畅,最近变慢了。

我认为这是因为对服务器的 mysql 查询量。我使用了各种 mysql 工具,发现每秒查询数非常高(1000-2000)。虽然当即时记录对站点的请求和查询时,它几乎没有那么多。

此外,我最近对代码没有进行太多更改,并且由于它过去运行正常,我不确定查询量是否是问题(不确定在一切正常时它是多少)。

我正在寻找如何调试或找出问题所在的任何想法。页面上的用户数量没有改变。有大约相同数量的请求。我有一些缓存。但是由于我有这么多产品页面,并且大多数用户访问不同的页面,所以缓存在那里几乎没有影响。任何想法如何为这么多产品页面制作更好的缓存?

【问题讨论】:

  • 会不会有一些“慢查询”可能是个问题,可以通过重组或索引来优化?
  • 你可以在这里找到一些有趣的关于缓存laravel.com/docs/4.2/cache
  • 打开“通用日志”几秒钟。你可能发现 Laravel 正在添加一堆相对不必要的查询。
  • 你用的是什么缓存?
  • 您是否渴望使用 Eloquent 加载查询?如果没有,您可以极大地提高性能。

标签: php mysql performance laravel


【解决方案1】:

您是否打开了“查询缓存”?它可能会有所帮助,也可能会造成伤害。

MySQL 可以使用多少 RAM(包括它正在使用的内存)?让我们看看这些用于各种检查:

SHOW VARIABLES;
SHOW GLOBAL STATUS;

设置long_query_time = 0.5

  1. 开启慢日志
  2. 等一天
  3. 使用mysqldumpslow -s tpt-query-digest 总结慢日志——这些按“对系统的影响”排序。
  4. 让我们看看前 3 个要讨论的查询。包括SHOW CREATE TABLEEXPLAIN ...

【讨论】:

  • 是的,我打开了查询缓存,但就像我说的那样,大多数情况下请求不同的页面并进行新的查询。另外我认为这不是内存问题(应用程序使用大约 1gb 的内存,其余的(共 8 个)用于缓存。
  • 我还记录了慢查询。对系统影响最大的是查询: Count: 88 Time=3.52s (309s) Lock=0.00s (0s) Rows=15.5 (1361) select * from products where active = 'S' and category_id在 ('S') 和 format_id = 'S' 限制 N 偏移量 N。其中有各种数量的 category_id。解释:结果太多行(~700000)。但这不是限制和抵消吗?
  • 该查询需要INDEX(active, format_id, category_id)category_id 特别是第三个。
  • 查询必须跳过OFFSET行;这没有短路(除了“记住你离开的地方”)。如何打开另一个问题来讨论优化该查询。
【解决方案2】:

您网站上的插入/更新/删除与选择的比率可能有所变化。当您的系统配置为快速数据检索时,这是常见的问题。但在某些时候,您会增加插入/更新/删除的次数以及所有系统性能下降。

当然,它可以只是通过好的内容或其他方式增加网站上的用户。所以,你需要比较当前的数据库负载和上一时期的负载,没有这样的问题。

【讨论】:

    猜你喜欢
    • 2010-11-23
    • 2011-06-11
    • 2012-05-05
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2017-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多