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