我目前正在为我们的网站使用 LAMP 堆栈(基于 Centos 6.5),我想尝试将 mySQL 与“Web 服务器”分离。
到目前为止,我一直在使用配备四核 CPU 和 8GB RAM 的 DigitalOcean VPS。
昨天,我为单个暂存环境创建了一个新的 DigitalOcean VPS(目前),其规格和功能如下:
- 2 个 CPU 核心
- 2GB 内存
- Centos 6.7
- 与“Web 服务器”的专用网络(Ping 时间:
min/avg/max/mdev = 0.352/0.481/0.662/0.073 ms
- mySQL 5.6(与当前服务器相同)
- 相同的 my.cnf 配置,但有两处更改:
- 添加:(
bind-address=X.X.X.X
私网内部IP地址) - 将 innodb_buffer_pool_size 从 2GB 更改为 1GB(因为我们现在的 RAM 更少..)
- 添加:(
该网络服务器正在运行 Drupal 站点,并安装了 APCu、opCACHE 和 memcached。
使用 Chrome 检查加载时间时,似乎网站现在的加载速度慢了大约 0.5 - 1.5 秒。不幸的是,NewRelic 证明我是对的(见所附屏幕截图)
由于这是我第一次配置远程 mySQL 服务器,我想知道我是否遗漏了什么?是否有任何配置或调整可以提高性能?
答案1
我不确定你为什么会感到惊讶,因为你的 MySQL 服务器分配的 RAM 较少,并且将它放在不同的机器上会增加网络接口的负载。
您应该监视您的网络活动以查看它是否会导致任何类型的瓶颈。
根据您的 SQL 查询和 PHP 脚本,可能有方法在查询性能方面更好地优化这些任务,以及改善发送回 PHP 的结果以减少网络负载。
答案2
我将推荐以下几件事:
验证网站是否正在使用 Memcached/APC/opcode 缓存。
我建议使用 Memcached 进行数据库查询缓存。使用以下方法对 Mysql 配置进行一些调整mysqltuner.pl
优化memcached apc配置
基于Debian / Ubuntu操作系统的Memcached配置文件位置:
/etc/memcached.conf
基于 Centos/RHEL 的操作系统中的 Memcached 配置文件:
/etc/sysconfig/memcached
Apc配置可以插入到php.ini中。
遵循这些步骤肯定会提高性能。
并使用 NewRelic APM 来显示有关时间花在哪里的数据。
如果网络是一个问题,我想你对此无能为力。
请告诉我。谢谢
,
Shahriar
答案3
我设法解决了这个问题,并且我认为我所经历的方法可能会对其他人有所帮助。
- 使用检查服务器之间的延迟
ping
,mtr
并traceroute
查明问题是否与延迟有关 - 检查服务器的负载和可用 RAM,使用
top
(或htop
)和free -m
- 在两个 mysql 服务器(旧的本地服务器和新的远程服务器)上运行大量查询并比较查询时间,我们也可以使用 mySQL 的分析功能 - 请参阅
SHOW PROFILE
- 假设 mysql 查询时间相似(或至少几乎相似),那么我们可以使用 PHP 代码片段来运行相同的代码,看看瓶颈是否与 PHP 有关 - 我建议使用NewRelic PHP 应用程序分析- 就我而言,这是“启蒙”,因为我最终发现问题甚至与远程 mySQL 无关,但额外的 0.5-1.5 秒是由对第三方服务的额外调用引起的(仅在使用远程数据库时)。
- 使用mysqltuner.pl(正如@Shahriar Shojib 所建议的),并查看是否存在一些我们必须进行的 mySQL 配置调整(就我而言没有..)
- 尝试禁用 iptables 或任何其他防火墙
- 检查网络流量(我使用了
iptraf
我们的第三方监控服务),但正如@Julie Pelletier 建议的那样,还有其他一些选择
使用远程 mySQL 服务器时可获得额外的性能提升
使用 memcached、APCu 和 Opcode 缓存(尽管在我们的案例中这些都已经安装了 - 但它们是游戏规则的改变者...)
最后但同样重要的一点是 - 使用 SSH 隧道而不是直接连接到 mySQL 服务器(似乎可以节省大约 200 毫秒的整体页面加载时间)
希望阅读这个答案可以为你节省超过 0.5 到 1.5 秒:)