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

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

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

概述

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

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

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

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

存儲引擎的簡單運維操作

查看數(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ù)庫默認引擎

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è)置
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+版本中默認的存儲引擎,其核心特性如下:

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

其優(yōu)缺點:

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

其適用場景

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

MyISAM

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

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

優(yōu)缺點如下:

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

其適用場景

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

Memory(HEAP)

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

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

適用場景

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

Archive

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

  • 高壓縮比存儲:采用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ù)會被吞掉(丟棄),不實際存儲,讀取數(shù)據(jù)永遠返回空值,但是binlog日志會正常記錄寫入的SQL,一般作為主從復(fù)制的中繼節(jié)點,很少使用,了解即可。

適用場景

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

Merge(MRG_MyISAM)

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

適用場景

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

Federated

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

適用場景

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

NDB Cluster

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

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

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

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

InnoDB詳解

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

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

共享表空間

共享表空間是ibdata1這個文件

作用:

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

共享表空間的運維操作命令:

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

#查看共享表空間默認擴展大小,默認每次擴展64M
mysql> select @@innodb_autoextend_increment;
+-------------------------------+
| @@innodb_autoextend_increment |
+-------------------------------+
|                            64 |
+-------------------------------+
1 row in set (0.00 sec)
  • 共享表空間的擴容操作
# 編寫數(shù)據(jù)庫配置文件信息
vim /etc/my.cnf
[mysqld]
innodb_data_file_path=ibdata1:12M;ibdata2:100M;ibdata3:100M:autoextend
-- 需要注意的是ibdata1文件大小必須和實際數(shù)據(jù)庫要存儲的數(shù)據(jù)相匹配,否則會出現(xiàn)如下報錯信息
 [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è)置方式
# 初始化配置文件
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 個512M / 1G最后一個開啟自動擴展
8.01 個512M / 1G無需多文件,默認管理

獨立表空間

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

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

獨立表空間操作

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

利用獨立表空間進行數(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版本中,默認存儲在共享表空間中(ibdata);在數(shù)據(jù)庫8.0版本后,默認就是獨立存儲了(undo_001-undo_002)

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

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

# 設(shè)置undo表空間文件數(shù)量(默認2個文件)
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表空間回收機制(默認開啟)
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

臨時表空間

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

臨時表空間查看操作命令

臨時表空間默認初始化大小12M,不夠用會自動擴容,每次擴容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è)定好臨時表空間,mysql5.7版本建議設(shè)置2~3個臨時表空間,大小建議512M或1G,最后一個定制為自動擴展,mysql8.0版本建議設(shè)置1個即可,大小建議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ù)頁的操作信息),都會以日志文件方式記錄;

查看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)

在實際生產(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)存組件,默認占用物理內(nèi)存的50%~70%,緩存熱點數(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默認內(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è)計索引,避免回表,使用覆蓋索引

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

相關(guān)文章

最新評論

肃南| 班戈县| 青铜峡市| 吐鲁番市| 赤壁市| 南川市| 营口市| 桃江县| 礼泉县| 博爱县| 佛山市| 富民县| 裕民县| 大英县| 大理市| 阿拉善盟| 时尚| 邢台市| 达孜县| 西城区| 长子县| 鹿邑县| 奉化市| 光山县| 白玉县| 静安区| 柳江县| 都昌县| 册亨县| 黄浦区| 冕宁县| 从化市| 东莞市| 时尚| 长寿区| 秭归县| 平乐县| 巴南区| 木里| 嘉兴市| 南安市|