最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL中的存儲引擎及InnoDB簡單介紹

 更新時(shí)間:2026年05月07日 08:52:02   作者:huangSir-devops  
存儲引擎就是數(shù)據(jù)庫服務(wù)中的文件系統(tǒng),用戶可以根據(jù)應(yīng)用的需要選擇存儲和索引數(shù)據(jù),本文給大家介紹MySQL中的存儲引擎及InnoDB簡單介紹,感興趣的朋友跟隨小編一起看看吧

概述

存儲引擎是MySQL數(shù)據(jù)庫底層軟件組件,負(fù)責(zé)執(zhí)行數(shù)據(jù)的存儲和檢索操作,是MySQL區(qū)別于其他數(shù)據(jù)庫的核心特性之一。MySQL采用插件式存儲引擎架構(gòu),不同存儲引擎提供不同的存儲機(jī)制、索引技術(shù)、鎖定水平等功能,用戶可以根據(jù)業(yè)務(wù)需求靈活選擇。

通俗點(diǎn)講:存儲引擎決定了數(shù)據(jù)在磁盤上的存儲方式和訪問方式,不同的存儲引擎實(shí)現(xiàn)了不同的存儲和檢索算法
存儲引擎就是數(shù)據(jù)庫服務(wù)中的文件系統(tǒng),用戶可以根據(jù)應(yīng)用的需要選擇存儲和索引數(shù)據(jù)。

存儲引擎的架構(gòu):

+-------------------------+
|    連接/會(huì)話層          |
+-------------------------+
|    SQL解析/優(yōu)化層       |
+-------------------------+
|    存儲引擎接口層       |
+-------------------------+
| InnoDB | MyISAM | Memory | ... |
+-------------------------+
  • 上層SQL層與存儲引擎層通過標(biāo)準(zhǔn)接口交互,上層不需要關(guān)心存儲引擎的具體實(shí)現(xiàn)
  • 不同存儲引擎之間相互獨(dú)立,各自實(shí)現(xiàn)自己的特性
  • 支持同一數(shù)據(jù)庫中不同表使用不同存儲引擎

存儲引擎的簡單運(yùn)維操作

查看數(shù)據(jù)庫中所有引擎種類:

mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.00 sec)

查看數(shù)據(jù)庫默認(rèn)引擎

mysql> select @@default_storage_engine;
+--------------------------+
| @@default_storage_engine |
+--------------------------+
| InnoDB                   |
+--------------------------+
1 row in set (0.00 sec)

查看某張表的存儲引擎

show create table 表名;

如果你想修改存儲引擎

  • 全局修改
# 修改配置文件,然后重啟mysql即可
vim /etc/my.cnf
# 修改下面的配置 
[mysqld]
default_storage_engine=InnoDB
  • 針對某一張表修改
#創(chuàng)建表時(shí)設(shè)置
create table xxx (id int) engine=innodb charset=utf8mb4;
#創(chuàng)建表之后設(shè)置
alter table xxx engine=myisam;
alter table world.xxx engine=innodb;

存儲引擎分類

目前mysql有很多種存儲引擎,但是99%的場景直接選擇InnoDB:現(xiàn)在InnoDB已經(jīng)非常成熟,性能比MyISAM更高,功能更全,除非有非常明確的理由,否則都用InnoDB。
但是為了學(xué)習(xí),我們在這里還是簡單說一下所有的存儲引擎:

InnoDB

這是mysql5.5+版本中默認(rèn)的存儲引擎,其核心特性如下:

  • 事務(wù)支持:完全支持ACID特性,支持4種事務(wù)隔離級別,是需要事務(wù)支持的業(yè)務(wù)首選
  • 行級鎖定:粒度更小的行鎖,并發(fā)性能遠(yuǎn)高于表鎖,適合高并發(fā)讀寫場景
  • MVCC多版本并發(fā)控制:讀寫不阻塞,大幅提升高并發(fā)場景下的性能
  • 外鍵約束:唯一支持外鍵的存儲引擎,保證數(shù)據(jù)的一致性和完整性
  • 崩潰恢復(fù):通過redo log和undo log實(shí)現(xiàn) crash-safe,異常重啟后數(shù)據(jù)不會(huì)丟失
  • 聚簇索引:數(shù)據(jù)和主鍵索引存儲在一起,主鍵查詢性能極高
  • 支持熱備份:可以在服務(wù)運(yùn)行時(shí)進(jìn)行備份,不影響業(yè)務(wù)

其優(yōu)缺點(diǎn):

優(yōu)點(diǎn)缺點(diǎn)
事務(wù)支持,數(shù)據(jù)安全性高空間占用較高,存儲成本略高
行級鎖,并發(fā)性能好不支持全文索引(MySQL 5.6+開始支持,但功能較弱)
崩潰恢復(fù)能力強(qiáng)批量插入性能略低于MyISAM
支持外鍵、MVCC維護(hù)成本略高

其適用場景

  • 絕大多數(shù)OLTP(在線事務(wù)處理)場景
  • 需要事務(wù)支持、數(shù)據(jù)一致性要求高的業(yè)務(wù)
  • 高并發(fā)讀寫的場景(電商、金融、社交等)
  • 對數(shù)據(jù)可靠性要求高的核心業(yè)務(wù)

MyISAM

這是MySQL 5.5之前默認(rèn)引擎,現(xiàn)在版本已經(jīng)很新了,使用這個(gè)存儲引擎的公司應(yīng)該已經(jīng)很少了。核心特性如下:

  • 表級鎖定:讀共享、寫?yīng)氄?,寫操作?huì)鎖全表,并發(fā)寫入性能差
  • 全文索引:原生支持全文索引,適合全文搜索場景
  • 壓縮存儲:支持壓縮表,占用空間小,適合只讀數(shù)據(jù)
  • 查詢性能高:在數(shù)據(jù)量不大、讀寫比很高的場景下,查詢性能優(yōu)于InnoDB
  • 不支持事務(wù)、不支持行鎖和外鍵、崩潰后無法安全恢復(fù),可能丟失數(shù)據(jù)

優(yōu)缺點(diǎn)如下:

優(yōu)點(diǎn)缺點(diǎn)
占用空間小,存儲成本低不支持事務(wù),數(shù)據(jù)安全性差
只讀場景下性能極高表級鎖,并發(fā)寫入性能差
全文索引支持崩潰后數(shù)據(jù)易丟失
維護(hù)簡單,資源消耗低不支持外鍵、行鎖

其適用場景

  • 非核心的只讀或者讀多寫極少的場景
  • 數(shù)據(jù)可以通過其他方式恢復(fù)的業(yè)務(wù)(比如統(tǒng)計(jì)報(bào)表、日志歸檔)
  • 需要全文搜索的場景(現(xiàn)在更推薦用Elasticsearch替代)
  • 對性能要求極高、數(shù)據(jù)可靠性要求低的非核心場景

Memory(HEAP)

這是一個(gè)將數(shù)據(jù)存儲在內(nèi)存中的引擎,現(xiàn)在基本都是使用redis做緩存,所以這個(gè)存儲引擎使用極低,了解即可,其核心特性:

  • 數(shù)據(jù)存儲在內(nèi)存中:訪問速度極快,響應(yīng)時(shí)間微秒級
  • 默認(rèn)哈希索引:等值查詢性能極高
  • 表級鎖定:并發(fā)寫入性能差
  • 服務(wù)重啟后數(shù)據(jù)全部丟失
  • 不支持TEXT、BLOB等大字段,varchar最大長度65535
  • 內(nèi)存資源有限,不適合存儲大量數(shù)據(jù)

適用場景

  • 臨時(shí)數(shù)據(jù)存儲(比如 session 數(shù)據(jù)、一次性統(tǒng)計(jì)數(shù)據(jù))
  • 緩存場景(熱點(diǎn)數(shù)據(jù)緩存,替代Redis的輕量級方案)
  • 高頻讀、低頻寫的小數(shù)據(jù)量場景

Archive

這款引擎適合存儲海量的歸檔數(shù)據(jù),例如日志數(shù)據(jù)等,但是這種類型的數(shù)據(jù)基本都是用elasticsearch存儲,所以實(shí)際工作中,這款引擎使用率也極低,了解即可。
核心特性:

  • 高壓縮比存儲:采用zlib壓縮,空間占用僅為InnoDB的1/5~1/10
  • 高寫入性能:支持批量插入,寫入性能極高
  • 僅支持INSERT和SELECT操作,不支持UPDATE、DELETE
  • 不支持索引(除了自增ID索引)
  • 不支持事務(wù)

適用場景

  • 日志數(shù)據(jù)歸檔、歷史數(shù)據(jù)冷存儲
  • 不需要修改的海量數(shù)據(jù)存儲場景
  • 寫入后只做批量查詢的場景

CSV

這款存儲引擎適合小數(shù)據(jù)量,適合將外部CSV格式數(shù)據(jù)到MySQL,現(xiàn)在一般不使用這款引擎,了解即可。
核心特性如下:

  • 數(shù)據(jù)以CSV文本格式存儲,可以直接用Excel等工具打開編輯
  • 支持導(dǎo)入導(dǎo)出CSV格式數(shù)據(jù)
  • 不支持索引
  • 不支持NULL值
  • 不支持事務(wù)

適用場景

  • 數(shù)據(jù)交換、導(dǎo)入導(dǎo)出中間格式
  • 快速導(dǎo)入外部CSV格式數(shù)據(jù)到MySQL
  • 簡單的小數(shù)據(jù)量存儲場景

Blackhole

這款引擎簡稱黑洞引擎,正如名字一樣,寫入的數(shù)據(jù)會(huì)被吞掉(丟棄),不實(shí)際存儲,讀取數(shù)據(jù)永遠(yuǎn)返回空值,但是binlog日志會(huì)正常記錄寫入的SQL,一般作為主從復(fù)制的中繼節(jié)點(diǎn),很少使用,了解即可。

適用場景

  • 作為主從復(fù)制的中繼節(jié)點(diǎn),過濾不需要同步的數(shù)據(jù)
  • 性能測試時(shí)的壓測目標(biāo),驗(yàn)證寫入性能
  • 測試二進(jìn)制日志功能

Merge(MRG_MyISAM)

這款引擎會(huì)把多個(gè)結(jié)構(gòu)相同的MyISAM表合并成一個(gè)邏輯表,透明查詢和寫入,不需要關(guān)心底層分表,僅支持MyISAM表,功能十分有限,不支持事務(wù)

適用場景

  • 簡單的分表場景,合并多個(gè)歷史數(shù)據(jù)表
  • 日志分表后的統(tǒng)一查詢場景

Federated

這款引擎可以訪問遠(yuǎn)程MySQL數(shù)據(jù)庫中的表,本地不存儲數(shù)據(jù),所有操作轉(zhuǎn)發(fā)到遠(yuǎn)程節(jié)點(diǎn),因?yàn)榫W(wǎng)絡(luò)開銷較大,所以性能較低,穩(wěn)定性一般,很多特性不支持

適用場景

  • 跨庫訪問、數(shù)據(jù)聯(lián)邦查詢場景
  • 臨時(shí)的跨實(shí)例數(shù)據(jù)訪問需求

NDB Cluster

這款引擎主要用于電信、金融等需要極高可用性的核心場景,但是在此類場景下一般不使用mysql,所以這個(gè)引擎使用極低,知道即可。

核心存儲引擎對比(InnoDB vs MyISAM)

此問題一般都是面試的時(shí)候會(huì)問,在實(shí)際工作中一般都是無腦選擇InnoDB,當(dāng)然一些極特殊情況例外。

對比維度InnoDBMyISAM
事務(wù)支持? 支持ACID? 不支持
鎖機(jī)制? 行級鎖、gap鎖、next-key lock? 僅表級鎖
MVCC? 支持? 不支持
外鍵? 支持? 不支持
索引結(jié)構(gòu)? 聚簇索引? 非聚簇索引
崩潰恢復(fù)? 支持crash-safe? 易丟失數(shù)據(jù)
全文索引?? 5.6+支持,功能弱? 原生支持,功能強(qiáng)
存儲空間較高,支持壓縮較低,壓縮比更高
內(nèi)存占用較高較低
批量寫入性能一般更高
并發(fā)性能極高(支持高并發(fā)讀寫)低(寫操作阻塞所有操作)
適用場景絕大多數(shù)OLTP核心場景只讀、非核心場景

InnoDB詳解

磁盤結(jié)構(gòu)組成

在磁盤存儲結(jié)構(gòu)中,會(huì)使用表空間模式進(jìn)行數(shù)據(jù)信息的管理,經(jīng)常提到的段,區(qū),頁概念也是屬于表空間的邏輯結(jié)構(gòu)。
表空間的概念源于Oracle數(shù)據(jù)庫,最初的目的是為了能夠更好的做存儲的擴(kuò)容,因此數(shù)據(jù)庫的表空間技術(shù)類似磁盤管理的lvm技術(shù)

共享表空間

共享表空間是ibdata1這個(gè)文件

作用:

  • MySQL8.0.20之前存儲Double write buffer信息、changer buffer信息
  • MySQL8.0.20之后只存儲changer buffer信息,Double write buffer信息被獨(dú)立出來了
  • MySQL5.7版本存儲全局?jǐn)?shù)據(jù)字典信息、undo回滾日志、Double write buffer信息、changer buffer以及系統(tǒng)數(shù)據(jù)

共享表空間的運(yùn)維操作命令:

  • 查看共享表空間
#查看共享表空間
mysql> select @@innodb_data_file_path;
+-------------------------+
| @@innodb_data_file_path |
+-------------------------+
| ibdata1:12M:autoextend  |
+-------------------------+
1 row in set (0.00 sec)

#查看共享表空間默認(rèn)擴(kuò)展大小,默認(rèn)每次擴(kuò)展64M
mysql> select @@innodb_autoextend_increment;
+-------------------------------+
| @@innodb_autoextend_increment |
+-------------------------------+
|                            64 |
+-------------------------------+
1 row in set (0.00 sec)
  • 共享表空間的擴(kuò)容操作
# 編寫數(shù)據(jù)庫配置文件信息
vim /etc/my.cnf
[mysqld]
innodb_data_file_path=ibdata1:12M;ibdata2:100M;ibdata3:100M:autoextend
-- 需要注意的是ibdata1文件大小必須和實(shí)際數(shù)據(jù)庫要存儲的數(shù)據(jù)相匹配,否則會(huì)出現(xiàn)如下報(bào)錯(cuò)信息
 [ERROR] [MY-012264] [InnoDB] The innodb_system data file './ibdata1' is of a different size 768 pages (rounded down to MB) than the 4864 pages specified in the .cnf file!
-- 表示ibdate1指定大小超過了原有ibdata1實(shí)際的大小尺寸
  • 共享表空間的初始設(shè)置方式
# 初始化配置文件
root@master:~# vim /etc/my.cnf
[mysqld]
innodb_data_file_path=ibdata1:100M;ibdata2:100M;ibdata3:100M:autoextend
# 模擬初始化操作命令
root@master:~# mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3306/data
# 模擬初始化重啟服務(wù)
root@master:~# /etc/init.d/mysqld start

生產(chǎn)環(huán)境下,共享表空間容量推薦:

MySQL版本共享表空間數(shù)量初始推薦大小額外配置
5.72~3 個(gè)512M / 1G最后一個(gè)開啟自動(dòng)擴(kuò)展
8.01 個(gè)512M / 1G無需多文件,默認(rèn)管理

獨(dú)立表空間

獨(dú)立表空間是以ibd結(jié)尾的文件,例如:

其作用主要是存儲表中的數(shù)據(jù)信息(索引信息 表結(jié)構(gòu) 表中行數(shù)據(jù))。

獨(dú)立表空間操作

#表示每個(gè)表就是一個(gè)獨(dú)立文件,進(jìn)行數(shù)據(jù)信息的獨(dú)立存儲,不建議進(jìn)行修改,如果改為0就是所有數(shù)據(jù)統(tǒng)一存儲在共享表空間
select @@innodb_file_per_table;
+---------------------------------+
| @@innodb_file_per_table |
+---------------------------------+
|                                 1 |
+---------------------------------+
#設(shè)置為0表示利用共享表空間存儲用戶數(shù)據(jù) 1表示利用獨(dú)立表空間存儲用戶數(shù)據(jù)
set global innodb_file_per_table=0

利用獨(dú)立表空間進(jìn)行數(shù)據(jù)快速遷移

源端 3306/test/t100w --> 目標(biāo)端 3307/test/t100w

# 步驟一:鎖定源端t100w表
# 給t100w表加寫數(shù)據(jù)鎖
mysql > lock tables test.t100w write;
# 獲取創(chuàng)建表結(jié)構(gòu)數(shù)據(jù)信息
mysql > show create table test.t100w;
CREATE TABLE `t100w` (
  `id` int DEFAULT NULL,
  `num` int DEFAULT NULL,
  `k1` char(2) DEFAULT NULL,
  `k2` char(4) DEFAULT NULL,
  `dt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  KEY `idx` (`k1`,`k2`,`num`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
#步驟二:目標(biāo)端創(chuàng)建oldboy庫和t100w空表
# 創(chuàng)建新的數(shù)據(jù)庫
mysql> create database test;
# 創(chuàng)建新的數(shù)據(jù)表
mysql > CREATE TABLE `t100w` (
  `id` int DEFAULT NULL,
  `num` int DEFAULT NULL,
  `k1` char(2) DEFAULT NULL,
  `k2` char(4) DEFAULT NULL,
  `dt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  KEY `idx` (`k1`,`k2`,`num`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
#步驟三:刪除目標(biāo)端空的表空間文件
# 刪除t100w表的ibd數(shù)據(jù)文件信息,但是保留t100w的frm,ibdata1中關(guān)于t100w的系統(tǒng)數(shù)據(jù)
mysql> alter table test.t100w discard tablespace;
#操作步驟四:拷貝源端ibd文件到目標(biāo)端目錄,并設(shè)置權(quán)限
root@master: ~# cp /data/3306/data/test/t100w.ibd /data/3307/data/test/
root@master: ~# chown -R mysql.mysql /data/*
#操作步驟五:導(dǎo)入表空間
# 在目標(biāo)端加載識別遷移過來的數(shù)據(jù)文件信息
mysql> alter table test.t100w import tablespace;
# 查看數(shù)據(jù)表中是否有遷移過來的數(shù)據(jù)信息
mysql> select count(*) from t100w;
+----------+
| count(*) |
+----------+
|  1000000 |
+----------+
1 row in set (0.04 sec)
#步驟六:解鎖源端數(shù)據(jù)庫
mysql> unlock tables;

undo表空間

在數(shù)據(jù)庫5.7版本中,默認(rèn)存儲在共享表空間中(ibdata);在數(shù)據(jù)庫8.0版本后,默認(rèn)就是獨(dú)立存儲了(undo_001-undo_002)

undo表空間的作用:
在數(shù)據(jù)庫5.7版本中,默認(rèn)存儲在共享表空間中(ibdata);在數(shù)據(jù)庫8.0版本后,默認(rèn)就是獨(dú)立存儲了(undo_001-undo_002),在實(shí)際生產(chǎn)環(huán)境中,建議在5.7版本之后,都將undo表空間進(jìn)行獨(dú)立文件存儲。

查看臨時(shí)表空間相關(guān)命令

# 設(shè)置undo表空間文件數(shù)量(默認(rèn)2個(gè)文件)
mysql> select @@innodb_undo_tablespaces;
+---------------------------+
| @@innodb_undo_tablespaces |
+---------------------------+
|                         2 |
+---------------------------+
1 row in set (0.00 sec)
# 設(shè)置undo表空間文件大小(字節(jié))
mysql> select @@innodb_max_undo_log_size;
+----------------------------+
| @@innodb_max_undo_log_size |
+----------------------------+
|                 1073741824 |
+----------------------------+
1 row in set (0.00 sec)
# 設(shè)置undo表空間回收機(jī)制(默認(rèn)開啟)
mysql> select @@innodb_undo_log_truncate;
+----------------------------+
| @@innodb_undo_log_truncate |
+----------------------------+
|                          1 |
+----------------------------+
1 row in set (0.00 sec)
# 設(shè)置undo表空間信息檢測次數(shù) (128次)
mysql> select @@innodb_purge_rseg_truncate_frequency; 
+----------------------------------------+
| @@innodb_purge_rseg_truncate_frequency |
+----------------------------------------+
|                                    128 |
+----------------------------------------+
1 row in set (0.00 sec)

修改undo表空間配置

# 關(guān)閉數(shù)據(jù)庫服務(wù)程序,清理數(shù)據(jù)庫服務(wù)數(shù)據(jù)目錄
root@master:~# vim /etc/my.cnf
[mysqld]
innodb_undo_tablespaces=3
innodb_max_undo_log_size=128M
innodb_undo_log_truncate=ON
innodb_purge_rseg_truncate_frequency=32

臨時(shí)表空間

臨時(shí)表空間可以存儲在內(nèi)存和磁盤上,主要用于存儲臨時(shí)的表信息,主要是在使用group by,order by,having,union all,子查詢等情況都會(huì)使用臨時(shí)表;
重新加載臨時(shí)數(shù)據(jù)時(shí),可以從臨時(shí)表空間文件中直接讀取(順序IO讀取數(shù)據(jù))

臨時(shí)表空間查看操作命令

臨時(shí)表空間默認(rèn)初始化大小12M,不夠用會(huì)自動(dòng)擴(kuò)容,每次擴(kuò)容64M

mysql> select @@innodb_temp_data_file_path;
+------------------------------+
| @@innodb_temp_data_file_path |
+------------------------------+
| ibtmp1:12M:autoextend        |
+------------------------------+
1 row in set (0.00 sec)
mysql> select @@innodb_autoextend_increment;
+-------------------------------+
| @@innodb_autoextend_increment |
+-------------------------------+
|                            64 |
+-------------------------------+
1 row in set (0.00 sec)

建議初始化時(shí),設(shè)定好臨時(shí)表空間,mysql5.7版本建議設(shè)置2~3個(gè)臨時(shí)表空間,大小建議512M或1G,最后一個(gè)定制為自動(dòng)擴(kuò)展,mysql8.0版本建議設(shè)置1個(gè)即可,大小建議512M或者1G。

vim /etc/my.cnf
[mysqld]
innodb_temp_data_file_path=ibtmp1:12M;ibtmp2:120M:autoextend:max:500M

redo事物日志

redo log屬于事務(wù)重做日志文件,主要用于記錄內(nèi)存數(shù)據(jù)頁的變化(記錄在內(nèi)存中對數(shù)據(jù)頁的操作信息),都會(huì)以日志文件方式記錄;

查看redo事物日志

mysql> show variables like '%innodb_log_file%';
+---------------------------+----------+
| Variable_name             | Value    |
+---------------------------+----------+
| innodb_log_file_size      | 50331648 |
| innodb_log_files_in_group | 2        |
+---------------------------+----------+
2 rows in set (0.01 sec)

在實(shí)際生產(chǎn)中,文件大小建議512M-1G,應(yīng)用組數(shù)設(shè)置2-4

# 編寫數(shù)據(jù)庫配置文件信息
vim /etc/my.cnf
[mysqld]
innodb_log_file_size=100M
innodb_log_files_in_group=3

ib_buffer_pool預(yù)熱文件

ib_buffer_pool預(yù)熱文件可用于緩沖和緩存,可以存儲‘熱’數(shù)據(jù)頁,減少物理IO性能損耗。

內(nèi)存結(jié)構(gòu)組成

其內(nèi)存架構(gòu)主要由緩沖池和日志緩沖組成,其結(jié)構(gòu)如下:

+-------------------------+
| Buffer Pool(緩沖池)   |
|  - 數(shù)據(jù)頁緩存           |
|  - 索引頁緩存           |
|  - 自適應(yīng)哈希索引       |
|  - 插入緩沖             |
|  - 鎖信息、數(shù)據(jù)字典等   |
+-------------------------+
| Log Buffer(日志緩沖)  |
+-------------------------+

Buffer Pool

Buffer Pool是InnoDB最重要的內(nèi)存組件,默認(rèn)占用物理內(nèi)存的50%~70%,緩存熱點(diǎn)數(shù)據(jù)和索引,減少磁盤IO。采用LRU算法管理緩存頁。是MySQL中最大的、最重要的內(nèi)存區(qū)域。

查看buffer pool

mysql> select @@innodb_buffer_pool_size;
+---------------------------+
| @@innodb_buffer_pool_size |
+---------------------------+
|                1073741824 |
+---------------------------+
1 row in set (0.00 sec)

設(shè)置buffer pool

# buffer pool默認(rèn)內(nèi)存空間大小為128M,生產(chǎn)建議大小可以設(shè)置為物理內(nèi)存總量的50%~80%
方式一:
set global innodb_buffer_pool_size=268435456;
方式二:
vim /etc/my.cnf
[mysqld]
innodb_buffer_pool_size=256M

Log Buffer

緩存redo log日志,定期刷入磁盤,減少日志寫入IO。Log Buffer建議設(shè)置64M

查看log buffer

mysql> select @@innodb_log_buffer_size;
+--------------------------+
| @@innodb_log_buffer_size |
+--------------------------+
|                 16777216 |
+--------------------------+
1 row in set (0.00 sec)

修改log buffer

方式一:
set global innodb_log_buffer_size=33554432;
方式二:
vim /etc/my.cnf
[mysqld]
innodb_log_buffer_size=32M

InnoDB性能優(yōu)化

  • 緩沖池配置:innodb_buffer_pool_size設(shè)置為物理內(nèi)存的50%~70%,越大越好
  • 日志配置:innodb_log_file_size設(shè)置為1GB~4GB,innodb_log_buffer_size設(shè)置為64MB
  • 刷新策略:innodb_flush_log_at_trx_commit=1(最高安全性),或2(最高性能,最多丟失1秒數(shù)據(jù))
  • IO優(yōu)化:使用SSD存儲,innodb_io_capacity設(shè)置為磁盤的IOPS能力
  • 索引優(yōu)化:合理設(shè)計(jì)索引,避免回表,使用覆蓋索引

到此這篇關(guān)于MySQL中的存儲引擎及InnoDB簡單介紹的文章就介紹到這了,更多相關(guān)MySQL中的存儲引擎及InnoDB簡單介紹內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

江津市| 海口市| 柳州市| 进贤县| 汶川县| 巴南区| 咸宁市| 白城市| 合水县| 宾阳县| 正定县| 驻马店市| 巍山| 洪湖市| 甘肃省| 永川市| 庆安县| 宣威市| 右玉县| 龙泉市| 祥云县| 盐津县| 疏附县| 濉溪县| 聂荣县| 水城县| 贡觉县| 南江县| 略阳县| 基隆市| 东城区| 迁安市| 达孜县| 正安县| 徐闻县| 阜新市| 桃园县| 栖霞市| 潢川县| 蛟河市| 克山县|