有許多強大的MySQL存儲引擎可供我們使用,而InnoDB無疑是最受歡迎的存儲引擎之一。它高度可靠和高效,因此它成為5.5版本以后所有MySQL的默認存儲引擎也就不足為奇了。讓我們更仔細地看看它的優點和功能。
MySQL中的InnoDB是什么?
現在我們想確定MySQLInnoDB 存儲引擎的特殊之處。以下是它的主要優點:
InnoDB基于ACID,支持提交和回滾操作。此外,它不太可能崩潰,因此用戶的數據仍然受到保護。
由于行級鎖定,多用戶性能成為可能。
由于InnoDB表有效地組織數據,因此優化了基于主鍵的查詢。每個InnoDB表中都有一個稱為聚集索引的主鍵索引。此索引排列數據以減少主鍵查詢的I/O。
MySQLInnoDB 支持外鍵約束,可以實現和維護數據完整性。
InnoDB也可以與MariaDB服務器一起使用。在這種情況下,InnoDB提供外鍵、XA事務和帶有保存點的事務。
InnoDB集群
每家公司的政策都以提供最安全、最穩定的數據流為前提。但是如何才能實現和保證呢?答案在于MySQLInnoDB Cluster,它為MySQL提供了一個方便的解決方案。在AdminAPI和MySQLShell 的參與下,您可以輕松管理多個MySQL服務器實例以作為單個InnoDB集群中工作。
MySQLInnoDB Cluster 的組件包括以下內容:
MySQL路由器(安全路由到數據庫節點)
MySQL組復制(多個相互復制的數據庫服務器)
MySQLShell(MySQL的配置工具,有助于啟用具有容錯功能的拓撲)
查看它如何在單個InnoDB集群中協同工作:
創建InnoDB表
為了創建InnoDB表,您只需在CREATETABLE 語句中指定ENGINE= InnoDB。例如:
InnoDB服務器變量和性能調優技巧
以下是可用的InnoDB服務器變量列表,這些變量有助于加速和優化MySQL數據庫和InnoDB存儲引擎之間的性能和交互:
innodb_flush_log_at_trx_commit
innodb_buffer_pool_size
innodb_buffer_pool_instances
innodb_file_per_table
innodb_force_recovery
innodb_large_prefix
innodb_flush_method
innodb_thread_concurrency
innodb_log_buffer_size
innodb_io_capacity
innodb_strict_mode
innodb_autoinc_lock_mode
innodb_read_io_threads
innodb_data_file_path
innodb_flush_log_at_trx_commit
此命令的基本語法是--innodb-flush-log-at-trx-commit=#.它配置事務刷新到重做日志的頻率。
innodb_buffer_pool_size
此命令的基本語法是--innodb-buffer-pool-size=#.InnoDB 緩沖池是一個內存域,InnoDB存儲引擎在其中緩存其表和索引數據。默認值為134217728字節(128MB)。CPU架構定義了最大值,在32位系統上等于4294967295(232-1),在64位系統上等于18446744073709551615(264-1)。
innodb_buffer_pool_instances
此命令的基本語法是--innodb-buffer-pool-instances=#.它表示InnoDB緩沖池必須包含的區域數量。對于數GB范圍內的緩沖池,將整個緩沖池劃分為多個單獨的實例可以提高并發性。
innodb_file_per_table
此命令的基本語法是--innodb-file-per-table[={OFF|ON}].啟用該變量后,默認情況下會在每個表的文件表空間中生成表。如果禁用,則在系統表空間中生成表。
innodb_force_recovery
此命令的基本語法是--innodb-force-recovery=#.它是一種崩潰恢復模式,通常用于解決問題。允許的值范圍為0到6。
innodb_lock_wait_timeout
此命令的基本語法是--innodb-lock-wait-timeout=#.默認持續時間為50秒。之后,InnoDB事務被中斷。如果超過時間限制,會報如下錯誤:
在這種情況下,僅回滾語句。如果要回滾整個事務,請使用–innodb-rollback-on-timeout命令。
innodb_large_prefix
此命令的基本語法是--innodb-large-prefix[={OFF|ON}].如果啟用此選項,則對于行格式為DYNAMIC或COMPRESSED的InnoDB表,允許使用超過767字節(最多3072字節)的索引鍵前綴。對于行格式為REDUNDANT或COMPACT的表,此命令不會影響允許的索引鍵前綴長度。
innodb_flush_method
使用--innodb-flush-method=value該命令指定將用于將數據刷新到InnoDB文件的方法。請注意,I/O吞吐量可能會受到影響。
innodb_thread_concurrency
此命令的基本語法是--innodb-thread-concurrency=#.它定義了InnoDB允許的最大線程數。無限并發由值0定義,默認設置。
innodb_log_buffer_size
此命令的基本語法是--innodb-log-buffer-size=#.這是尚未提交的事務的緩沖區大小。如果您使用大字段(如BLOB或TEXT),則應更改此參數的值。
innodb_io_capacity
此命令的基本語法是--innodb-io-capacity=#.它指定了InnoDB后臺操作可訪問的每秒I/O事務數(IOPS)。
innodb_strict_mode
此命令的基本語法是--innodb-strict-mode[={OFF|ON}].嚴格模式起到了屏蔽不同SQL語句序列和操作模式的各種意外結果的作用。當啟用innodb_strict_mode時,InnoDB會針對特定條件發出錯誤。
innodb_autoinc_lock_mode
此命令的基本語法是--innodb-autoinc-lock-mode=#.自動遞增值在鎖定模式下生成。允許的值為0、1或2(分別用于傳統、連續或交錯鎖定模式)。默認設置為1(連續)。
innodb_read_io_threads
使用--innodb-read-io-threads=#該命令定義InnoDB文件I/O流的數量。
innodb_data_file_path
此命令的基本語法是–innodb-data-file-path=file_name.它指定有關InnoDB系統表空間數據文件的信息。如果尚未定義innodb_data_file_path的值,則默認生成單個自動擴展數據文件。該數據文件名為ibdata1,大小約為12MB。
數據文件的完整語法如下:
file_name:file_size[:autoextend[max_file_size]]
它由文件名、文件大小、自動擴展屬性和最大屬性組成。
請注意:在執行您的操作時,確保InnoDB沒有使用它自己的內存而不是操作系統的內存是很重要的。在這種情況下,您將看到InnoDB內存堆被禁用的通知,并會顯示錯誤。可以通過將innodb_use_sys_malloc的值設置為ON或1而不是0來解決。
處理InnoDB中最常見的錯誤
InnoDB中錯誤的處理并不總是與指定的SQL標準相同。例如,SQL語句中的錯誤必須導致所述語句的回滾。對于InnoDB,在某些情況下,失敗的語句會被回滾;在其他情況下,整個事務會回滾。
表空間空間不足會導致Tableis full錯誤,并且SQL語句會回滾。
除非在所述語句中指定了IGNORE選項,否則重復鍵錯誤會導致語句回滾。
鎖等待超時導致正在等待鎖但面臨超時的語句回滾。
rowtoo long該錯誤還會回滾相應的語句。
事務死鎖會導致整個事務回滾,之后應重試。
其他錯誤一般由MySQL代碼層檢測到,從而導致相關語句回滾。
使用InnoDB和dbForgeStudio for MySQL 獲得最高性能
現在我們想推薦一個IDE,它將促進您使用MySQL數據庫和InnoDB引擎– dbForgeStudio for MySQL的工作。雖然它與所有流行的 MySQL數據庫引擎完全兼容,但InnoDB是值得特別提及的一個。
首先,dbForgeStudio 支持InnoDB提供的每一個優勢,包括我們文章開頭提到的那些。此外,您還可以獲得許多優秀的功能,這些功能將加速和簡化您的日常工作(例如自動提交操作)。還值得注意的是,dbForgeStudio 在創建表時默認使用InnoDB。
其次,您可以通過到Database菜單-> ServerVariables找到上述服務器變量,如下面的屏幕截圖所示。
打開類別:InnoDB,您將找到所有這些。
最后,dbForgeStudio 支持XtraDB,它是InnoDB的向后兼容分支,由Percona為MariaDB和PerconaServer 數據庫開發。
審核編輯:劉清
-
路由器
+關注
關注
22文章
3789瀏覽量
115473 -
MySQL
+關注
關注
1文章
840瀏覽量
27292 -
MYSQL數據庫
+關注
關注
0文章
96瀏覽量
9664
原文標題:MySQL中的InnoDB是什么?包含示例和性能調優技巧的教程
文章出處:【微信號:哲想軟件,微信公眾號:哲想軟件】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
深度剖析MySQL/InnoDB的并發控制和加鎖技術

全球唯一:MySQL社區2018年度公司貢獻獎頒給阿里云
MySQL存儲引擎簡析
最有用的mysql問答

MySQL中的redo log是什么
innodb究竟是如何存數據的

MySQL的頁結構及原理
MySQL5.6 InnoDB支持全文檢索
剖析MySQL InnoDB存儲原理(下)

評論