MySQL innodb的读写参数优化

(1)读取参数

  1. # global buffer 以及 local buffer;
  2. # Global buffer:
  3. Innodb_buffer_pool_size
  4. innodb_log_buffer_size
  5. innodb_additional_mem_pool_size
  6. # local buffer(下面的都是 server 层的 session 变量,不是 innodb 的):
  7. Read_buffer_size
  8. Join_buffer_size
  9. Sort_buffer_size
  10. Key_buffer_size
  11. Binlog_cache_size

(2)写入参数

  1. innodb_flush_log_at_trx_commit
  2. innodb_buffer_pool_size
  3. insert_buffer_size
  4. innodb_double_write
  5. innodb_write_io_thread
  6. innodb_flush_method

(3)与IO相关的参数

  1. innodb_write_io_threads = 8
  2. innodb_read_io_threads = 8
  3. innodb_thread_concurrency = 0
  4. Sync_binlog
  5. Innodb_flush_log_at_trx_commit
  6. Innodb_lru_scan_depth
  7. Innodb_io_capacity
  8. Innodb_io_capacity_max
  9. innodb_log_buffer_size
  10. innodb_max_dirty_pages_pct

(4)缓存参数以及缓存的适用场景

query cache/query_cache_type

并不是所有表都适合使用query cache。造成query cache失效的原因主要是相应的table发生了变更

  • 第一个:读操作多的话看看比例,简单来说,如果是用户清单表,或者说是数据比例比较固定,比如说商品列表,是可以打开的,前提是这些库比较集中,数据库中的实务比较小。

  • 第二个:我们“行骗”的时候,比如说我们竞标的时候压测,把query cache打开,还是能收到qps激增的效果,当然前提示前端的连接池什么的都配置一样。大部分情况下如果写入的居多,访问量并不多,那么就不要打开,例如社交网站的,10%的人产生内容,其余的90%都在消费,打开还是效果很好的,但是你如果是qq消息,或者聊天,那就很要命。

  • 第三个:小网站或者没有高并发的无所谓,高并发下,会看到 很多 qcache 锁 等待,所以一般高并发下,不建议打开query cache