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