Mysql內存管理及優化


1.內存優化原則

  1) 將盡量多的內存分配給MySQL做緩存,但要給操作系統和其他程序預留足夠內存。
  2) MyISAM 存儲引擎的數據文件讀取依賴於操作系統自身的IO緩存,因此,如果有MyISAM表,就要預留更多的內存給操作系統做IO緩存。
  3) 排序區、連接區等緩存是分配給每個數據庫會話(session)專用的,其默認值的設置要根據最大連接數合理分配,如果設置太大,不但浪費資源,而且在並發連接較高時會導致物理內存耗盡。

2.MyISAM 內存優化

  myisam存儲引擎使用 key_buffer 緩存索引塊,加速myisam索引的讀寫速度。對於myisam表的數據塊,mysql沒有特別的緩存機制,完全依賴於操作系統的IO緩存。

  key_buffer_size:
    key_buffer_size決定MyISAM索引塊緩存區的大小,直接影響到MyISAM表的存取效率。可以在MySQL參數文件中設置key_buffer_size的值,對於一般MyISAM數據庫,建議至少將1/4可用內存分配給key_buffer_size。
    在/usr/my.cnf 中做如下配置:key_buffer_size=512M 

  read_buffer_size:
    如果需要經常順序掃描myisam表,可以通過增大read_buffer_size的值來改善性能。但需要注意的是read_buffer_size是每個session獨占的,如果默認值設置太大,就會造成內存浪費。

  read_rnd_buffer_size:

    對於需要做排序的myisam表的查詢,如帶有order by子句的sql,適當增加 read_rnd_buffer_size 的值,可以改善此類的sql性能。但需要注意的是 read_rnd_buffer_size 是每個session獨占的,如果默認值設置太大,就會造成內存浪費。

3.InnoDB 內存優化

  innodb用一塊內存區做IO緩存池,該緩存池不僅用來緩存innodb的索引塊,而且也用來緩存innodb的數據塊。

  innodb_buffer_pool_size:
    該變量決定了 innodb 存儲引擎表數據和索引數據的最大緩存區大小。在保證操作系統及其他程序有足夠內存可用的情況下,innodb_buffer_pool_size 的值越大,緩存命中率越高,訪問InnoDB表需要的磁盤I/O 就越少,性能也就越高。
    innodb_buffer_pool_size=512M

  innodb_log_buffer_size:
    決定了innodb重做日志緩存的大小,對於可能產生大量更新記錄的大事務,增加innodb_log_buffer_size的大小,可以避免innodb在事務提交前就執行不必要的日志寫入磁盤操作。
    innodb_log_buffer_size=10M


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM