![mysql 內存結構介紹](http://p2.ttnews.xyz/loading.gif)
內存結構
mysql 內存組成和oracle類似,也可以分為SGA(system global area系統全局區)和PGA(program global area程序緩存區)
![mysql 內存結構介紹](http://p2.ttnews.xyz/loading.gif)
show variables like '%buffer%';
SGA組成
1.innodb_buffer_pool
用來緩存Innodb表的數據 索引 插入緩衝 數據字典等信息
2.innodb_log_buffer
事務在內存中的緩衝,即 redo log buffer的大小
3. query cache
高速查詢緩衝,該特性在生產不建議使用
4. key_buffer_size
myisam表的的緩存,只緩存索引數據
5.innodb_additional_mem_pool_size
用來保存數據字典信息和其他內部數據結構的內存池大小,mysql5.7.4該參數被移除
PGA
1.sort_buffer_size
用於sql語句在內存中的臨時排序
2. join_buffer_size
表連接使用,即bka(batched key access),感興趣可以瞭解bka 和bnl(block nested-loop)
3. read_buffer_size
表順序掃描的緩存,只應用於myisam表
4.read_rnd_buffer_size
表隨機讀緩存,這個應用於mrr
5.tmp_table_size
sql語句在排序或者分組時候沒有用到索引,就會使用到臨時表空間
6.max_heap_table_size
管理heap 和memory存儲引擎表
show variables like '%heap%';
show variables like '%tmp_table%';
我們看到tmp_table_size和max_heap_table_size默認值都是16M,生產環境下建議將這兩個值設置一樣大小,如果不同則取最小值進行限制,也不建議兩個值太小,否則會引發converted heap to myisam 的報錯