mysql用於分配記憶體的引數
除了常見的key_buffer_size/innodb_buffer_pool/query_cache_size以外,還有一些個容易被忽略的引數;
它們或對特定操作有重要影響,或在某些情況下佔有過量記憶體,從而導致一些無法預料又很難檢測的狀況;
Thread_stack:預設256KB,如果sql過於複雜,比如發生大量遞迴呼叫,可能需要更大的值,否則會出現”thread stack overrun:…”;在AMD64平臺上有相應BUG,如無特別需求,建議不要手工設定;
Net_buffer_length:每個執行緒都有一個connection buffer和result buffer,預設為此值;但可以根據實際需求自動調整,上限為max_allowed_packet,使用完畢後會自動回落;只能在global級別調整,預設16k最大1M;
Read_buffer_size:順序掃描MyISAM表時為每個表分配的快取,以4k為基本單位,預設128K;對於所有引擎,以下3個場景也適用:
使用order by排序時,快取臨時檔案中的索引;向分割槽表批次插入資料;快取nested查詢的結果集;
此引數不只影響順序讀,而且還影響寫操作:將順序寫快取起來直至=min(read_buffer_size,8k)才開始物理寫,適用於select into … outfile,以及filesort—當merge result寫向臨時檔案時
http://venublog.com/2010/06/23/how-read_buffer_size-impacts-write-buffering-and-write-performance/
此引數不應大於max_allowed_packet,否則可能導致replication中斷,slave報錯” log event entry exceeded max_allowed_packet; Increase max_allowed_packet on master”
http://www.mysqlperformanceblog.com/2012/06/06/read_buffer_size-can-break-your-replication/
Read_rnd_buffer_size:官方文件定義為When reading rows from a MyISAM table in sorted order following a key-sorting operation, the rows are read through this buffer to avoid disk seeks
當使用傳統的雙路檔案排序時,在第2次讀時用於快取資料;
Join_buffer_size:用於索引範圍掃描或執行全表掃描的join操作,http://dev.mysql.com/doc/refman/5.5/en/nested-loop-joins.html
Sort_buffer_size:如果sort_merge_passes偏高,則考慮調大此引數,以加速group by/order by,但即使執行緒用不完也會 全部分配,故需要謹慎操作;
Thread_cache_size:最大可快取的thread數量,通常每個佔有256K,不會消耗太多記憶體
Bulk_insert_buffer_size:預設8M,當對MyISAM非空表執行insert … select/ insert … values(…),(…)或者load data infile時,使用樹狀cache快取資料,每個thread分配一個;
注:當對MyISAM表load 大檔案時,調大bulk_insert_buffer_size/myisam_sort_buffer_size/key_buffer_size會極大提升速度
http://venublog.com/2007/11/07/load-data-infile-performance/
Myisam_sort_buffer_size:當對MyISAM表執行repair table或建立索引時,用以快取排序索引;設定太小時可能會遇到” myisam_sort_buffer_size is too small”
Myisam_max_sort_file_size:當對MyISAM表重建索引時(repair/alter table/load data infile),允許使用的臨時檔案最大值;如果超過此限制索引建立則改用key cache,此時show processlist會顯示該執行緒處於”repair with keycache”而非”repair by sorting”,前者逐條建立索引記錄;另外,當指定的tmpdir目錄空間不足時也會導致類似情形;
Max_length_for_sort_data:決定file sort時使用哪種演算法,如果返回列的長度總和小於此,則使用最新的單路排序;
Max_heap_table_size:memory表的最大大小
Temp_table_size:sql執行過程中生成的臨時檔案(記憶體)的大小,如果大於min(tmp_table_size, max_heap_table_size)或使用到blob/text,則改用磁碟儲存;
Open_table_cache:儲存開啟的檔案描述符,每個執行緒一個;5.1之前為table_cache,包含 檔案描述符和frm檔案,5.1後拆分成兩個引數;
Table_definition_cache:儲存frm檔案,不同於open_table_cache的per-thread,這些檔案可被所有執行緒共享;5.1引入;
與MyISAM不同,InnoDB的open table和open file並無直接聯絡,即開啟frm表時其相應的ibd檔案可能處於關閉狀態;
故InnoDB只會用到table_definiton_cache,不會使用table_open_cache;
其frm檔案儲存於table_definition_cache中,而idb則由innodb_open_files決定(前提是開啟了innodb_file_per_table);
除此之外,innodb還在記憶體中維護一個data dictionary,用於記錄所有訪問過的表,即便表已經關閉了也不釋放,show innodb status會顯示該部分記憶體大小;
如果這兩個引數設定過大,有可能會消耗較多記憶體
除此之外,還有一些由grant/create user等語句佔有的記憶體,只分配不釋放,可定期呼叫flush privileges回收;
Innodb的innodb_buffer_pool的額外開銷
http://space.itpub.net/15480802/viewspace-755616
Mysql用於快取的記憶體
http://space.itpub.net/15480802/viewspace-755582
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15480802/viewspace-757509/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mysql記憶體引數分類大全MySql記憶體
- MySQL 配置InnoDB的記憶體分配器MySql記憶體
- MySQL OOM 系列一 Linux記憶體分配MySqlOOMLinux記憶體
- MySQL記憶體管理,記憶體分配器和作業系統MySql記憶體作業系統
- 垃圾收集器與記憶體分配策略_記憶體分配策略記憶體
- 記憶體的分配與釋放,記憶體洩漏記憶體
- JVM記憶體引數配置JVM記憶體
- 從記憶體洩露、記憶體溢位和堆外記憶體,JVM優化引數配置引數記憶體洩露記憶體溢位JVM優化
- linux記憶體管理(一)實體記憶體的組織和記憶體分配Linux記憶體
- 動態記憶體分配記憶體
- C中的記憶體分配模型記憶體模型
- C語言的記憶體分配C語言記憶體
- jvm的記憶體引數配置(skycto JEEditor)JVM記憶體
- java-方法記憶體分配Java記憶體
- go記憶體分配器Go記憶體
- 深度理解glibc記憶體分配記憶體
- java基礎-記憶體分配Java記憶體
- hadoop 記憶體分配規則Hadoop記憶體
- C語言-記憶體分配C語言記憶體
- 記憶體分配策略學習記憶體
- Go記憶體分配和GC的理解Go記憶體GC
- Netty 中的記憶體分配淺析Netty記憶體
- JVM完整詳解:記憶體分配+執行原理+回收演算法+GC引數等JVM記憶體演算法GC
- Linux 虛擬記憶體引數配置Linux記憶體
- 【CDB】怎樣修改PDB的記憶體引數記憶體
- C++動態記憶體分配C++記憶體
- 記憶體分配問題處理記憶體
- mimalloc記憶體分配程式碼分析記憶體
- [20210126]探究oracle記憶體分配.txtOracle記憶體
- 【Java】 記憶體分配全面淺析Java記憶體
- JVM GC 與 記憶體分配策略JVMGC記憶體
- javascript堆疊記憶體分配的區別JavaScript記憶體
- [20191114]linux記憶體分配的討論.txtLinux記憶體
- new、delete、記憶體分配 的底層原理delete記憶體
- C程式記憶體的分配,const ,volatile,staticC程式記憶體
- STM32 記憶體分配解析及變數的儲存位置記憶體變數
- Python如何管理記憶體?記憶體分配機制是什麼?Python記憶體
- jvm:記憶體模型、記憶體分配及GC垃圾回收機制JVM記憶體模型GC
- solaris記憶體引數調整及管理記憶體