我的生产环境中的 MySQL 查询花费的时间也比我预期的要长得多。有问题的站点是一个相当大的 Drupal 站点,安装了许多模块。网络服务器 (Nginx) 和数据库服务器 (mysql) 托管在不同的机器上,通过 100mbps 的 LAN 连接(由 Rackspace 托管)连接。
我在我的笔记本电脑上运行完全相同的站点以进行开发。显然,在我的笔记本电脑上,网络服务器和数据库服务器在同一个机器上。
以下是我的数据库查询时间的结果:
生产:
在 320.33 毫秒内执行了 291 次查询。(主页)
在 999.81 毫秒内执行了 517 次查询。(内容页)
发展:
在 46.28 毫秒内执行了 316 次查询。(主页)
在 79.09 毫秒内执行了 586 次查询。(内容页)
从这些结果中可以清楚地看出,在我的笔记本电脑上查询 MySQL 数据库所涉及的时间要短得多,其中 MySQL 服务器与 Web 服务器运行在同一数据库上。
为什么是这样?!
一个因素必须是网络延迟。从 Web 服务器到数据库服务器的往返平均需要 0.16 毫秒(由 ping 显示)。必须将其添加到每个单个 MySQL 查询中。因此,以上面的内容页面为例,其中执行了 517 个查询。仅网络延迟就会使总查询时间增加 82 毫秒。但是,这并不能解释我所看到的差异(笔记本电脑上的 79 毫秒与生产盒上的 999 毫秒)。
我还应该考虑哪些其他因素?我曾考虑将 NIC 升级到千兆连接,但显然还涉及其他问题。
我已经从http://www.day32.com/MySQL/运行了 MySQL 性能调整脚本,它告诉我我的数据库服务器配置良好(显然比我的笔记本电脑好)。报告的唯一问题是“在 4394 个临时表中,48% 是在磁盘上创建的”。在两种环境和生产环境中都是如此,我什至尝试将 max_heap_table_size 和 Current tmp_table_size 增加到 …
我有 NginX 使用 fcgi 为 drupal 站点提供服务。尝试浏览不存在的 php 文件(例如 www.example.com/this-file-doesn't-exist.php)会导致出现以下错误的白屏:
'未指定输入文件'
我用这篇文章来帮助我设置 NginX:http : //drupal.org/node/110224
这是我的 NginX 配置文件:
server {
listen 1.2.3.4:80 default;
server_name www.example.com;
client_max_body_size 6M;
root /var/www/example.com/;
index index.php;
error_page 404 /index.php;
error_page 403 /403.html;
# set up a location to serve static images for static error pages
location ^~ /error_images/ {
root /var/www/static_pages/error_pages;
access_log off;
expires 30d;
}
# use our own custom 403 page
location = /403.html {
root /var/www/static_pages/error_pages;
}
# redirect server error …Run Code Online (Sandbox Code Playgroud)