0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

MySQL中的InnoDB是什么?

哲想軟件 ? 來源:哲想軟件 ? 2023-04-13 09:09 ? 次閱讀

有許多強(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ù)。

由于行級鎖定,多用戶性能成為可能。

由于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ù)庫節(jié)點(diǎn))

MySQL組復(fù)制(多個(gè)相互復(fù)制的數(shù)據(jù)庫服務(wù)器)

MySQLShell(MySQL的配置工具,有助于啟用具有容錯(cuò)功能的拓?fù)洌?/p>

查看它如何在單個(gè)InnoDB集群中協(xié)同工作:

4ea4781e-d98f-11ed-bfe3-dac502259ad0.png

創(chuàng)建InnoDB表

為了創(chuàng)建InnoDB表,您只需在CREATETABLE 語句中指定ENGINE= InnoDB。例如:

4ebd452e-d98f-11ed-bfe3-dac502259ad0.png

InnoDB服務(wù)器變量和性能調(diào)優(yōu)技巧

以下是可用的InnoDB服務(wù)器變量列表,這些變量有助于加速和優(yōu)化MySQL數(shù)據(jù)庫和InnoDB存儲(chǔ)引擎之間的性能和交互:

innodb_flush_log_at_trx_commit

innodb_buffer_pool_size

innodb_buffer_pool_instances

innodb_file_per_table

innodb_force_recovery

innodb_lock_wait_timeout

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ù)量。對于數(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ò)誤:

4ed7985c-d98f-11ed-bfe3-dac502259ad0.png

在這種情況下,僅回滾語句。如果要回滾整個(gè)事務(wù),請使用–innodb-rollback-on-timeout命令。

innodb_large_prefix

此命令的基本語法是--innodb-large-prefix[={OFF|ON}].如果啟用此選項(xiàng),則對于行格式為DYNAMIC或COMPRESSED的InnoDB表,允許使用超過767字節(jié)(最多3072字節(jié))的索引鍵前綴。對于行格式為REDUNDANT或COMPACT的表,此命令不會(huì)影響允許的索引鍵前綴長度。

innodb_flush_method

使用--innodb-flush-method=value該命令指定將用于將數(shù)據(jù)刷新到InnoDB文件的方法。請注意,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ì)針對特定條件發(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ò)展屬性和最大屬性組成。

請注意:在執(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)致所述語句的回滾。對于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代碼層檢測到,從而導(dǎo)致相關(guān)語句回滾。

使用InnoDB和dbForgeStudio for MySQL 獲得最高性能

現(xiàn)在我們想推薦一個(gè)IDE,它將促進(jìn)您使用MySQL數(shù)據(jù)庫和InnoDB引擎– dbForgeStudio for MySQL的工作。雖然它與所有流行的 MySQL數(shù)據(jù)庫引擎完全兼容,但I(xiàn)nnoDB是值得特別提及的一個(gè)。

首先,dbForgeStudio 支持InnoDB提供的每一個(gè)優(yōu)勢,包括我們文章開頭提到的那些。此外,您還可以獲得許多優(yōu)秀的功能,這些功能將加速和簡化您的日常工作(例如自動(dòng)提交操作)。還值得注意的是,dbForgeStudio 在創(chuàng)建表時(shí)默認(rèn)使用InnoDB。

其次,您可以通過到Database菜單-> ServerVariables找到上述服務(wù)器變量,如下面的屏幕截圖所示。

4ee743c4-d98f-11ed-bfe3-dac502259ad0.png

打開類別:InnoDB,您將找到所有這些。

4f267332-d98f-11ed-bfe3-dac502259ad0.png

最后,dbForgeStudio 支持XtraDB,它是InnoDB的向后兼容分支,由Percona為MariaDB和PerconaServer 數(shù)據(jù)庫開發(fā)。





審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 路由器
    +關(guān)注

    關(guān)注

    22

    文章

    3693

    瀏覽量

    113426
  • MySQL
    +關(guān)注

    關(guān)注

    1

    文章

    797

    瀏覽量

    26399
  • MYSQL數(shù)據(jù)庫
    +關(guān)注

    關(guān)注

    0

    文章

    95

    瀏覽量

    9375

原文標(biāo)題:MySQL中的InnoDB是什么?包含示例和性能調(diào)優(yōu)技巧的教程

文章出處:【微信號:哲想軟件,微信公眾號:哲想軟件】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    深度剖析MySQL/InnoDB的并發(fā)控制和加鎖技術(shù)

    本文主要是針對MySQL/InnoDB的并發(fā)控制和加鎖技術(shù)做一個(gè)比較深入的剖析,并且對其中涉及到的重要的概念,如多版本并發(fā)控制(MVCC),臟讀(dirty read),幻讀(phantom
    的頭像 發(fā)表于 10-29 14:36 ?2112次閱讀
    深度剖析<b class='flag-5'>MySQL</b>/<b class='flag-5'>InnoDB</b>的并發(fā)控制和加鎖技術(shù)

    全球唯一:MySQL社區(qū)2018年度公司貢獻(xiàn)獎(jiǎng)?lì)C給阿里云

    。6. 自增列值持久化MySQL AUTO_INCREMENT 字段實(shí)現(xiàn)了自增 ID 的生成,但只保存在內(nèi)存,意外宕機(jī)或重啟,就會(huì)丟失自增值,AliSQL 使用表 SEGMENT HEADER
    發(fā)表于 04-25 11:51

    詳解Mysql數(shù)據(jù)庫InnoDB存儲(chǔ)引擎事務(wù)

    關(guān)于Mysql數(shù)據(jù)庫InnoDB存儲(chǔ)引擎事務(wù)的一點(diǎn)理解
    發(fā)表于 05-13 10:11

    InnoDB鎖的特點(diǎn)和狀態(tài)查詢

    MySQL探秘(五)InnoDB鎖的類型和狀態(tài)查詢
    發(fā)表于 08-07 11:45

    分布式MySQLInnoDB cluster

    分布式MySQL——InnoDB cluster和性能測試
    發(fā)表于 04-15 08:43

    MySQL存儲(chǔ)引擎簡析

    MySQL存儲(chǔ)引擎InnoDB??InnoDB 的存儲(chǔ)文件有兩個(gè),后綴名分別是.frm和.idb,其中.frm是表的定義文件,而.idb是數(shù)據(jù)文件。InnoDB
    發(fā)表于 09-06 06:07

    最有用的mysql問答

    想進(jìn)大廠,mysql不會(huì)那可不行,來接受mysql面試挑戰(zhàn)吧,看看你能堅(jiān)持到哪里? 1. 能說下myisam 和 innodb的區(qū)別嗎? myisam引擎是5.1版本之前的默認(rèn)引擎,支持全文檢索
    的頭像 發(fā)表于 09-30 17:43 ?1664次閱讀
    最有用的<b class='flag-5'>mysql</b>問答

    MySQL的高級內(nèi)容詳解

    之前兩篇文章帶你了解了 MySQL 的基礎(chǔ)語法和 MySQL 的進(jìn)階內(nèi)容,那么這篇文章我們來了解一下 MySQL 的高級內(nèi)容。 其他文章: 138 張圖帶你
    的頭像 發(fā)表于 03-11 16:55 ?2176次閱讀
    <b class='flag-5'>MySQL</b><b class='flag-5'>中</b>的高級內(nèi)容詳解

    關(guān)于InnoDB的內(nèi)存結(jié)構(gòu)及原理詳解

    除此之外還聊了一下MySQLInnoDB的日志,和兩次寫,總的來說算是一個(gè)入門級別的介紹,這篇文章就來詳細(xì)介紹一下InnoDB的內(nèi)存結(jié)構(gòu)。
    的頭像 發(fā)表于 04-16 16:15 ?2745次閱讀
    關(guān)于<b class='flag-5'>InnoDB</b>的內(nèi)存結(jié)構(gòu)及原理詳解

    MySQL的redo log是什么

    時(shí),InnoDB存儲(chǔ)引擎會(huì)使用redo log恢復(fù)數(shù)據(jù),保證數(shù)據(jù)的持久性與完整性。 上一篇阿星講過,MySQL數(shù)據(jù)是以頁為單位,你查詢一條
    的頭像 發(fā)表于 09-14 09:40 ?1995次閱讀

    innodb究竟是如何存數(shù)據(jù)的

    前言如果你使用過mysql數(shù)據(jù)庫,對它的存儲(chǔ)引擎:innodb,一定不會(huì)感到陌生。 眾所周知,在mysql5以前,默認(rèn)的存儲(chǔ)引擎是:myslam。但mysql5之后,默認(rèn)的存儲(chǔ)引擎已經(jīng)
    的頭像 發(fā)表于 10-09 15:41 ?1300次閱讀
    <b class='flag-5'>innodb</b>究竟是如何存數(shù)據(jù)的

    MySQL的頁結(jié)構(gòu)及原理

    索引可以說是每個(gè)工程師的必備技能點(diǎn),明白索引的原理對于寫出高質(zhì)量的 SQL 至關(guān)重要,今天我們就從 0 到 1 來理解下索引的原理,相信大家看完不光對索引還會(huì)對 MySQL InnoDB 存儲(chǔ)引擎的最小存儲(chǔ)單位「頁」會(huì)有更深
    的頭像 發(fā)表于 11-05 12:56 ?1083次閱讀

    MySQL5.6 InnoDB支持全文檢索

    在早期的 MySQL InnoDB 并不支持全文檢索技術(shù),從 MySQL 5.6 開始,InnoDB 開始支持全文檢索。
    的頭像 發(fā)表于 11-12 15:14 ?1335次閱讀

    剖析MySQL InnoDB存儲(chǔ)原理(上)

    一、MySQL記錄的存儲(chǔ)結(jié)構(gòu): 1、Page的結(jié)構(gòu),如下圖:
    的頭像 發(fā)表于 02-15 15:45 ?411次閱讀
    剖析<b class='flag-5'>MySQL</b> <b class='flag-5'>InnoDB</b>存儲(chǔ)原理(上)

    剖析MySQL InnoDB存儲(chǔ)原理(下)

    一、InnoDB存儲(chǔ)引擎內(nèi)存管理 1.1 概念: Buffer Pool:預(yù)分配的內(nèi)存池; Page:Buffer Pool的最小單位; Free list:空閑Page組成的鏈表;
    的頭像 發(fā)表于 02-15 15:47 ?386次閱讀
    剖析<b class='flag-5'>MySQL</b> <b class='flag-5'>InnoDB</b>存儲(chǔ)原理(下)