Innodb存儲引擎

特點:支持事務。鎖定機制的改進,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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章