4 调整MySQL

4.1 优化你的my.cnf

你应该使用mysqltuner.pl或tuning-primer.sh脚本,查看你应该在my.cnf文件中调整哪些设置。最重要的变量之一是query_cache_size,如果你使用InnoDB表,

innodb_buffer_pool_size.

这是来自配备16GB内存的测试服务器的示例配置,大约30个数据库有一半是MyISAM表,另一半是是InnoDB表——这对于使用基准测试工具(ab)进行压力测试的数据库驱动的测试网站来说效果相当好:

[...]

key_buffer = 256M

max_allowed_packet = 16M

thread_stack = 192K

thread_cache_size = 100

table_open_cache = 16384

table_definition_cache = 8192

sort_buffer_size = 256K

read_buffer_size = 128K

read_rnd_buffer_size = 256K

myisam_sort_buffer_size = 64M

myisam_use_mmap = 1

thread_concurrency = 10

wait_timeout = 30

myisam-recover = BACKUP,FORCE

query_cache_limit = 10M

query_cache_size = 1024M

query_cache_type = 1

join_buffer_size = 4M

log_slow_queries = /var/log/mysql/mysql-slow.log

long_query_time = 1

expire_logs_days = 10

max_binlog_size = 100M

innodb_buffer_pool_size = 2048M

innodb_log_file_size = 256M

innodb_log_buffer_size = 16M

innodb_flush_log_at_trx_commit = 0

innodb_thread_concurrency = 8

innodb_read_io_threads = 64

innodb_write_io_threads = 64

innodb_io_capacity = 50000

innodb_flush_method = O_DIRECT

innodb_file_per_table

innodb_additional_mem_pool_size = 256M

transaction-isolation = READ-COMMITTED

innodb_support_xa = 0

innodb_commit_concurrency = 8

innodb_old_blocks_time = 1000

[...]

请注意:如果你需要遵守ACID规定,必须将innodb_flush_log_at_trx_commit设成1。想了解这方面的更多信息,请访问:http://dev.mysql.com/doc/refman/5.5/en/innodb-parameters.html#sysvar_innodb_flush_log_at_trx_commit。

只要你在固态硬盘上使用MySQL,才应该将innodb_io_capacity设成很高的值。如果你在普通硬盘上使用MySQL,最好别理这一行。

4.2 使用固态硬盘

如果你在固态硬盘上使用MySQL,可以大幅提升性能,因为这大大降低磁盘的输入/输出。为此,最容易的办法就是把/var/lib/mysql目录挂载到固态硬盘上。


相关内容