1.测试环境

操作系统:SUSE11 

数据库版本:MySQL 5.5.28 

硬件信息:HP G7 460刀片机

2 Intel(R) Xeon(R) CPU  E5645  @ 2.40GHz,每颗CPU 6

64G内存

压力测试工具:sysbench 0.5

2.数据库配置

[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

3.测试参数

innodb_spin_wait_delay

参数简介

自旋(spin)是一种通过不间断地测试来查看一个资源是否变为可用状态的等待操作,用于仅需要等待很短的时间等待所需资源的场景。使用自旋这种空闲循环(busy-loop)”来完成资源等待的方式要比通过上下文切换使线程转入睡眠状态的方式要高效得多。但如果自旋了一个很短的时间后其依然无法获取资源,则仍然会转入前述第二种资源等待方式。此变量则正是用于定义InnoDB自旋操作的空闲循环转数,默认为6转。作用范围为全局级别,可用于选项文件,属动态变量。

测试过程

使用sysbench测试工具,对数据库逐步加压测试,连接的进程数有40个逐步增加到128个,每次增加8个,共20个测试结果。对这20个测试结果进行分析,得出如下结论。

测试结果

系统默认值为6。可以看到,当该参数为0时,TPS最低,当该参数大于5时,TPS差别不大,因此建议取默认值。