原文地址: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”,请点此查看更多内容。
- 使用 MySQL 性能调整初级脚本 来分析您的数据库性能。
# cd /usr/local/src/ # wget http://day32.com/MySQL/tuning-primer.sh # chmod u+x tuning-primer.sh # ./tuning-primer.sh
在输入数据库root用户名和密码后,脚本会显示出一个建议列表。这个建议列表非常实用。当我得知我的VPS中,缓存竟然没有被启用时,我非常震惊。 - 接下来,使用 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
请注意,由于服务器的差异性,对不同服务器的配置可能各不相同,仅是复制粘贴这些代码,可能会导致意想不到的结果。 - 保存 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优化调整的内容,我建议您可以看这些文章: