InnoDB是為Mysql處理龐大資料量時的最大效能設計。它的CPU效率可能是任何其它基於磁碟的關聯式資料庫引擎所不能匹敵的。在資料量大的網站或應用程式中Innodb是倍受青睞的。那麼它就不需要優化了嗎,答案很顯然:當然不是! ! !
學習計畫很容易就被打斷,堅持也不容易。最近公司開會,要調整業務方向,建議學習NodeJS。 NodeJS之前我就會一點,但沒有深入研究。 Node的語法和客戶端Js基本上是一樣的,這半年來很少開發有客戶端的東西。本來JS基礎還行的我,也對這塊的知識陌生了。看起來知識都是用進廢退的,不常用了,過不了多久就會遺忘。所以又重新複習了JS的相關知識。學習了Node的伺服器與socket知識。 MySQL的計畫就這樣的擱淺起來,星期天的時候吃吃喝睡睡,早上又懶的要命,熬著熬著就熬到了下午。廢話不多說了,繼續進行MySQL的最佳化系列,這次看下InnoDB的優化項目。
InnoDB的主索引是叢集索引,索引與資料公用資料表空間。對InnoDB來說,資料就是索引,索引就是資料。 InnoDB快取機制與MyISAM的最大差異在於,InnoDB不僅快取索引,同時還會快取資料。
一、InnoDB快取池
InnoDB快取池(InnoDB buffer pool)是提升InnoDB提升效能的關鍵,它既可以快取數據,又可以快取索引,甚至其他的管理資料(元資料、行級鎖)等。可以使用show variables like 'innodb%pool%'; 來檢視相關的參數選項。
mysql> show variables like 'innodb%pool%'; +-------------------------------------+----------------+ | Variable_name | Value | +-------------------------------------+----------------+ | innodb_additional_mem_pool_size | 8388608 | | innodb_buffer_pool_dump_at_shutdown | OFF | | innodb_buffer_pool_dump_now | OFF | | innodb_buffer_pool_filename | ib_buffer_pool | | innodb_buffer_pool_instances | 8 | | innodb_buffer_pool_load_abort | OFF | | innodb_buffer_pool_load_at_startup | OFF | | innodb_buffer_pool_load_now | OFF | | innodb_buffer_pool_size | 134217728 | +-------------------------------------+----------------+
innodb_buffer_pool_size
innodb_buffer_pool_size是用來設定InnoDB快取池(InnoDBBufferPool)的大小,預設值是128M.InnoDB快取快取池的大小對InnoDB的整體效能影響較大,如果目前的MySQL伺服器專門用作MySQL服務,那麼可以盡量的增加該參數的大小。
innodb_buffer_pool_instance
innodb_buffer_pool_instance預設值是1,表示InnoDB快取池被分割為一個區域,適當的增加該參數值,可以提升InnoDB的並發效能。
innodb_additional_mem_pool_size
#指定InnoDB用來儲存資料字典和其他內部資料的快取大小,預設值是2M.InnoDB的表個數越多,就應該適當的增加該參數的大小。
二、InnoDB快取池內部結構
InnoDB在記憶體中維護一個快取池用於快取資料和索引。快取池可以認為是一條很長的鍊錶(list).這個鍊錶分為兩個子鍊錶,一個子鍊錶存放old page數據,old page 數據是長時間未被訪問的數據頁,亮一個子鍊錶存放new page,new page 是最近被存取的資料頁。 old page 預設佔整個鍊錶大小的37%,可以透過innodb_old_blocks_pct參數查看.
mysql> show variables like 'innodb_old_blocks%'; +------------------------+-------+ | Variable_name | Value | +------------------------+-------+ | innodb_old_blocks_pct | 37 | | innodb_old_blocks_time | 1000 | +------------------------+-------+
old page 和 new page 的交會點稱為midpoint。
當使用者存取資料時,InnoDB首先會再InnoDB快取中查找數據,如果快取池中沒有數據,InnoDB會將硬碟中的資料插入到InnoDB快取池中,如果快取池已滿,則利用LRU演算法清楚過期的舊資料
三、InnoDB快取池預熱。
MySQL伺服器啟動一段時間後,InnoDB會將經常存取的資料(業務數據,管理資料)放入InnoDB快取中,即InnoDB快取池中保存的是頻繁需要存取的資料(簡稱熱數據)。當InnoDB快取池的大小是幾十G或是上百G的時候,如果重新啟動MySQL,如果將之前InnoDB快取池中的熱資料載入到InnoDB快取池中呢?
如果單靠InnoDB本身預熱的InnoDB快取池,將會是一個不短的時間週期,這對於業務繁忙的系統來說,長時間的掛機,是嚴重的生產事故,不能夠容忍。幸好在MySQL5.6版本支援關閉服務時,可以將熱數據保存至硬碟,MySQL重啟是先將硬碟中的熱資料載入到InnoDB的快取中去,這樣可以縮短預熱的時間,提高業務繁忙高並發時的效率。
mysql> show variables like '%innodb%pool%'; +-------------------------------------+----------------+ | Variable_name | Value | +-------------------------------------+----------------+ | innodb_additional_mem_pool_size | 8388608 | | innodb_buffer_pool_dump_at_shutdown | OFF | | innodb_buffer_pool_dump_now | OFF | | innodb_buffer_pool_filename | ib_buffer_pool | | innodb_buffer_pool_instances | 8 | | innodb_buffer_pool_load_abort | OFF | | innodb_buffer_pool_load_at_startup | OFF | | innodb_buffer_pool_load_now | OFF | | innodb_buffer_pool_size | 134217728 | +-------------------------------------+----------------+
innodb_buffer_pool_dump_at_shutdown
預設是關的,如果開啟參數,停止MySQL服務是,InnoDB快取中的熱資料將會儲存到硬碟中。
innodb_buffer_pool_load_at_starup
#默认是关闭的,如果开启该参数,启动MySQL服务时,MySQL将本地硬盘的热数据加载到InnoDB缓存池中。
innodb_buffer_pool_dump_now
默认关闭,如果开启该参数,停止MySQL服务时,以手动方式将InnoDB缓存池中的热数据保存到本地硬盘。
innodb_buffer_pool_load_now
默认关闭,如果开启该参数,启动MySQL服务时,以手动方式将本地硬盘的数据加载到InnoDB缓存池中,
innodb_buffer_pool_filename
如果开启InnoDB预热功能,停止MySQL服务是,MySQL将InnoDB缓存池中的热数据保存到数据库根目录下,默认文件名是这个参数的值。
开启InnoDB缓存后,可以使用如下命令查看当前InnoDB缓存池预热的状态信息:
show status like 'innodb_buffer%'; +---------------------------------------+-------------+ | Variable_name | Value | +---------------------------------------+-------------+ | Innodb_buffer_pool_dump_status | not started | | Innodb_buffer_pool_load_status | not started | | Innodb_buffer_pool_pages_data | 218 | | Innodb_buffer_pool_bytes_data | 3571712 | | Innodb_buffer_pool_pages_dirty | 0 | | Innodb_buffer_pool_bytes_dirty | 0 | | Innodb_buffer_pool_pages_flushed | 1 | | Innodb_buffer_pool_pages_free | 7973 | | Innodb_buffer_pool_pages_misc | 0 | | Innodb_buffer_pool_pages_total | 8191 | | Innodb_buffer_pool_read_ahead_rnd | 0 | | Innodb_buffer_pool_read_ahead | 0 | | Innodb_buffer_pool_read_ahead_evicted | 0 | | Innodb_buffer_pool_read_requests | 1497 | | Innodb_buffer_pool_reads | 219 | | Innodb_buffer_pool_wait_free | 0 | | Innodb_buffer_pool_write_requests | 1 | +---------------------------------------+-------------+
这里面的英语都比较简单,就不解释了。
四、InnoDB实时监控
mysql> show engine innodb status\G
以上是MySQL優化之InnoDB優化程式碼詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

MySQL適合初學者學習數據庫技能。 1.安裝MySQL服務器和客戶端工具。 2.理解基本SQL查詢,如SELECT。 3.掌握數據操作:創建表、插入、更新、刪除數據。 4.學習高級技巧:子查詢和窗口函數。 5.調試和優化:檢查語法、使用索引、避免SELECT*,並使用LIMIT。

MySQL通過表結構和SQL查詢高效管理結構化數據,並通過外鍵實現表間關係。 1.創建表時定義數據格式和類型。 2.使用外鍵建立表間關係。 3.通過索引和查詢優化提高性能。 4.定期備份和監控數據庫確保數據安全和性能優化。

MySQL是一個開源的關係型數據庫管理系統,廣泛應用於Web開發。它的關鍵特性包括:1.支持多種存儲引擎,如InnoDB和MyISAM,適用於不同場景;2.提供主從復制功能,利於負載均衡和數據備份;3.通過查詢優化和索引使用提高查詢效率。

SQL用於與MySQL數據庫交互,實現數據的增、刪、改、查及數據庫設計。 1)SQL通過SELECT、INSERT、UPDATE、DELETE語句進行數據操作;2)使用CREATE、ALTER、DROP語句進行數據庫設計和管理;3)複雜查詢和數據分析通過SQL實現,提升業務決策效率。

MySQL的基本操作包括創建數據庫、表格,及使用SQL進行數據的CRUD操作。 1.創建數據庫:CREATEDATABASEmy_first_db;2.創建表格:CREATETABLEbooks(idINTAUTO_INCREMENTPRIMARYKEY,titleVARCHAR(100)NOTNULL,authorVARCHAR(100)NOTNULL,published_yearINT);3.插入數據:INSERTINTObooks(title,author,published_year)VA

MySQL在Web應用中的主要作用是存儲和管理數據。 1.MySQL高效處理用戶信息、產品目錄和交易記錄等數據。 2.通過SQL查詢,開發者能從數據庫提取信息生成動態內容。 3.MySQL基於客戶端-服務器模型工作,確保查詢速度可接受。

構建MySQL數據庫的步驟包括:1.創建數據庫和表,2.插入數據,3.進行查詢。首先,使用CREATEDATABASE和CREATETABLE語句創建數據庫和表,然後用INSERTINTO語句插入數據,最後用SELECT語句查詢數據。

MySQL適合初學者,因為它易用且功能強大。 1.MySQL是關係型數據庫,使用SQL進行CRUD操作。 2.安裝簡單,需配置root用戶密碼。 3.使用INSERT、UPDATE、DELETE、SELECT進行數據操作。 4.複雜查詢可使用ORDERBY、WHERE和JOIN。 5.調試需檢查語法,使用EXPLAIN分析查詢。 6.優化建議包括使用索引、選擇合適數據類型和良好編程習慣。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

SublimeText3漢化版
中文版,非常好用

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具