MySQL的物理存儲結(jié)構(gòu)

隱##1.物理存儲結(jié)構(gòu)

1.1 表空間

MySQL支持兩類表空間: 共享、獨立
不同版本的差異:

5.5版本:
默認(rèn)共享表空間管理模式.包含:數(shù)據(jù)字典\undo\tmp\用戶表數(shù)據(jù)和索引
5.6版本:
默認(rèn)獨立表空間.
包含:數(shù)據(jù)字典\undo\tmp,將用戶數(shù)據(jù)和索引獨立,每個表單獨存儲。
一個表一個ibd文件,存儲數(shù)據(jù)行和索引信息。
5.7版本:
默認(rèn)獨立表空間.
包含:數(shù)據(jù)字典\undo,tmp獨立,將用戶數(shù)據(jù)和索引獨立,每個表單獨存儲
8.0版本:
默認(rèn)獨立表空間.
數(shù)據(jù)字典取消掉,undo, tmp獨立將 用戶數(shù)據(jù)和索引獨立,每個表單獨存儲

1.2 功能名詞介紹

磁盤結(jié)構(gòu)相關(guān):

transaction 事務(wù)
undo : ibdata1    #回滾日志(保留事務(wù)之前的狀態(tài))
tmp : ibtmp1    #臨時表空間磁盤位置,存儲臨時表
redo : ib_logfile0-N #重做日志
ibd : t1.ibd    #表空間數(shù)據(jù)文件。表的數(shù)據(jù)行和索引
frm      #存儲表的列信息

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

Innodb Buffer Poll  #數(shù)據(jù)緩沖區(qū)池(環(huán)境中給70-80%物理內(nèi)存)《緩沖數(shù)據(jù)和索引頁》《順序IO存儲空間》
(三個不同磁盤上,有三個不同無順序表文件
經(jīng)常被訪問(熱數(shù)據(jù))內(nèi)存數(shù)據(jù)頁,放到緩沖區(qū),以后訪問不用加載到磁盤
通過Innodb Buffer Poll 功能把數(shù)據(jù)作為順序IO
缺點 :關(guān)機慢(要將數(shù)據(jù)放到緩沖區(qū)),啟動慢
log buffer      #重做日志緩沖區(qū)
LSN        #日志序列號 #相當(dāng)于日志版本號
Rrx_id       #事務(wù)ID號
checkpoint     #檢查點

1.3事務(wù)

1.3.1 什么是事務(wù)?

將多條DMl(標(biāo)準(zhǔn)的事務(wù)語句),放在一個組中運行,要么全成功要么全失敗。

1.3.2 事務(wù)ACID特性atomicity, consistency, isolation, and durability.

Atomic:原子性 :每一個事務(wù)都是一個完整整體,不可再分性.要么全執(zhí)行成功要么全失敗.
Consistent:一致性 :在事務(wù)前,中,后,保證事務(wù)操作的數(shù)據(jù)前后一致.
Isolated:隔離性:多個事務(wù)之間,所做事務(wù)互不干擾,不能同時更新同一行數(shù)據(jù).
Durable:持久性 :事務(wù)完成之后,所涉及到的數(shù)據(jù),必須永久有效(落地)

1.3.3 事務(wù)的生命周期管理

(1) 開啟一個事務(wù)
begin / start transaction;
(2) 標(biāo)準(zhǔn)的事務(wù)語句
insert
update
delete
(3) 結(jié)束事務(wù)
commit;#提交事務(wù)
rollbackup; #回滾事務(wù) #只能提交之前做。

非標(biāo)準(zhǔn)的事務(wù)生命周期
1) 自動提交機制(autocommit)
只要是DML語句,自動添加
1.begin子句會自動添加
2.因為 MySQL5.6版本后,每一條執(zhí)行完成之后都會自動提交
mysql> select @@autocommit;#查看是否開啟這項功能(自動提交)
永久關(guān)閉參數(shù):@@autocommit功能

vim /etc/my.cnf
圖片.png

說明:默認(rèn)情況下,開啟事務(wù)時不加begin,逐條自動提交.手工開啟begin命令,按照正常事務(wù)工作過程.

2)隱式提交(當(dāng)打開一個事務(wù),操作后沒有進行提交,進行DDL語句操作后,開始執(zhí)行的操作會自動提交,無法回滾)

用于隱式提交的 SQL 語句:
SET AUTOCOMMIT = 1
導(dǎo)致提交的非事務(wù)語句:

DDL語句: (ALTER、CREATE 和 DROP)
DCL語句: (GRANT、REVOKE 和 SET PASSWORD)
鎖定語句:(LOCK TABLES 和 UNLOCK TABLES)

導(dǎo)致隱式提交的語句示例:

TRUNCATE TABLE
LOAD DATA INFILE
SELECT FOR UPDATE

3)隱式回滾

原因:

會話斷開
數(shù)據(jù)庫重啟
死鎖

1.3.4 事務(wù)底層的工作過程

畫圖說明.

(1) redo

分布:
   內(nèi)存: log buffer
   磁盤: ib_ logfile0~N
功能:
  ?。?.保存內(nèi)存數(shù)據(jù)頁的變化
   >2. commit時, 實現(xiàn)事務(wù)的快速持久化的特性:量少, 順序I0
   >3.宕機時,通過redo實現(xiàn)重做事務(wù),將數(shù)據(jù)庫恢復(fù)到宕機之前的狀態(tài).
    我們由把這步稱之為ACSR中的"前滾"操作

2)undo 回滾日志

分布: 默認(rèn) ibdata1, 5.7 開始使用可以獨立undo,8.0后自動獨立
功能:

1.保存當(dāng)前事務(wù)操作的反操作
2.在執(zhí)行rollback命令時, undo提供回滾操作,實現(xiàn)原子的特性。
3.宕機時,ACSR過程中提供回滾操作(將沒有commit標(biāo)記的)

1.3.5 鎖 及隔離級別主要保證隔離性

1)鎖:

S: 共享鎖,讀鎖
X: 排它鎖,寫鎖
IS: 意向S(想要有哪個鎖)
IX: 意向X
兼容

S-S:
S-IS:
不兼容
X和任何鎖都不兼容

2)鎖的細(xì)分

TX: 表鎖  DDL
RX: 行鎖  DML
GAP LOCK X: 間隙鎖 特殊DML
Next LOCK X: 下一鍵鎖定

3) 隔離級別(transaction_isolation)

RU: 讀未提交----READ-UNCOMMITTED
模擬:

session A
mysql> begin;
mysql> use world
mysql> delete from city where id=1000;
session B
mysql> begin;
mysql> use world
mysql> select *from city where id=1000;

**會產(chǎn)生的問題: **

  1. 臟讀
  2. 不可重復(fù)讀現(xiàn)象
  3. 幻讀

RC: 讀已提交----READ-COMMITTED

  1. 不可重復(fù)讀現(xiàn)象
  2. 幻讀

RR: 可重復(fù)讀----REPEATABLE-READ

  1. 幻讀
    說明:
  2. RR級別+ GAP+ Next lock(GAP+RX)有效防止幻讀現(xiàn)象
  3. 通過MVCC,多版本并發(fā)控制中,一致性快照讀技術(shù),解決了不可重復(fù)讀問題.

SR: 串行



2. InnoDB 存儲引擎核心參數(shù) *****

mysql> select @@innodb_data_file_path;
mysql> select @@innodb_file_per_table;
mysql> select @@innodb_buffer_pool_size; #不要超過80%物理內(nèi)存 ----> Out of memory
mysql> select @@innodb_log_buffer_size;
mysql> select @@innodb_log_file_size;
mysql> select @@innodb_log_file_in_group;
mysql> select @@innodb_flush_log_at_trx_commit; # 雙1標(biāo)準(zhǔn)之一.控制redo刷寫的策略.
0 每秒鐘刷寫redo到磁盤.
1 每次事務(wù)提交,理解刷寫redo到磁盤
2 每次事務(wù)提交,立即寫日志到OS cache中,然后每秒鐘刷寫到磁盤.
mysql> select @@innodb_flush_method; 控制(buffer臟頁,redo buffer日志)刷寫方式

建議設(shè)置:
O_DIRECT : 數(shù)據(jù)頁刷寫磁盤直接穿過文件系統(tǒng)緩存,redo 刷寫時,先寫os cache,再寫到磁盤。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容