I mentioned earlier that IO scheduler CFQ coming by default in RedHat / CentOS 5.x may be not so good for MySQL. And yesterday one customer reported that just changing cfq to noop solved their InnoDB IO problems. I ran tpcc scripts against XtraDB on our Dell PowerEdge R900 server (16 cores, 8 disks in RAID10, controller Perc/6i with BBU) to compare cfq, deadline, noop and anticipatory (last one just to get number, I did not expect a lot from anticipatory).
Here is result (in transactions per minute, more is better):
cfq | 2793.5 |
noop | 6586.4 |
deadline | 6513.7 |
anticipatory | 1465 |
![tpcc-results](https://i-blog.csdnimg.cn/blog_migrate/6542fa6ea2d6969f3032be22fc422c78.png)
Here is graph of disk writes (column bo in vmstat) during benchmark
![disk_writes](https://i-blog.csdnimg.cn/blog_migrate/1e0bfb155f039302e857a5586bbcb87a.png)
As you see noop / deadline can utilize disks much better.
For reference I used tpcc scripts from https://launchpad.net/perconatools, generated 100W (about 9.5GB of data on disk), and used next XtraDB params:
|
[
mysqld
]
#mysqld options in alphabetical order
user
=
root
default_table_type
=
MYISAM
innodb_buffer_pool_size
=
3G
innodb_data_file_path
=
ibdata1
:
10M
:
autoextend
innodb_file_per_table
=
1
innodb_flush_log_at_trx_commit
=
1
innodb_log_buffer_size
=
8M
innodb_log_files_in_group
=
2
innodb_log_file_size
=
128M
innodb_thread_concurrency
=
0
innodb_flush_method
=
O_DIREC
innodb_write_io_threads
=
4
innodb_read_io_threads
=
4
innodb_io_capacity
=
800
innodb_adaptive_checkpoint
=
1
max_connections
=
3000
query_cache_size
=
0
skip
-
name
-
resolve
table_cache
=
2048
|