mysql innodb 内存_MySQL的innodb和内存
innodb 存儲引擎三大特性:
1.insert buffer
使用情況:1.二級索引 2.非唯一索引
在寫密集的情況下,插入緩沖會占用過的內存,默認情況下中最大可以一半,可以修改ibuf_pool_size_per_max_size的值,如果設置值為3代表最多三分之一。(這個需要修改源碼)
參數:
innodb_change_buffer_max_size
2.自適應hash
innodb存儲引擎會監控對表上索引的查找,如果觀察到建立哈希索引可以帶來速度提示,
則建立哈希索引。自適應哈希通過緩沖池的B+樹構造而來,以此建立的速度很快,
而且不需要將整個表都創建哈希索引。innodb存儲會根據訪問的頻率和模式來為某些頁建立哈希索引.
參數控制:
innodb_adaptive_hash_index
3.double? write
當緩沖池的臟頁刷新時,并不直接寫磁盤,而是通過memcpy函數將臟頁先拷貝到內存之中的doublewrite buffer,之后通過doublewrite buffer再分2次,每次寫入1MB到共享表空間的物理磁盤上,然后馬上調用fsync函數,同步磁盤,避免緩沖寫帶來的問題。在在這個過程doublewrite 頁是連續的,是順序寫,開銷并不是很大
參數:
innodb_doublewrite
如果查看一個數據庫的io寫的繁忙程度,也可以通過2的參數比值是否大于64:
mysql> show status like '%innodb_dblwr%'\G;
*************************** 1. row ***************************
Variable_name: Innodb_dblwr_pages_written
Value: 42
*************************** 2. row ***************************
Variable_name: Innodb_dblwr_writes
Value: 5
2 rows in set (0.00 sec)
doublewrite由兩部分組成,一部分為內存中的doublewrite buffer,其大小為2MB,另一部分是磁盤上共享表空間(ibdata x)中連續的128個頁,即2個區(extent),大小也是2M。doublewrite工作流程如下:
1、當一系列機制(main函數觸發、checkpoint等)觸發數據緩沖池中的臟頁進行刷新時,并不直接寫磁盤,而是會通過memcpy函數將臟頁先復制到內存中的doublewrite buffer,之后通過doublewrite buffer再分兩次、每次1MB順序寫入共享表空間的物理磁盤上。
2、馬上調用fsync函數,同步臟頁進磁盤
由于在這個過程中,doublewrite頁的存儲時連續的,因此寫入磁盤為順序寫,性能很高;完成doublewrite后,再將臟頁寫入實際的各個表空間文件,這時寫入就是離散的了。各模塊協作情況如下圖(第一步應為臟頁產生的redo記錄logbuffer,然后logbuffer寫入redo log file,為簡化次要步驟直接連線表示):
內存包含如下:
1.innodb_buffer_poor
1.1page
1.2index
1.3自適應hash
1.4insert buffer
1.5 lock info
1.6 數據字典信息
2.redo? buffer
3.innodb_additional_mem_pool_size
總結
以上是生活随笔為你收集整理的mysql innodb 内存_MySQL的innodb和内存的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: qsettings mysql_qt连接
- 下一篇: mysql select内部原理_数据库