操作系统:SUSE11
数据库版本:MySQL 5.5.28
硬件信息:HP G7 460刀片机
2颗 Intel(R) Xeon(R) CPU E5645 @ 2.40GHz,每颗CPU 6核
64G内存
压力测试工具:sysbench 0.5
[mysqld]
port = 3306
socket = /tmp/mysql.sock
skip-name-resolve
skip-external-locking
key_buffer_size = 160M
max_allowed_packet = 10M
table_open_cache = 5000
sort_buffer_size = 1K
net_buffer_length = 8K
read_buffer_size = 100M
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
max_connections = 20000
max_user_connections = 20000
innodb_log_file_size = 1G
innodb_flush_method=O_DIRECT
innodb_buffer_pool_size = 42G
innodb_additional_mem_pool_size = 10M
innodb_log_buffer_size = 3G
innodb_flush_log_at_trx_commit = 2
innodb_lock_wait_timeout = 50
innodb_io_capacity = 2000
innodb_read_io_threads = 4
innodb_write_io_threads = 20
innodb_adaptive_hash_index = OFF
innodb_buffer_pool_instances = 12
thread_cache_size = 512
thread_concurrency = 24
innodb_stats_on_metadata = OFF
innodb_spin_wait_delay
参数简介
自旋(spin)是一种通过不间断地测试来查看一个资源是否变为可用状态的等待操作,用于仅需要等待很短的时间等待所需资源的场景。使用自旋这种“空闲循环(busy-loop)”来完成资源等待的方式要比通过上下文切换使线程转入睡眠状态的方式要高效得多。但如果自旋了一个很短的时间后其依然无法获取资源,则仍然会转入前述第二种资源等待方式。此变量则正是用于定义InnoDB自旋操作的空闲循环转数,默认为6转。作用范围为全局级别,可用于选项文件,属动态变量。
测试过程
使用sysbench测试工具,对数据库逐步加压测试,连接的进程数有40个逐步增加到128个,每次增加8个,共20个测试结果。对这20个测试结果进行分析,得出如下结论。
测试结果
系统默认值为6。可以看到,当该参数为0时,TPS最低,当该参数大于5时,TPS差别不大,因此建议取默认值。