INNODB

INNODB,是Mysql5.7的默認存儲引擎,是事務安全的,支持ACID,具備提交,回滾和crash-recovery【災備】能力,以保護用戶數據。html

優點:一旦Server崩潰,Innodb會自動保存已提交的數據,undo未被提交的事務;不會產生業務上的影響。算法

Innodb buffer pool 會緩存被訪問的數據,可加速數據處理。sql

將關聯數據拆分到多個表,需創建外鍵【foreign key】以確保數據完整性。緩存

爲表創建適當的主鍵【primary key】,這樣在引用主鍵時where ,order by ,group by ,join 會很快。安全

在 insert,update ,delete 時自動使用change buffering機制,緩存已更改數據。app

Adaptive Hash Index 風格會加快耗時的重複數據查詢。性能

壓縮表和相關index.spa

能夠較小的影響【性能和可用性】來建立和刪除index.線程

使用DYNAMIC row format,對於BLOB和長文本類型的處理更高效。版本控制

能夠經過查詢 INFORMATION_SCHEMA中表來監控存儲引擎的內部工做狀況。

經過查詢performance_schema中表來監控存儲引擎的詳細性能信息。

For InnoDB-specific tuning techniques you can apply in your application code, see Section 9.5, 「Optimizing for InnoDB Tables」.

Innodb 現能夠使用FULLTEXT索引執行全文檢索;

Innodb 如今具備更出色的讀表現。

佈置於只讀媒介上的程序現能夠使用Innodb表。

InnoDB 是多版本控制存儲引擎,將被改變行的舊版本信息存儲於表空間的rollback segment 區域中。Innodb可以使用該區域的信息執行undo操做【在事務回滾時】;也使用該信息構建譔行的早期版本數據。

 INNODB configure

INNODB buffer pool is used to cache data and index in memory.In configue file ,innodb_buffer_pool_size is about 50%-80% of computer's memory.

innodb_old_blocks_pct, 在buffer pool 中舊數據的佔比【百分比】

innodb_old_blocks_time,在buffer Pool 中被插入舊區中的數據在第一次被訪問多久後再移入新區【若是還存在】

innodb_buffer_pool_chunk_size 

在設置innodb_buffer_pool_instances時,保證每個buffer_pool實例都至少有一個GB,這樣纔可以最大可能的提升效率,默認時innodb_buffer_pool_instances=1。

在innodb_buffer_pool的管理上,Mysql不是使用嚴格意義上的LRU算法,Innodb使用了一種技術來最大化的減小被載入Buffer Pool但從沒使用的數據。innodb_old_blocks_pct,設置非熱點數據佔比,默認37%,該值不該太高;innodb_old_blocks_time,設值窗口時間,即在這個時間內的訪問不被載入新區,該值設置越大,數據過時的越快,默認一秒【1000】。

監測Buffer pool 的設置效果,可以使用 SHOW ENGINE INNODB STATUS,查看buffer pool 使用統計狀況。

如:

配置Innodb中dirty pages處理,在Innodb中有專門的後臺Task作Flushing的操做,有兩個觸發臨界點:一個是innodb_max_dirty_pages_pct,設置dirty pages的佔比,當大於等於該佔比時觸發Flushing【根據RedoLog的產生速度和刷新頻率來肯定實際佔比】;第二個是當Log文件的空間用盡,達到sharp checkpoiont而進行Flushing【這種大量IO會對Mysql性能產生較大影響】,爲了不這種情形出現,可以使用自適應算法【self-adapting algorithm】,可經過innodb_adaptive_flushing來設置期啓用與否。

咱們知道buffer pool裏存放了不少熱點數據,爲了在重啓Server時恢復最最經常使用的熱點數據,加速預熱,咱們能夠保存Buffer pool 的狀態信息以便恢復時使用。

可經過innodb_buffer_pool_dump_at_shutdown,innodb_buffer_pool_load_at_startup來配置是否啓用buffer pool 狀態保存,innodb_buffer_pool_dump_pct配置捨棄熱點數據的百分比【25-100】。其實保存文件是很小的,由於其中只保存了定位數據的位置信息【tablespaceId和pageId】,保存文件默認是在Data directory下的ib_buffer_pool。保存的這些位置信息其實來自於information_schema.innodb_buffer_page_lru表中。固然該文件路徑名稱也能夠經過系統變量:innodb_buffer_pool_filename配置。

若是須要緊急保存狀態,可 set Global innodb_buffer_pool_dump_now=ON;若在運行時想恢復,可set global innodb_buffer_pool_load_now=ON;

Mysql 有單獨的後臺線程來作這個事。

顯示Buffer pool dump和load進程狀態信息:

相關文章
相關標籤/搜索