MySQL 緩存

MySQL 超時

  • connect_timeout 與客戶端連接建立超時,默認10秒
  • interactive_timeout 交互終端超時斷開,默認28800秒
  • wait_timeout 非交互終端超時斷開,默認28800秒
  • net_read_timeout 從客戶端讀取數據超時,默認30秒
  • net_write_timeout 向客戶端寫入數據超時,默認60秒
  • innodb_lock_wait_timeout 鎖等待超時,默認50秒
  • innodb_rollback_on_timeout 超時後回滾整個事務操作,默認OFF
  • slave_net_timeout 從庫讀取binlog失敗後,等待指定秒後重新連接主庫,默認60秒

查詢緩存配置

  • have_query_cache 是否支持查詢緩存,默認yes
  • query_cache_limit select結果集大於該值時不緩存,默認1048576
  • qeury_cache_min_res_unit 查詢緩存申請的內存單位(塊)大小,默認4096,一般不改
  • query_cache_size 查詢緩存大小,默認1048576
  • query_cache_type
    • 0(OFF) 關閉查詢緩存,默認
    • 1(ON) 如果select語句沒有sql_no_cache選項,則使用查詢緩存
    • 2(DEMOND) 如果select語句沒有sql_cache選項,則不使用查詢緩存
  • query_cache_wlock_invalidate
    • 0(OFF) 鎖表後,該表的查詢緩存依舊有效,默認
    • 1(ON) 鎖表後,該表的查詢緩存失效

查詢緩存狀態

  • Qcache_free_blocks 查詢緩存中的內存碎片數量
    • 碎片過多表明查詢結果集較小,可適當減小query_cache_min_res_unit
    • 整理查詢緩存中的碎片,獲得一個較大的內存空閒空間
      flush query cache
      
    • 緩存碎片率 = Qcache_free_blocks / Qcache_total_blocks * 100%
  • Qcache_free_memory 查詢緩存中的可用內存
  • Qcache_hits 使用查詢緩存的次數
  • Qcache_inserts 查詢緩存中緩存過的select結果集數量(包括當前正在緩存的)
  • Qcache_lowmen_prunes 因查詢緩存已滿而刪除的select結果集數量
    • 該值較大表明查詢緩存較小
  • Qcache_not_cached 沒有進入查詢緩存的select語句個數
  • Qcache_queries_in_cache 查詢緩存中當前緩存着select結果集數量
  • Qcache_total_blocks 查詢緩存中的塊總數
  • Com_select 執行過的select語句數量
  • 查詢緩存的命中率 = Qcache_hits / Com_select * 100%

排序緩存配置

  • sort_buffer_size 排序緩存大小,默認262144
  • max_length_for_sort_data 排序sql中的全部字段長度總和小於該值時,使用優化排序方式,否則使用常規排序方式,默認1024
  • max_sort_length 使用列的前(默認1024)個字節排序
  • innodb_sort_buffer_size InnoDB用於創建/重建索引的排序緩存,默認1048576

排序緩存狀態

  • Sort_merge_passes 使用臨時文件完成排序操作的次數
    • 增加sort_buffer_size可減少使用臨時文件排序的次數
  • Sort_range 使用範圍排序的次數
  • Sort_rows 已經排序的記錄行數
  • Sort_scan 通過全表掃描完成排序的次數

join 連接緩存

  • join_buffer_size 兩表join但不能使用索引時,爲每張表分配的連接緩存,默認262144
    • 儘量實現索引join

表/表結構 緩存配置

  • table_open_cache 可以緩存表和視圖的數量
  • table_defination_cache 可以存儲的表結構數量
  • open_files_limit 可以打開的文件數量

InnoDB 重做日誌緩存配置

  • innodb_log_buffer_size 事務提交前,把重做日誌寫入緩存中
  • innodb_flush_log_at_trx_commit
    • 0 每隔一秒,把日誌緩存寫到日誌文件,並刷新到磁盤
    • 1 每次提交時,把日誌緩存寫到日誌文件,並刷新到磁盤
    • 2 每次提交是,把日誌緩存寫到日誌文件,每隔一秒刷新到磁盤

InnoDB 預讀配置

  • innodb_read_ahead_threshold 預讀的前後數據庫個數

FLUSH 語句

  • HOSTS 清空主機表
  • LOGS 關閉binlog文件,創建新編號binlog文件
  • PRIVILEGES 從數據庫授權表中重新裝載權限到緩存中
  • TABLES 關閉打開的表,清空查詢緩存
  • QUERY CACHE 整理碎片,不影響查詢緩存中現有數據
    • 清空查詢緩存
    RESET QUERY CACHE
    
  • TABLES WITH READ LOCK 關閉打開的表並加一個只讀鎖
    • 解鎖
    UNLOCK TABLES
    
  • STATUS 重置大多數狀態變量到0
  • MASTER(RESET MASTER) 刪除全部binlog文件,重建一個新的binlog文件
  • SLAVE(RESET SLAVE) 忘記主庫binlog文件位置,刪除relay log
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章