跳转到主要内容
祈福的熊猫 提交于 23 October 2012

原文地址:http://drupal.org/node/85768

这里有一些基础的,但是效果比较明显的方法,来优化Drupal的MySQL数据库(当然为了加速您的数据库,还有很多更复杂也更昂贵的办法):

需要注意的是:如果您的站点在共享主机中,并且您只能访问到您自己域名下的数据库,那么很有可能您将没有访问 my.cnf 的权限。另外,本文中的方法可以在MySQL 4.0.2 以及其后任意 4.0.x 版本中生效,我想这些方法应该是能够适用于 5.x 版本(如果有人确认了此问题,可以在评论中留言)。事实上,对于 4.0.2 之前的版本,只要在每行前面加上 set-variable = 就应该可以实用这些方法了。关于“set-variable”,请点此查看更多内容

  1. 使用 MySQL 性能调整初级脚本 来分析您的数据库性能。
    # cd /usr/local/src/
    # wget http://day32.com/MySQL/tuning-primer.sh
    # chmod u+x tuning-primer.sh
    # ./tuning-primer.sh
    在输入数据库root用户名和密码后,脚本会显示出一个建议列表。这个建议列表非常实用。当我得知我的VPS中,缓存竟然没有被启用时,我非常震惊。
  2. 接下来,使用 pico 或其他代码/文本编辑器打开 my.cnf: 根据内存资源的可用度,您可能会粘贴类似下面的一些代码(根据您的系统情况,您可能需要调大或改小一些数值) 比如,对于只有256mb内存的系统,设置应该是这样的:
    [mysqld]
    max_connections = 150
    max_user_connections = 150
    key_buffer = 36M
    myisam_sort_buffer_size = 64M
    join_buffer_size = 2M
    read_buffer_size = 2M
    sort_buffer_size = 3M
    table_cache = 1024
    thread_cache_size = 286
    interactive_timeout = 25
    wait_timeout = 1800
    connect_timeout = 10
    max_allowed_packet = 1M
    max_connect_errors = 1000
    query_cache_limit = 1M
    query_cache_size = 16M
    query_cache_type = 1
    tmp_table_size = 16M
    
    再例如,对于只有256mb内存的系统,设置应该是这样的:
    [mysqld]
    max_connections = 75
    max_user_connections = 75
    key_buffer = 16M
    myisam_sort_buffer_size = 32M
    join_buffer_size = 1M
    read_buffer_size = 1M
    sort_buffer_size = 2M
    table_cache = 1024
    thread_cache_size = 286
    interactive_timeout = 25
    wait_timeout = 1000
    connect_timeout = 10
    max_allowed_packet = 1M
    max_connect_errors = 1000
    query_cache_limit = 1M
    query_cache_size = 16M
    query_cache_type = 1
    tmp_table_size = 16M
    
    请注意,由于服务器的差异性,对不同服务器的配置可能各不相同,仅是复制粘贴这些代码,可能会导致意想不到的结果。  
  3. 保存 my.cnf 文件并重启 MySQL。这可以通过控制面板或命令行(在某些unix系统或linux系统中,可以使用:service mysqld restart 或者 /etc/rc.d/init.d/mysqld restart 或者 /etc/init.d/mysqld restart ) 现在新的设置生效了,您可以再次运行上面的脚本来查看两次结果的不同之处。一番尝试之后,我发现在做出发动后再次查看脚本运行结果是非常必要的,以确保您所做的修改被系统识别,以及问题是否在调整后有所改善。但是如果想查看真正准确的数值,您需要在24~48小时后重启MySQL(实际上,这个操作在脚本的开头就有提到,但是并没有注明原因),具体时间依您的访问量而定。另外,在设置Drupal的过程中,我发现 tmp_table_size 和 table_cache 两个参数对性能有着特别明显的作用(例如:您可以增大这些设置的数值) 如果您愿意阅读更多关于MySQL优化调整的内容,我建议您可以看这些文章: