【发布时间】:2019-09-26 03:14:23
【问题描述】:
我正在从一家托管公司迁移,该公司目前在同一台服务器上托管我的基于 PHP 的 Web 应用程序和 MySQL 数据库。他们的服务器规格不错,服务器运行在 SSD、11GB RAM 和 8 核 CPU(GenuineIntel、QEMU 虚拟 CPU 版本 (cpu64-rhel6)、2399.996 MHz、4096 KB 缓存)上。
我不能一次移动所有内容,所以只想将数据库移动到 AWS RDS 并将我的 PHP 配置中的主机更新到 AWS 端点。
我已使用 AWS 上可用的基本包进行测试 - t2.micro EC2(用于测试/基准测试 PHP 脚本)和 db.t2.micro RDS。
一切正常,但是当我从远程非 AWS 服务器连接时,它非常很慢。相同的数据库表,运行相同版本的 MariaDB,表中的行数相同,结果如下:
AWS EC2 -> AWS RDS (fully AWS)
Connected via PDO in 0.04 seconds
Queried 1000 rows in 0.63 seconds
Remote Server -> AWS RDS (part AWS)
Connected via PDO in 0.16 seconds
Queried 1000 rows in 5.49 seconds
Remote Server -> Database running on same server (non AWS)
Connected via PDO in 0.00 seconds
Queried 1000 rows in 2.70 seconds
如您所见,完整的 AWS 设置是迄今为止最快的,即使在他们的免费套餐上也是如此。
完全远程的服务器设置速度较慢,但还算不错。
远程服务器 -> AWS 设置最慢。
由于我是 AWS 新手,如果有人能告诉我这是否符合预期,我将不胜感激。对 AWS RDS 的非 AWS 调用总是会慢很多吗?
这两个服务器上的某些东西会限制速度吗?
PS。远程服务器在英国,AWS 区域设置为 EU-West,所以我认为它与距离延迟无关。
编辑 Rick James 在下面的 cmets 中询问了有关查询缓存等的问题。缓存被禁用,但为了确保我已经更改了我的脚本,以便它执行以下操作:
$mysqli = mysqli_connect($dbhost,$username,$password,$dbname) or die ("could not connect to mysql");
$tableCreate = "CREATE TABLE IF NOT EXISTS test_tbl (id int(11) NOT NULL auto_increment, RandomTxt TEXT, PRIMARY KEY (id))";
$queryResult = mysqli_query($mysqli , $tableCreate);
for ($i = 1; $i <= 1000; $i++) {
mysqli_query($mysqli,"INSERT INTO `test_tbl` (RandomTxt) VALUES ('abcdefghijklmnopqrstuvwxyz')" ) ;
}
$result = mysqli_query($mysqli , 'SELECT * FROM test_tbl') ;
$arrayResults = array() ;
while ($row = $result->fetch_assoc()) {
array_push($arrayResults , $row['RandomTxt']);
}
$dropTable = "DROP TABLE `test_tbl`";
$queryResult = mysqli_query($mysqli , $dropTable);
每次查询后,我都有一个 PHP 计时器脚本。此更新脚本的结果是:
AWS EC2 -> AWS RDS (fully AWS)
Db connection established at : 0.04184008
Table created at : 0.05363607
Data inserted into the table at : 3.64998102
Data is read from table and inserted into an array at : 3.65190291
Table dropped at : 3.66061902
Remote Server -> AWS RDS (part AWS)
Db connection established at : 0.08496714
Table created at : 0.11568093
Data inserted into the table at : 21.78033495
Data is read from table and inserted into an array at : 21.82050204
Table dropped at : 21.84762096
Remote Server -> Database running on same server (non AWS)
Db connection established at : 0.00079298
Table created at : 0.00664401
Data inserted into the table at : 0.15589213
Data is read from table and inserted into an array at : 0.16134501
Table dropped at : 0.16468596
我只想重申,我是使用 AWS 的新手,如果这些结果符合人们的预期,请告诉我。我需要知道从非 AWS 服务器连接到 RDS 是否应该足够快以供目前生产使用,当然不是。
编辑 2
我还跑了time nc -vz xxx.xxx.eu-west-1.rds.amazonaws.com 3306 来检查时间。来自非 AWS 主机的结果是:
real 0m0.227s
user 0m0.014s
sys 0m0.005s
从EC2到RDS的结果是:
real 0m0.112s
user 0m0.002s
sys 0m0.000s
【问题讨论】:
-
AWS 没有限制(我已经直接询问过他们),因此您可以询问您的主机并在您的主机和 RDS 之间进行一些网络检查。
-
显然远程服务器之间没有节流问题 -> RDS:“我没有看到连接有问题,连接到端口 3306 时有 0.018 秒的延迟”
-
是来自服务商吗?
-
谢谢@Jay - 很高兴知道这不正常,从远程服务器连接到 RDS 的性能应该没问题
-
在不同的非亚马逊主机上尝试了相同的测试脚本,它的运行速度大约是我遇到问题的主机的五倍。这让我相信问题出在我当前的主机上,所以要继续努力。
标签: php amazon-web-services amazon-ec2 mariadb amazon-rds