随机缓慢的MySQL查询

我知道这类问题经常出现。 但是我做了大量的研究,尝试了很多不同的设置,但是仍然有相同的问题:通常非常快的查询可能会随机地花费3到5秒。

该服务器是一个i7-3770(8核心)与32GB内存。 CPU使用率约为50%,而不是CPU高峰。 没有交换使用,可用内存平均约10GB。 我在CentOS 6上运行mysql 5.5.32。

已经为MySQL分配了9GB的RAM,它使用了大约2GB。 所有的数据都应该适合内存(600MB的数据,700MB的索引)。

平均每秒查询次数(无实际秒数):

  • 1.5select
  • 0.2更新
  • 0.05 INSERT

这是一个查询的例子,只需要几毫秒,但有时超过3秒:

# Query_time: 4.337884 Lock_time: 0.050146 Rows_sent: 1 Rows_examined: 1 SELECT me.id, me.url, me.filename, me.instance_id, me.virtual_id, me.status, me.user_id, me.time_added, me.time_finished, me.priority, me.size, me.delay, me.flash_delay, me.tries, me.details, me.json_file, me.html, me.shots, me.shot_interval, me.screen_width, me.screen_height FROM Screenshots me WHERE ( me.id = '5992705' ); 

id是主键。

尽pipe我有更多的SELECT比INSERT查询,我有更慢的INSERT比SELECT

我所尝试和testing的是:

  • 确保所有需要的索引在那里,但没有多余的,没有人没有使用
  • 当时没有CPU秒杀,没有IO秒杀,没有交换
  • MySQL作为从机的第二个实例,大多数SELECT查询都是在从机上完成的
  • 删除和TEXT和等效的数据types
  • 调整my.cnf

调整my.cnf帮了很多忙。 我试过查询caching启用和禁用,没有太大的区别。

使用从属于SELECT使得事情实际上变得最糟糕:我对主服务器的查询速度缓慢,但是可能高达12秒!

这里是我目前的my.cf(在这种情况下查询caching):

 tmp_table_size = 32M max_heap_table_size = 32M query_cache_type = 1 query_cache_size = 1M thread_cache_size = 50 open_files_limit = 65535 table_definition_cache = 1024 table_open_cache = 4096 innodb_flush_method = O_DIRECT innodb_log_files_in_group = 2 innodb_log_file_size = 256M innodb_log_buffer_size = 8M innodb_thread_concurrency = 8 innodb_flush_log_at_trx_commit = 0 innodb_file_per_table = 1 innodb_buffer_pool_size = 9G max_connections=1000 transaction-isolation = READ-UNCOMMITTED innodb_locks_unsafe_for_binlog = 1 innodb_io_capacity = 1000 innodb_change_buffering = inserts innodb_fast_shutdown = 0 key_buffer_size = 2G 

我没有想法。 我无法find解释这些慢查询的任何模式(频率,间隔等)。

什么是你的磁盘设置? 你不提这个。 听起来像它的IO界限。

innodb_io_capacity – 在默认情况下,除非您有充分的理由或基准certificate您的设置是正确的,否则没有理由改变它。

我怀疑你有这个设置太高。 InnoDB写入线程可以每秒钟在磁盘上抛出比他们能够处理更多的数据,从而导致I / O排队。