MySQL和高jdb2 io /等

我正在使用InnoDB表运行MySQL 5.5。 每秒约有200个查询。 还有50万行或更多的表格。 但是,我对服务器负载和IO /尤其是与jdb2等待有很大的问题。

jdb2 / md2-8正在采取99%IO /等待看iotop输出图像: Iotop输出

盒子规格:Xeon 1246 v3,32 GB RAM,2x 240英特尔SSD RAID 1

我不知道我的configuration是否有问题,或者是与RAID有关的问题。 有小费吗 ?

我的MySQL my.cfg:

innodb_file_per_table = 1 join_buffer_size = 1M open_files_limit = 10000 myisam_use_mmap = 1 query_cache_type = 1 table_open_cache = 2000 concurrent_insert = 2 max_connections = 3000 query_cache_size = 16M key_buffer_size = 16M read_buffer_size = 8M query_cache_limit = 4M query_cache_min_res_unit = 1K tmp_table_size = 64M thread_cache_size = 1500 sort_buffer_size = 2M max_heap_table_size = 64M innodb_buffer_pool_size = 5000M read_rnd_buffer_size = 128M thread_concurrency = 8 thread_stack = 1M innodb_log_buffer_size = 2M 

谢谢。

    有两件事要考虑:

    1)你的查询是否有适当的索引?

    2)你可以添加RAM到你的服务器?

    通过解决#1问题,您将显着减less满表查询所需的全表扫描数量。 但是,您需要花费大量时间来了解造成最多IO负载的查询types。

    通过寻址#2,你将允许更多的数据库被caching在RAM中,这将同时加速查询以及减lessIO。

    jbd2是用于将文件系统日志同步到磁盘的内核进程。 这意味着你的MySQL设置目前是写入绑定的。

    比如jdb2的高负载对于如此低的查询次数(200每秒)是相当奇怪的,特别是对于快速的SSD。 你使用无caching的RAID卡吗? 它可能会禁用您的SSD内部caching,给予糟糕的性能。 如果是这样,你可以尝试:

    1. 重新启用您的磁盘的专用caching
    2. 使用my.cnf选项innodb_flush_log_at_trx_commit=0
    3. 使用具有512 + MB保护的DRAMcaching的支持BBU的RAID卡

    请注意,选项n.1和n.2有一个很小但非零的风险,可以在掉电的情况下丢失一些交易。 到目前为止,最安全的select是第三个 – 购买一个正确的RAID卡。

    你的my.cnf包括4行,应该删除,他们是

     read_buffer_size read_rnd_buffer_size join_buffer_size thread_stack 

    这些都是每个连接RAM的要求,并驱动你的RAM足迹比必要的高得多。 让DEFAULTS为你工作,以提高响应时间与呼吸RAM的空间。

    为了更详细的分析,添加到OriginalPost以下,

     SHOW GLOBAL STATUS; SHOW GLOBAL VARIABLES; SHOW ENGINE INNODB STATUS; 

    最多五个具体的cfgbuild议,每天一个被应用,监测。