我们有一个非常小的 150MB 的 MySQL 数据库,它在 AWS t2.large 数据库作为自托管的情况下运行得非常快。
硬件规格:Azure:2 个 vCPU,10 GB 内存,AWS:2 个 vCPU,8 GB 内存。
不过,该公司决定将 AWS DB 迁移到 Azure 托管 MySQL,并将 PHP 应用程序暂时保留在 EC2 中。
两台服务器的硬件/W 相同,事实上 Azure 有 2GB 额外内存,并且两台服务器的 vCPU = 2,
一旦迁移到 Azure,我们就看到性能大幅下降,
例子:在 AWS 中,ajax 请求需要 15 秒,在 Azure 中,相同的 ajax 请求需要 2.5 分钟。
Azure MySQL DB - 平均 %CPU 和 % 内存从未达到其分配资源的 50%,
所以规格似乎不是问题。
根据下面的问题连接到 Azure Database for MySQL 时,Azure 应用服务上的 PHP 性能缓慢 https://stackoverflow.com/questions/63970567/php-on-azure-app-service-slow-performance-when-connected-to-azure-database-for-m
我们确实打开了 Azure MySQL DB 服务器参数启用重定向 to ON并启用使用 TLS 1.2 强制实施 SSL。
并安装了“mysqlnd_azure”扩展,使用
sudo pecl install mysqlnd_azure
根据下面的链接,我们检查这对连接有任何影响,但主机名似乎相同,没有变化
https://learn.microsoft.com/en-us/azure/mysql/howto-redirection#confirm-redirection https://learn.microsoft.com/en-us/azure/mysql/howto-redirection#confirm-redirection
在下面的“测试代码”中,如果重定向设置为“打开”,则会出现错误“连接错误(2002):”如果重定向在 ini 文件中设置为关闭,则测试代码将转到具有相同主机名的其他位置,这表明重定向不起作用,但是可以看到 mysqlnd_azure 扩展已加载并且表名在结果集中正确显示
<?php
$host = '<yourservername>.mysql.database.azure.com';
$username = '<yourusername>@<yourservername>';
$password = '<yourpassword>';
$db_name = 'testdb';
echo "mysqlnd_azure.enableRedirect: ", ini_get("mysqlnd_azure.enableRedirect"), "\n";
$db = mysqli_init();
//The connection must be configured with SSL for redirection test
$link = mysqli_real_connect ($db, $host, $username, $password, $db_name, 3306, NULL, MYSQLI_CLIENT_SSL);
if (!$link) {
die ('Connect error (' . mysqli_connect_errno() . '): ' . mysqli_connect_error() . "\n");
}
else {
echo $db->host_info, "\n"; //if redirection succeeds, the host_info will differ from the hostname you used used to connect
$res = $db->query('SHOW TABLES;'); //test query with the connection
print_r ($res);
$db->close();
}
?>
应用程序是通过 Code-igniter 和 PEAR 完成的。
在使用 AWS EC2 和 Azure MySQL DB 运行 Code Igniter 时,有人有类似的经历吗?和解决这个问题有什么建议吗?