InnoDB是MySQL的數據庫引擎之一,為MySQL的默認存儲引擎,為MySQL AB發布binary的標準之一與傳統的ISAM與MyISAM相比,InnoDB的最大特色就是支持了ACID兼容的事務功能,類似于PostgreSQL。
InnoDB 是 MySQL 的數據庫引擎之一,現為 MySQL 的默認存儲引擎,為 MySQL AB 發布 binary 的標準之一。InnoDB 由 Innobase Oy 公司所開發,2006 年五月時由甲骨文公司并購。與傳統的 ISAM 與 MyISAM 相比,InnoDB 的最大特色就是支持了 ACID 兼容的事務(Transaction)功能,類似于 PostgreSQL。
目前 InnoDB 采用雙軌制授權,一個是 GPL 授權,另一個是專有軟件授權。
事務型數據庫的首選引擎,支持 ACID 事務,支持行級鎖定。InnoDB 是為處理巨大數據量時的最大性能設計。InnoDB 存儲引擎完全與 MySQL 服務器整合,InnoDB 存儲引擎為在主內存中緩存數據和索引而維持它自己的緩沖池。InnoDB 存儲它的表&索引在一個表空間中,表空間可以包含數個文件(或原始磁盤分區)。這與 MyISAM 表不同,比如在 MyISAM 表中每個表被存在分離的文件中。InnoDB 表可以是任何尺寸,即使在文件尺寸被限制為 2GB 的操作系統上。InnoDB 默認地被包含在 MySQL 二進制分發中。Windows Essentials installer 使 InnoDB 成為 Windows 上 MySQL 的默認表。
InnoDB 給 MySQL 提供了具有事務(transaction)、回滾(rollback)和崩潰修復能力(crash recovery capabilities)、多版本并發控制(multi-versioned concurrency control)的事務安全(transaction-safe (ACID compliant))型表。InnoDB 提供了行級鎖(locking on row level),提供與 Oracle 類似的不加鎖讀取(non-locking read in SELECTs)。InnoDB 鎖定在行級并且也在 SELECT 語句提供一個 Oracle 風格一致的非鎖定讀。這些特色增加了多用戶部署和性能。沒有在 InnoDB 中擴大鎖定的需要,因為在 InnoDB 中行級鎖定適合非常小的空間。InnoDB 也支持 FOREIGN KEY 強制。在 SQL 查詢中,你可以自由地將 InnoDB 類型的表與其它 MySQL 的表的類型混合起來,甚至在同一個查詢中也可以混合。這些特性均提高了多用戶并發操作的性能表現。在 InnoDB 表中不需要擴大鎖定(lock escalation),因為 InnoDB 的行級鎖定(row level locks)適宜非常小的空間。InnoDB 是 MySQL 上第一個提供外鍵約束(FOREIGN KEY constraints)的表引擎。
在技術上,InnoDB 是一套放在 MySQL 后臺的完整數據庫系統,InnoDB 在主內存中建立其專用的緩沖池用于高速緩沖數據和索引。InnoDB 把數據和索引存放在表空間里,可能包含多個文件,這與其它的不一樣,舉例來說,在 MyISAM 中,表被存放在單獨的文件中。InnoDB 表的大小只受限于操作系統的文件大小,可也可以每個表使用各自獨立的表空間,只需要啟用選項 innodb_file_per_table。
在 MySQL 的源代碼中,從 3.23.34a 開始包含 InnoDB 表引擎,并在 MySQL -Max 的二進制版本中激活。
1.如果 Unixtop 或 Windows 任務管理器(Task Manager)顯示服務的 CPU 占用率小于 70%,(shows that the CPU usage percentage with your workload is less than 70 %,)你的系統瓶頸可能在磁盤讀寫上?;蛟S你提交了大量的事務,或者是緩沖池(buffer pool)太小了。將緩沖池設大點會有所幫助,但一定要注意不能大于物理內存的 80%。
2.在一個事務中包含幾個修改。如果事務對數據庫進行了修改,那么在這個事務提交時 InnoDB 必須刷新日志到磁盤上。因為硬盤的旋轉速度通常至多為 167 轉/秒,那么只要磁盤不欺騙操作系統,提交的事務數目限止也同樣為 167 次/秒·用戶。
3.如果掉失最近的幾個事務無所謂的話,可以在 my.cnf 文件中將參數 innodb_flush_log_at_trx_commit 設置為 0。InnoDB 無論如何總是嘗試一秒刷新(flush)一次日志,盡管刷新并不能得到保證。
4.將日志文件(log files)設大一點,使日志文件的總和正好與緩沖池(buffer pool)一樣大。當 InnoDB 用光日志文件的空間時,它不得不在一個時間點上將緩沖池內修改過的內容寫到磁盤上。 小的日志文件可能引起不必要的磁盤寫操作。但是大的日志文件的缺點就是在數據恢復時將占用較長的時間。
5.同樣 log buffer 盡量設大點,比如說 8 MB。
6.如果要存儲變長的字符串或字段可能會包含大量的 NULLs,請使用 char 型字段代替 VARCHAR。一個 char(n)字段總是使用 n bytes 來存儲數據,即使這個字符串很短或是一個 NULL 值。較小的表更加適合緩沖池同時能夠減少磁盤 I/O 。
7.(適合從 3.23.41 以上版本) 在某些版本的 Linux 和 Unixes 中,使用 Unixfsync 或其它類似的方法將文件刷新到磁盤是異常地慢的。InnoDB 默認的方法就是 fsync。如果你對數據庫系統的磁盤寫性能不能感到滿意,你可以嘗試在 my.cnf 中將 innodb_flush_method 設置為 O_DSYNC,盡管 O_DSYNC 選項在多數的系統上看起來比較慢。
8.在向 InnoDB 導入數據時,請確認 MySQL 沒有打開 autocommit=1。否則每個插入語句都要將 log 刷新到磁盤。在你的 SQL 導入文件的第一行加入
set autocommit=0;并在最后一行加入 commit;
如果使用 mysqldump 選項--opt,你將會得到一個快速導入 InnoDB 表的轉儲(dump)文件,甚至可以不再使用上面所提的 set autocommit=0; ... commit;。
9.小心 insert 集全的大回滾(roolback):在插入時 InnoDB 使用插入緩沖來減少磁盤 I/O,但在相應的回滾中卻沒有使用這樣的機制。一個 disk-bound rollback 可能會花費相應插入時間的 30 倍。如果發生一個失控的回滾,你可以查看第 6.1 章節的技巧來停止它。
10.同樣也要小心一個大的 disk-bound 的操作。使用 DROP TABLE 或 truncate(從 MySQL-4.0 以上) 來清空一個表,而不要使用 delete FROM yourtable。
11.如果需要插入大量記錄行可以使用多行(multi-line)的 insert 來減少客戶端與服務器端的通信開銷:
insert INTO yourtable VALUES (1, 2), (5, 5);
這個技巧對插入任何表均有效,而不僅僅是 InnoDB。
12.如果在輔鍵上有 UNIQUE 約束,從 3.23.52 和 4.0.3 開始,可以通過在一個導入會話中將唯一鍵檢查(uniqueness check)關閉來提高數據導入速度:
SET UNIQUE_CHECKS=0;一個大的表導入這將減少大量的磁盤 I/O,因為這時 InnoDB 可能使用自身的插入緩沖來分批地記錄輔助索引。
13.如果在表中有一個子 FOREIGN KEY 約束,從 3.23.52 和 4.0.3 開始,可以通過在一個導入會話中將外鍵檢查(foreign key check)關閉來提高數據導入速度:
SET FOREIGN_KEY_CHECKS=0;
對一個大的表導入這將減少大量的磁盤 I/O。
輸出信息的某些注意點:
如果 TRANSACTIONS 部分報告鎖定等待(lock waits),那么你的應用程序可能有鎖爭用(lock contention)。輸出信息可以幫助跟蹤事務死鎖的原因。
semAPHORES 部分報告線程等待信號量以及統計出線程需要旋轉(spin)或等待(wait)一個互斥(mutex)或 rw-lock 信號量的次數。一個較大的線程等待信號量的次數可能是由于磁盤 I/O 引起,或 InnoDB 內部的爭用問題(contention problems)。爭用(Contention)可能是由于比較繁重的并發性查詢,或操作系統的線程調度的問題。 在這種情形下,可將 innodb_thread_concurrency 設置地小于默認的 8 。
FILE I/O 部分列出了文件 I/O 的等待請求。過大的值就意味著磁盤 I/O 瓶頸。
BUFFER POOL AND MEMORY 部分給出了頁面讀寫的統計。通過這些值可以計算出你的查詢通常所需的數據文件 I/O 量。
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...
在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...
在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...
OPPOa115與a115k的區別?A115K是A115的升級版,功能和java運行能力都強很多。比如火星文的輸入和顯示,手機內置的QQ2010*/QQ瀏覽器,圖片編輯器,后臺運行Java時支持播放音樂,軟件在線升級,最新固件和搜狗輸入法的集成等等都是A115沒有的。如何區分A115和A115K:手機型號一般會在電池倉或者后蓋上注明。去看看吧。此外,還可以在待機狀態下輸入*#6776#查看手機的所...
中國移動CMCC無線WIFI免費使用步驟?CMCC無線WIFI免費使用步驟1.打開手機,點擊【設置】選項,然后點擊【無線局域網】選項進入無線局域網頁面。選擇【CMCC-FR怎樣使用移動cmcc的wifi熱點? s CMCC無線局域網每個月可以免費使用10個小時,網速很快。如果能找到信號,可以嘗試連接。具體連接方法如下:1.首先搜索出信號【CMCC-FR如何連接CMCC的WiFi?1.確定你已經在營...
用XFire的方式調用WebService接口Spring沒有注入bean,導致調用接口方法時用到的dao接口沒有實例化?這應該是服務器的問題,與客戶端無關。初始化appuserservice后應啟動WebService。因此,配置自動掃描時,應注意順序。此外,請檢查appuserservice是否正確添加了批注并配置了自動掃描。Xfire是什么?Xfire是Java實現WebService的框架...