我的应用程序之前使用的是 MySQL 5.1.52 版本,但是最近我将其更新到了 5.6.26,但现在我面临着非常高的磁盘 IO 问题。
以下是系统配置:
- 操作系统:Linux 2.6.39.4
- 内存:2GB
- 磁盘:30GB 闪存。
我的操作系统是一样的,只是 MySQL 的版本改变了。我使用 iotop 实用程序对 MySQL 版本 5.1.52 和 5.6.26 进行了 IO 观察,在两个版本上执行了相同的查询,读取了磁盘上的写入次数。以下是观察结果:
5.1.52 MySQL 版本:
Number of Queries All Innodb Tables All MyISAM Tables
900 12.45M 192K
1800 23.76M 424K
2700 36.02M 680K
3600 46.33M 924K
5.6.26 MySQL 版本:
Number of Queries All Innodb Tables All MyISAM Tables
900 75.04M 212K
1800 158.03M 472K
2700 245.93M 756K
3600 346.66M 1016K
我可以在 ACID 属性上妥协,但不能在 IO 上妥协。
为什么MySQl 5.6.26中的IO增加了?
我怎样才能减少磁盘 IO?
在 MySQL 5.6.26 中,使用 MyISAM 引擎代替 InnoDB 引擎可以吗?
MySQL 5.6.26的my.cnf:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
default-storage-engine=MyISAM
general_log=on
general_log_file=/dev/shm/mysql.logs
thread_cache_size=9
table_open_cache=2000
table_definition_cache=1400
sort_buffer_size=2097152
query_cache_size=1048576
max_allowed_packet=4194304
key_buffer_size=8388608
join_buffer_size=262144
back_log=80
query_cache_type=OFF
open_files_limit=5000
event_scheduler=OFF
innodb_thread_concurrency=0
innodb_sync_spin_loops=30
innodb_stats_on_metadata=OFF
innodb_max_dirty_pages_pct=90
innodb_file_per_table=ON
innodb_concurrency_tickets=5000
innodb_autoextend_increment=8
innodb_open_files=2000
innodb_log_file_size=67108864
innodb_log_buffer_size=67108864
innodb_additional_mem_pool_size=1048576
innodb_log_buffer_size=1048576
innodb_max_dirty_pages_pct=90
innodb_max_dirty_pages_pct_lwm=90
innodb_adaptive_flushing_lwm=70
innodb_adaptive_flushing=0
innodb_io_capacity=2000
innodb_io_capacity_max=6000
innodb_lru_scan_depth=2000
innodb_write_io_threads=1
innodb_read_io_threads=1
innodb_buffer_pool_instances=1
innodb_buffer_pool_size=20971520
innodb_flush_method=O_DIRECT
innodb_flush_log_at_trx_commit=2
[mysqld_safe]
pid-file=/var/run/mysqld/mysqld.pid
提前致谢