特色:支持事務。鎖定機制的改進,Innodb改變了MylSAM的鎖機制,實現了行鎖。實現外鍵。.frm文件來存放結構定義相關的元數據,可是表數據和索引數據是存在一塊兒的,每一個表單獨存放仍是表存放在一塊兒,徹底由用戶來決定。mysql
理論:Innodb的物理結構分爲兩大部分sql
數據文件(表數據和索引數據)
數據庫
存放表中的數據和全部的索引數據,包括主鍵和其餘普通索引。Innodb中,存在了表空間這樣的概念,和oracle的表空間又有較大的不一樣。Innodb的表空間分爲兩種形式。一種是共享表空間,就是全部表和索引數據存放在同一個表空間中,經過Innodb_data_file_path來指定,增長數據文件須要停機重啓。獨享表空間就是每一個表的數據和索引被存放在一個單獨的.idb文件中。雖然能夠自行設定使用共享表空間仍是獨享表空間來存放咱們的表,可是共享表空間必須存在,Innodb的undo信息和其餘一些元數據信息都是存放在共享表空間裏的。共享表空間的數據文件能夠設置爲固定大小和可自動擴展大小。
性能優化
當文件表空間用完時,必須爲其增長數據文件,只有共享表空間能夠增長數據文件。操做就是在Innodb_data_file_path參數都沒安裝標準格式設置好文件路徑和相關屬性便可。Innodb在建立新數據文件時是不會建立目錄的,指定目錄不存在,則會報錯。
服務器
日誌文件(和oracle的redo日誌比較,一樣能夠設置多個日誌組,一樣採用輪循策略來順序寫入。併發
Innodb是事務的存儲引擎,系統carsh對他來講並不能形成嚴重的損失,因爲有redo日誌的存在,checkpoint機制的保護,Innodb徹底能夠經過redo日誌將數據庫crash時刻已經完成但沒有來得及將數據寫入磁盤的事務恢復,也可以將全部部分完成並已經寫入磁盤的未完成事務回滾並將數據還原。
oracle
Innodb在功能特性方面和MylSAM存儲引擎有較大的區別,在配置上面也是單獨處理的。在mysql啓動參數文件設置中,Innodb的全部參數基本上都帶有前綴innodb_,和全部Innodb相關的系統變量同樣,全部的innodb相關的系統狀態值也一樣所有以innodb_前綴。
ide
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