【发布时间】:2017-08-08 15:47:01
【问题描述】:
我在 PHP 平台(开发不佳)上有一个商店,那里有很多不好的查询(没有索引的长查询,按 rand() 排序,动态计数,..)
我暂时无法更改查询,但我必须调整服务器以保持活动状态。
我尝试了我所知道的一切,我有非常大的数据库,我通过更改 MySQL 引擎对其进行了优化和调整,但这是第一个项目,一切都失败了。
目前情况:
1.前端 (PHP) - AWS m4.large 实例、Amazon Linux(最新)、启用 opcache 的 PHP 7.0(apache 模块)、在 AWS Elasticache 上启用了外部 Memcached 的 mod_pagespeed(t2.micro,5% 平均负载)
2。 SQL - 在 AWS c4.xlarge 实例上使用 TokuDB 引擎的 Percona DB(50% 平均负载)
我需要降低实例,主要是 c4.xlarge,但如果我切换到 c4.large,几个小时后就会出现很大的过载。
数据库只有300MB的数据,我试过查询缓存、InnoDB、XtraDB……都没有成功,而且流量也很低。 PHP 使用 MySQLi 扩展。
您知道任何可能的解决方案,如何在不重构查询的情况下降低负载?
【问题讨论】:
-
丑陋的工作,但必须完成......重构这些查询......如果第一次正确完成,那么你就不会遇到这个问题:P
-
您可以索引您的查询。只需将慢查询日志打开一点,然后尝试找出可以索引哪些查询。使用 Percona 的工具包来做一些事情。您也可以在dba.stackexchange.com 上查看更多选项。
-
你可以安装一个像NewRelic这样的工具来获取最常用的查询。然后你可以专注于重构相关的。
-
感谢您的回答,问题是我无法重构查询,因为我无法修改系统。因此,我正在寻找 SQL 方面的一些调整。例如。如果我遇到开销问题,我使用 query_cache,引发一些变量,更改引擎,......我做了我所知道的一切,所以我正在寻找我不知道的东西,例如更改一些 TokuDB 变量(我有足够的 RAM,但我想降低处理器负载)。
-
也许在 PHP 端有一些可能,但是安装了 opcache,我监控它并且有足够的内存来运行。
标签: php mysql amazon-web-services percona