InnoDB: InnoDB 引擎是MySQL資料庫的另一個重要的存儲引擎、被包含在所有的二進位安裝包裡面、和其它的存儲引擎相比、InnoDB引擎的優點是支持相容ACID的事物、以及參數完整性(有外鍵)等。MySQL5.5.5以後預設的存儲引擎都是InnoDB引擎; 特性: 1:支持事務(要麼全成功 ...
InnoDB: InnoDB 引擎是MySQL資料庫的另一個重要的存儲引擎、被包含在所有的二進位安裝包裡面、和其它的存儲引擎相比、InnoDB引擎的優點是支持相容ACID的事物、以及參數完整性(有外鍵)等。MySQL5.5.5以後預設的存儲引擎都是InnoDB引擎; 特性: 1:支持事務(要麼全成功、要麼全失敗); 2:行級鎖定(更新數據時一般指鎖定當前行):通過索引實現、全表掃描忍讓時表鎖、註意間隙所的影響; 3:讀寫阻塞與事務的隔離級別相關; 4:具有非常高的緩存特性(既能緩存索引、也能緩存數據); 5:這個表和主鍵以組(Cluster)的方式存儲、組成一顆平衡樹; 6:所有的輔助索引(secondary indexes)都會保存主鍵信息; 7:支持分區、表空間類似與oracle 資料庫; 8:支持外鍵約束、不支持全文檢索(5.5.5之前的MyISAM支持全文檢索、5.5.5之後就不在支持); 9:相對MyISAM而言、對硬體的要求比較高 應用場景: 1:需要支持事務的業務; 2:行級鎖定對於高併發有很好的適應能力、但是需要保證查詢是通過索引完成的; 3:數據讀寫都很頻繁的環境(如:BBS、微博等); 4:對數據一致性要求比較高的業務(如充值、銀行轉轉); 5:硬體設備記憶體較大、可以很好的利用InnoDB較好的緩存能里來提高記憶體利用率、減少IO的開銷; 調優精要: 1:主鍵儘可能的小、避免給輔助索引(secondary indexes)帶來過大的空間負擔; 2:避免全表掃描(會使用表鎖); 3:儘可能的緩存所有的索引和數據、提高響應速度、減少磁碟IO消耗; 4:在大批量小插入的時候、儘量自己控制事務、而不使用autocommit自動提交; 5:合理設置Innodb_flush_log_ad_trx_commit 參數值、不要過度追求安全性; 如果值為0、log buffer每秒就會被刷寫日誌文件進入磁碟、提交事務的時候不做任何操作; 6:避免主鍵更新(主鍵更新會帶來大量的數據移動); 存儲: InnoDB表由共用表空間文件(ibdata1)、獨占表空間文件(ibd)、表結構文件(.frm)、以及日誌文件(redo)組成; 獨占表空間文件: 若將innodb_file_per_table 設置為 on、則系統將為每一個表單獨生成一個 table_name.ibd 的文件、在此文件中、存儲與該表相關的數據、索引、表的內容、數據字典等信息; 共用表空間文件: 在InnoDB存儲引擎中、預設表空間文件是 ibdata1 (主要存儲的是共用表空間數據),初始化為10M,可以擴展;共用表空間的大小 可以修改、使用 nnodb_data_file_path=ibdata1:370M;ibdata2:50M:autoextend 修改;使用共用表空間存儲方式時,Innodb的所有數據保存在一個單獨的表空間裡面,而這個表空間可以由很多個文件組成,一個表可以跨多個文件存在,所以其大小限制不再是文件大小的限制,而是其自身的限制。從Innodb的官方文檔中可以看到,其表空間的最大限製為64TB,也就是說,Innodb的單表限制基本上也在64TB左右了,當然這個大小是包括這個表的所有索引等其他相關數據。而在使用單獨表空間存儲方式時,每個表的數據以一個單獨的文件來存放,這個時候的單表限制,又變成文件系統的大小限制了。 以下即為不同平臺下,單獨表空間文件最大限度。 Operating System File-size Limit Win 32 w/FAF/FAT32 2GB/4GB Win 32 w/NTFS 2TB(possibly larger) Linux 2.4+ (using ext3 file system) 4TB Solaris 9/10 16TB MacOS X w/ HFS+ 2TB NetWare w/NSS file system 8TB