特點:支援事務。鎖定機制的改進,Innodb改變了MylSAM的鎖機制,實作了行鎖。實作外鍵。.frm檔案來存放結構定義相關的中繼資料,但是表資料和索引資料是存在一起的,每個表單獨存放還是表存放在一起,完全由使用者來決定。
理論:Innodb的實體結構分為兩大部分
資料檔案(表資料和索引資料)
存放表中的資料和所有的索引資料,包括主鍵和其他普通索引。Innodb中,存在了表空間這樣的概念,和oracle的表空間又有較大的不同。Innodb的表空間分為兩種形式。一種是共享表空間,就是所有表和索引資料存放在同一個表空間中,通過Innodb_data_file_path來指定,增加資料檔案需要停機重新開機。獨享表空間就是每個表的資料和索引被存放在一個單獨的.idb檔案中。雖然可以自行設定使用共享表空間還是獨享表空間來存放我們的表,但是共享表空間必須存在,Innodb的undo資訊和其他一些中繼資料資訊都是存放在共享表空間裡的。共享表空間的資料檔案可以設定為固定大小和可自動擴充大小。
當檔案表空間用完時,必須為其增加資料檔案,隻有共享表空間可以增加資料檔案。操作就是在Innodb_data_file_path參數都沒安裝标準格式設定好檔案路徑和相關屬性即可。Innodb在建立新資料檔案時是不會建立目錄的,指定目錄不存在,則會報錯。
日志檔案(和oracle的redo日志比較,同樣可以設定多個日志組,同樣采用輪循政策來順序寫入。
Innodb是事務的存儲引擎,系統carsh對他來說并不能造成嚴重的損失,由于有redo日志的存在,checkpoint機制的保護,Innodb完全可以通過redo日志将資料庫crash時刻已經完成但沒有來得及将資料寫入磁盤的事務恢複,也能夠将所有部分完成并已經寫入磁盤的未完成事務復原并将資料還原。
Innodb在功能特性方面和MylSAM存儲引擎有較大的差別,在配置上面也是單獨處理的。在mysql啟動參數檔案設定中,Innodb的所有參數基本上都帶有字首innodb_,和所有Innodb相關的系統變量一樣,所有的innodb相關的系統狀态值也同樣全部以innodb_字首。
MylSAM和Innodb差別
MylSAM不支援事務,而Innodb支援。Innodb的autocammit預設是打開的,即每條sql語句都會預設被封裝成一個事務,自動送出,會影響速度,是以最好把多餘的sql語句顯示放在begin和commit之間,組成一個事務送出。
檢視Innodb的事務是否打開:show variables like '%autocommit%';
Innodb至此資料行鎖定,MylSAM不支援,隻支援鎖定整個表。即MylSAM同一個表上的讀鎖和寫鎖是互斥的,MylSAM并發讀寫是如果等待隊列中既有讀請求又有寫請求,預設寫請求的優先級高,集使獨請求先到,是以MyLSAM不适合于有大量查詢和修改并存的情況,查詢程序會長時間阻塞,因為MylSAM是鎖表。
Innodb支援外鍵,MylSAM不支援
Innodb不支援全文索引,而MylSAM支援
Mysqlslap性能測試MySQL兩種存儲引擎
Mysqlslays是mysql自帶的基準測試工具,優點:查詢資料,文法簡單,靈活容易使用,可以模拟多個用戶端同時并發的想伺服器發出查詢更新,給出了性能測試資料而且提供了多種引擎的新學年比較.mysqlslay為mysql性能優化前後提供了直覺的驗證依據。
壓力測試工具mysqlslap,關于選項手冊以及--help介紹:
--concurrency代表并發數量,多個可以用逗号隔開。
--engines代表要測試的引擎,可以多個,用分隔符隔開
--itertions代表運作這些測試多少次,集運作多少次後,得到結果。
--auto-generate-sql代表用系統自己生成SQL腳本來測試
--auto-generate-sql-load-type測試的是讀還是寫還是兩者混合
--number-of-queries代表總共要運作多少次查詢,每個客戶運作的查詢數量可以用查詢總數并發數來計算。
--debug-info代表額外輸出CPU以及記憶體的相關資訊
--number-int-cols代表測試表中的INTEGER類型的屬性有幾個
--create-schema代表自己定義的模式(在mysql總也就是庫即建立測試的資料庫)
--query代表自己的sql腳本
--only-print如果隻想列印sql語句是什麼,可以用這個選項
--csv=name生産CSV格式資料檔案
檢視資料庫預設最大連接配接數:show variables like '%max_connections%';
不同版本預設最大連接配接不差别。一般生成環境下添加max_connectoins=1024
檢視mysql預設使用存儲引擎:show engines;
用自帶的sql腳本來測試:mysqlslap --default-file=/etc/my.cnf --concurrency=100,200 --iterations=1 --number-int-cols=20 --number-char-cols=30 --auto-generate-sql --auto-generate-sql-add-autoincerement --auto-generate-sql-load-type=mixed --engine=myisam,innodb --number-of-queries=2000 -uroot- p123455 -verbose 說明:模拟測試兩次讀寫并發,第一次100,第二次200,自動生成sql腳本,測試表包含20個init字段,30個char字段,每次執行2000查詢請求,測試引擎分别是myisam,innodb
本文轉自 宏強 51CTO部落格,原文連結:http://blog.51cto.com/tanhong/1903943