mysql緩存配置

  Mysql二進制日誌緩存參數:

  binlog_cache_size     //事務緩存大小

  binlog_cahce_use      //事務緩存使用次數

  binblog_cache_disk_use  //事務緩存磁盤使用次數(內存緩存設置過小不夠用時)


  binlog_stmt_cache_size     //非事務語句緩存大小

  binlog_stmt_cache_use    //非事務語句緩存使用次數

  binlog_stmt_cache_disk_use  //非事務語句磁盤緩存使用次數


  我們知道InnoDB存儲引擎是支持事務的。實現事務需要依賴日誌技術,爲了性能,日誌編碼採用二進制格式。

  那麼,我們何時記錄日誌呢?有日誌的時候就直接寫入磁盤?但因爲磁盤的效率是很低的,如果你用過Nginx,一般Nginx輸出access log都是要緩衝輸出的。因此,記錄二進制日誌的時候,我們也需要考慮使用內存緩存。但由於緩存不是直接持久化,所以面臨着系統宕機時不能及時刷入磁盤的安全問題。因此,Cache需要權衡,既減少磁盤I/O,滿足性能的要求;又儘可能保證內存緩存中沒有殘留,及時的持久化,滿足安全要求。


  參數 binlog_cache_size 就是用來控制它的,一個事務在沒有提交(uncommitted)的時候,產生的日誌,記錄到Cache中;等到事務提交(committed)需要提交的時候,則把日誌持久化到磁盤。需要注意的是:binlog_cache不是全局的,而是以SESSION爲單位獨享分配的,也就是說當一個線程開始一個事務的時候,Mysql就會爲這個SESSION分配一個binlog_cache。系統默認的 binlog_cache_size 只有32k。當我們提交一個長事務的時候,比如批量導入數據,而cache裏面放不下的時候,mysql就會把已經提交的事務記錄到一個臨時文件中,等提交時再刷入日誌,但臨時文件的性能明顯要比內存低。固其大小需要權衡,查看當前cache的大小使用:

  mysql> show session variables like 'binlog_cache%';
  +-------------------+----------+
  | Variable_name 
    | Value    |
  +-------------------+----------+
  | binlog_cache_size | 67108864 |
  +-------------------+----------+
  1 row in set (0.00 sec)

  查看全局cache大小:
  mysql> show global variables like 'binlog_cache%';
  +-------------------+----------+
  | Variable_name   
| Value   |
  +-------------------+----------+
  | binlog_cache_size | 67108864 |
  +-------------------+----------+
  1 row in set (0.00 sec)


  查看配置文件:

  grep 'binlog_cache' /etc/my.cnf

  binlog_cache_size = 64M  #系統默認配置大小
  max_binlog_cache_size = 128M
  max_binlog_size = 200


  查看該值是否滿足需要:

  show status like "binlog_%";

  +-------------------------+-------------+
  | Variable_name 
     | Value    |
  +-------------------------+-------------+
  | Binlog_cache_disk_use  | 0 
     |
  | Binlog_cache_use 
   | 120402264  |
  +-------------------------+-------------+
  2 rows in set (0.00 sec)

  binlog_cache_disk_use表示緩存超出時,使用磁盤臨時文件的次數,爲0表示沒使用過,所以當前cache size夠用。如果沒有長事務long_trascation的話,則表示該值偏大。


  binlog_stmt_cache_size與binlog_cache_size類似,與之相對的是binlog_stmt_cache_disk_use。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章