MySQL: InnoDB存儲引擎

一.MYSQL 版本:

Variable_name: version
        Value: 5.5.52-MariaDB
mysql

Innodb versionlinux

5.5.49-MariaDB-38.0 sql

內容增長compression、dynamic、linux AIO、多回滾段、全文索引、在線索引添加;數據庫

二.MYSQL體系

內存池:

  • 維護全部進程/線程須要訪問多個數據結構
  • 緩存磁盤上數據,髒頁checkpoint磁盤前數據緩存
  • 重作日誌redo log緩衝

image

後臺線程:

  • Master Thread

核心的後臺線程,主要將緩衝池中的數據換新到磁盤中,保證數據一致性。髒頁刷新,合併插入緩衝,UNDO頁(數據修改以前備份的數據用於rollback)緩存

  • IO Thread

Async IO (write,read,insert buffer,log) InnoDB 1.0.X後read write 分別增大4個。數據結構

能夠經過Innodb_read_io_threads和innodb_write_io_threads併發

命令:性能

show variables like ‘INNODB_%IO_THREADS’\G;線程

  • Purge Thread

清除線程,當事務被提交時候undo log就是不在須要,所以須要回收,故設立單獨線程,減緩master thread 壓力,提升存儲性能日誌

數據庫配置文件添加獨立命令啓動purge thread:

[mysqld]

innodb_purge_threads=1

innodb 1.2 後能夠設置4個purge threads

  • Page Cleaner Thread  

InnoDB1.2後面 髒頁刷入磁盤單獨放到一個線程完成減輕master thread 壓力,有利於查詢阻塞線程和提升存儲引擎的性能。

後臺線程做用:

  1. 負責刷新內存池中的數據,保證緩存中是最近的數據
  2. 修改後的數據文件刷新到磁盤
  3. 保證數據庫發生異常的狀況下Innodb恢復到正常運行狀態

內存:

緩衝池:

是一塊內存區域,爲彌補CPU和磁盤速度的鴻溝,先把讀到頁從磁盤→FIX到緩衝池中,下次讀到相同頁的時候先判斷再命中!

數據庫修改頁,首先修改緩衝池中的頁,而後再必定的頻率刷新到磁盤,經過checkpoint(能夠配置頻率)機制  間隔的刷新到磁盤。

建議64位系統;

緩衝池經過參數Innodb_buffer_pool_size

show variables like 'innodb_buffer_pool_size'\G;

單位:字節

image

InnoDB 1.0.X 容許多個緩衝實例,每一個頁平均分配到不一樣緩衝池實例,減小數據庫內存資源競爭增長併發,經過如下參數 innodb_buffer_pool_instances配置默認值爲1.

命令:

show variables like 'innodb_buffer_pool_instances'\G;

image

經過 show engine innodb status 查看整個存儲引擎的緩衝池狀態:略!

MYSQL5.6開始能夠經過下面表查詢緩衝池狀態:

select  pool_id,pool_size,free_buffers,database_pages  from  INNODB_BUFFER_POOL_STATS\G;

image

相關文章
相關標籤/搜索