You are here

Drupal专业开发指南 第22章 数据库瓶颈

Drupal需要进行大量的数据库操作,特别是对于登录的用户和定制的模块。数据库常常会成为产生瓶颈的原因。这里有一些基本的策略用于优化Drupal中数据库的使用。

 
启用MySQL的查询语句缓存
MySQL是Drupal最常用的数据库。它具有在内存中缓存常用查询语句的能力,这样一个给定的查询语句再次被调用时,MySQL将立即从缓存中将其返回。然而,在大多数MySQL中,这一特性默认是被禁用的。为了启用它,向你的MySQL配置选项文件添加以下代码;该配置文件的名称为my.cnf,它用来声明变量和你的MySQL服务器的行为(参看http://dev.mysql.com/doc/refman/5.1/en/option-files.html)。在这里,我们将查询语句缓存设为64MB:
 
# The MySQL server
[mysqld]
query_cache_size=64M
 
当前查询语句缓存的大小,可以通过MySQL的SHOW VARIABLES命令来查看:
 
mysql>SHOW VARIABLES;
...
| query_cache_size               | 67108864
| query_cache_type               | ON
...
 
不断的试验查询语句缓存的大小通常是有用的。缓存太小就意味着缓存了的查询语句很快就会过期。缓存太大就意味着搜索一个缓存可能需要花费相对较长的时间;还有就是使用内存进行缓存比使用其它一些方式要好,就像有更多的web服务器处理,memcache或者操作系统的文件缓存一样。
 
提示Drupal中,访问“管理➤报告➤状态报告”,点击MySQL版本号,来快速的查看一些重要的MySQL变量值。你还可以在这一页面查看,查询语句缓存是否被启用了。
 
识别耗费资源的查询
    如果你想了解在生成一个给定页面时都发生了什么,那么devel.module就会非常有用。它拥有一个选项,用来显示生成页面所用到的所有查询语句,以及每个查询所用的时间。关于如何使用devel.module,以及通过EXPLAIN语法来识别和优化数据库查询的更详细的讨论,参看第21章。
找出执行时间过长的查询的另一种方式是,在MySQL中启用缓慢查询日志。为了启用它,需要在MySQL的配置选项文件(my.cnf)中这样设置:
 
# The MySQL server
[mysqld]
log-slow-queries
 
这会将超过10秒的查询记录到MySQL数据目录中的日志文件example.com-slow.log中去。你可以修改秒数以及日志的位置,如下面的代码所示,这里我们将缓慢查询的最小值设为5秒:
 
# The MySQL server
[mysqld]
long_query_time = 5
log-slow-queries = /var/log/mysql/example-slow.log
 

Drupal版本: