MySQL-存儲引擎

如果您對數(shù)據(jù)庫感興趣票彪,可以添加 DBA解決方案QQ群:855439640

1扫步、簡介

相當于Linux文件系統(tǒng)蝙云,只不過比文件系統(tǒng)強大

2捆等、功能了解

數(shù)據(jù)讀寫
數(shù)據(jù)安全和一致性
提高性能
熱備份
自動故障恢復
高可用方面支持
等.

3滞造、存儲引擎種類(筆試)

3.1 介紹(Oracle MySQL)

InnoDB
MyISAM
MEMORY
ARCHIVE
FEDERATED
EXAMPLE
BLACKHOLE
MERGE
NDBCLUSTER
CSV

3.2 引擎種類查看

show engines;
存儲引擎是作用在表上的,也就意味著栋烤,不同的表可以有不同的存儲引擎類型谒养。
PerconaDB:默認是XtraDB
MariaDB:默認是InnoDB
其他的存儲引擎支持:
TokuDB    
RocksDB
MyRocks
以上三種存儲引擎的共同點:壓縮比較高,數(shù)據(jù)插入性能極高
現(xiàn)在很多的NewSQL,使用比較多的功能特性.

3.3 簡歷案例---zabbix監(jiān)控系統(tǒng)架構(gòu)整改

環(huán)境: zabbix 3.2    mariaDB 5.5  centos 7.3
現(xiàn)象 : zabbix卡的要死 ,  每隔3-4個月,都要重新搭建一遍zabbix,存儲空間經(jīng)常爆滿.
問題 :
1\. zabbix 版本 
2\. 數(shù)據(jù)庫版本
3\. zabbix數(shù)據(jù)庫500G,存在一個文件里
優(yōu)化建議:
1.數(shù)據(jù)庫版本升級到5.7版本,zabbix升級更高版本
2.存儲引擎改為tokudb
3.監(jiān)控數(shù)據(jù)按月份進行切割(二次開發(fā):zabbix 數(shù)據(jù)保留機制功能重寫,數(shù)據(jù)庫分表)
4.關(guān)閉binlog和雙1
5.參數(shù)調(diào)整....
優(yōu)化結(jié)果:
監(jiān)控狀態(tài)良好

為什么?
1\. 原生態(tài)支持TokuDB,另外經(jīng)過測試環(huán)境,5.7要比5.5 版本性能 高  2-3倍
2\. TokuDB:insert數(shù)據(jù)比Innodb快的多,數(shù)據(jù)壓縮比要Innodb高
3.監(jiān)控數(shù)據(jù)按月份進行切割,為了能夠truncate每個分區(qū)表,立即釋放空間
4.關(guān)閉binlog ----->減少無關(guān)日志的記錄.
5.參數(shù)調(diào)整...----->安全性參數(shù)關(guān)閉,提高性能.

3.4 InnoDB個MyISAM存儲引擎的替換

環(huán)境: centos 5.8 ,MySQL 5.0版本,MyISAM存儲引擎,網(wǎng)站業(yè)務(LNMP),數(shù)據(jù)量50G左右
現(xiàn)象問題: 業(yè)務壓力大的時候,非趁鞴卡;經(jīng)歷過宕機,會有部分數(shù)據(jù)丟失.
問題分析:
1.MyISAM存儲引擎表級鎖,在高并發(fā)時,會有很高鎖等待
2.MyISAM存儲引擎不支持事務,在斷電時,會有可能丟失數(shù)據(jù)
職責
1.監(jiān)控鎖的情況:有很多的表鎖等待
2.存儲引擎查看:所有表默認是MyISAM
解決方案:
1.升級MySQL 5.6.10版本
2\. 遷移所有表到新環(huán)境
3\. 開啟雙1安全參數(shù)

4买窟、InnoDB存儲引擎介紹

image
在MySQL5.5版本之后,默認的存儲引擎薯定,提供高可靠性和高性能始绍。

4.1 優(yōu)點

1、事務(Transaction)
2话侄、MVCC(Multi-Version Concurrency Control多版本并發(fā)控制)
3亏推、行級鎖(Row-level Lock)
4、ACSR(Auto Crash Safey Recovery)自動的故障安全恢復
5年堆、支持熱備份(Hot Backup)
6吞杭、Replication: Group Commit , GTID (Global Transaction ID) ,多線程(Multi-Threads-SQL ) 

4.2 筆試題

請你列舉MySQL InnoDB存儲優(yōu)點?
請你列舉 InooDB和MyIsam的區(qū)別嘀韧?

5. 存儲引擎查看

5.1 使用 SELECT 確認會話存儲引擎

SELECT @@default_storage_engine;
## 5.2 存儲引擎(不代表生產(chǎn)操作)
會話級別:
set default_storage_engine=myisam;
全局級別(僅影響新會話):
set global default_storage_engine=myisam;
重啟之后,所有參數(shù)均失效.
如果要永久生效:
寫入配置文件
vim /etc/my.cnf
[mysqld]
default_storage_engine=myisam
存儲引擎是表級別的,每個表創(chuàng)建時可以指定不同的存儲引擎,但是我們建議統(tǒng)一為innodb.

5.3 SHOW 確認每個表的存儲引擎:

SHOW CREATE TABLE City\G;
SHOW TABLE STATUS LIKE 'CountryLanguage'\G

5.4 INFORMATION_SCHEMA 確認每個表的存儲引擎

[world]>select table_schema,table_name ,engine from information_schema.tables where table_schema not in ('sys','mysql','information_schema','performance_schema');
Master [world]>show table status;
Master [world]>show create table city;

5.5 修改一個表的存儲引擎

db01 [oldboy]>alter table t1 engine innodb;
注意:此命令我們經(jīng)常使用他篇亭,進行innodb表的碎片整理

5.6 平常處理過的MySQL問題--碎片處理

環(huán)境:centos7.4,MySQL 5.7.20,InnoDB存儲引擎
業(yè)務特點:數(shù)據(jù)量級較大,經(jīng)常需要按月刪除歷史數(shù)據(jù).
問題:磁盤空間占用很大,不釋放
處理方法:
以前:將數(shù)據(jù)邏輯導出,手工drop表,然后導入進去
現(xiàn)在:
對表進行按月進行分表(partition,中間件)
業(yè)務替換為truncate方式

5.6 擴展:如何批量修改

需求:將zabbix庫中的所有表,innodb替換為tokudb
select concat("alter table zabbix.",table_name," engine tokudb;") from
information_schema.tables where table_schema='zabbix' into outfile '/tmp/tokudb.sql';

6、InnoDB存儲引擎物理存儲結(jié)構(gòu)

6.0 最直觀的存儲方式(/data/mysql/data)

ibdata1:系統(tǒng)數(shù)據(jù)字典信息(統(tǒng)計信息)锄贷,UNDO表空間等數(shù)據(jù)
ib_logfile0 ~ ib_logfile1: REDO日志文件译蒂,事務日志文件。
ibtmp1: 臨時表空間磁盤位置谊却,存儲臨時表
frm:存儲表的列信息
ibd:表的數(shù)據(jù)行和索引

6.1 表空間(Tablespace)

6.1.1柔昼、共享表空間

需要將所有數(shù)據(jù)存儲到同一個表空間中 ,管理比較混亂
5.5版本出現(xiàn)的管理模式炎辨,也是默認的管理模式捕透。
5.6版本以,共享表空間保留,只用來存儲:數(shù)據(jù)字典信息,undo,臨時表乙嘀。
5.7 版本,臨時表被獨立出來了
8.0版本,undo也被獨立出去了

具體變化參考官方文檔:
https://dev.mysql.com/doc/refman/5.6/en/innodb-architecture.html
https://dev.mysql.com/doc/refman/5.7/en/innodb-architecture.html
https://dev.mysql.com/doc/refman/5.8/en/innodb-architecture.html

6.1.2 共享表空間設置

共享表空間設置(在搭建MySQL時末购,初始化數(shù)據(jù)之前設置到參數(shù)文件中)
[(none)]>select @@innodb_data_file_path;
[(none)]>show variables like '%extend%';
innodb_data_file_path=ibdata1:512M:ibdata2:512M:autoextend
innodb_autoextend_increment=64

6.1.3 獨立表空間

從5.6,默認表空間不再使用共享表空間虎谢,替換為獨立表空間盟榴。
主要存儲的是用戶數(shù)據(jù)
存儲特點為:一個表一個ibd文件,存儲數(shù)據(jù)行和索引信息
基本表結(jié)構(gòu)元數(shù)據(jù)存儲:
xxx.frm
最終結(jié)論:
      元數(shù)據(jù)            數(shù)據(jù)行+索引
mysql表數(shù)據(jù)    =(ibdataX+frm)+ibd(段婴噩、區(qū)擎场、頁)
        DDL             DML+DQL

MySQL的存儲引擎日志:
Redo Log: ib_logfile0  ib_logfile1,重做日志
Undo Log: ibdata1 ibdata2(存儲在共享表空間中)几莽,回滾日志
臨時表:ibtmp1迅办,在做join union操作產(chǎn)生臨時數(shù)據(jù),用完就自動

6.1.4 獨立表空間設置問題

db01 [(none)]>select @@innodb_file_per_table;
+-------------------------+
| @@innodb_file_per_table |
+-------------------------+
|                      1 |
+-------------------------+
alter table city dicard tablespace;
alter table city import tablespace;

6.1.5 真實的學生案例

案例背景:

硬件及軟件環(huán)境:
聯(lián)想服務器(IBM) 
磁盤500G 沒有raid
centos 6.8
mysql 5.6.33  innodb引擎  獨立表空間
備份沒有章蚣,日志也沒開

開發(fā)用戶專用庫:
jira(bug追蹤) 站欺、 confluence(內(nèi)部知識庫)    ------>LNMT

故障描述:

斷電了,啟動完成后“/” 只讀
fsck  重啟,系統(tǒng)成功啟動,mysql啟動不了究驴。
結(jié)果:confulence庫在  镊绪, jira庫不見了

學員求助內(nèi)容:

求助:
這種情況怎么恢復匀伏?
我問:
有備份沒
求助:
連二進制日志都沒有洒忧,沒有備份,沒有主從
我說:
沒招了够颠,jira需要硬盤恢復了熙侍。
求助:
1、jira問題拉倒中關(guān)村了
2履磨、能不能暫時把confulence庫先打開用著
將生產(chǎn)庫confulence蛉抓,拷貝到1:1虛擬機上/var/lib/mysql,直接訪問時訪問不了的

問:有沒有工具能直接讀取ibd
我說:我查查,最后發(fā)現(xiàn)沒有

我想出一個辦法來:

表空間遷移:
create table xxx
alter table  confulence.t1 discard tablespace;
alter table confulence.t1 import tablespace;
虛擬機測試可行剃诅。

處理問題思路:

confulence庫中一共有107張表巷送。
1、創(chuàng)建107和和原來一模一樣的表矛辕。
他有2016年的歷史庫笑跛,我讓他去他同時電腦上 mysqldump備份confulence庫
mysqldump -uroot -ppassw0rd -B  confulence --no-data >test.sql
拿到你的測試庫,進行恢復
到這步為止聊品,表結(jié)構(gòu)有了飞蹂。
2、表空間刪除翻屈。
select concat('alter table ',table_schema,'.'table_name,' discard tablespace;') from information_schema.tables where table_schema='confluence' into outfile '/tmp/discad.sql';
source /tmp/discard.sql
執(zhí)行過程中發(fā)現(xiàn)陈哑,有20-30個表無法成功。主外鍵關(guān)系
很絕望,一個表一個表分析表結(jié)構(gòu)惊窖,很痛苦刽宪。
set foreign_key_checks=0 跳過外鍵檢查。
把有問題的表表空間也刪掉了界酒。
3纠屋、拷貝生產(chǎn)中confulence庫下的所有表的ibd文件拷貝到準備好的環(huán)境中
select concat('alter table ',table_schema,'.'table_name,' import tablespace;') from information_schema.tables where table_schema='confluence' into outfile '/tmp/discad.sql';
4、驗證數(shù)據(jù)
表都可以訪問了盾计,數(shù)據(jù)挽回到了出現(xiàn)問題時刻的狀態(tài)(2-8)

8售担、事務的ACID特性

Atomic(原子性)

所有語句作為一個單元全部成功執(zhí)行或全部取消。不能出現(xiàn)中間狀態(tài)署辉。

Consistent(一致性)

如果數(shù)據(jù)庫在事務開始時處于一致狀態(tài)族铆,則在執(zhí)行該事務期間將保留一致狀態(tài)。

Isolated(隔離性)

事務之間不相互影響哭尝。

Durable(持久性)

事務成功完成后哥攘,所做的所有更改都會準確地記錄在數(shù)據(jù)庫中。所做的更改不會丟失材鹦。

9逝淹、事務的生命周期(事務控制語句)

9.1 事務的開始

begin
說明:在5.5 以上的版本,不需要手工begin桶唐,只要你執(zhí)行的是一個DML栅葡,會自動在前面加一個begin命令。

9.2 事務的結(jié)束

commit:提交事務
完成一個事務尤泽,一旦事務提交成功 欣簇,就說明具備ACID特性了。
rollback :回滾事務
將內(nèi)存中坯约,已執(zhí)行過的操作熊咽,回滾回去

9.3 自動提交策略(autocommit)

db01 [(none)]>select @@autocommit;
db01 [(none)]>set autocommit=0;
db01 [(none)]>set global autocommit=0;
注:
自動提交是否打開,一般在有事務需求的MySQL中闹丐,將其關(guān)閉
不管有沒有事務需求横殴,我們一般也都建議設置為0,可以很大程度上提高數(shù)據(jù)庫性能
(1)
set autocommit=0;   
set global autocommit=0;
(2)
vim /etc/my.cnf
autocommit=0     

9.4 隱式提交語句

用于隱式提交的 SQL 語句:
begin 
a
b
begin

SET AUTOCOMMIT = 1

導致提交的非事務語句:
DDL語句: (ALTER卿拴、CREATE 和 DROP)
DCL語句: (GRANT衫仑、REVOKE 和 SET PASSWORD)
鎖定語句:(LOCK TABLES 和 UNLOCK TABLES)
導致隱式提交的語句示例:
TRUNCATE TABLE
LOAD DATA INFILE
SELECT FOR UPDATE

9.5 開始事務流程:

1、檢查autocommit是否為關(guān)閉狀態(tài)
select @@autocommit;
或者:
show variables like 'autocommit';
2巍棱、開啟事務,并結(jié)束事務
begin
delete from student where name='alexsb';
update student set name='alexsb' where name='alex';
rollback;

begin
delete from student where name='alexsb';
update student set name='alexsb' where name='alex';
commit;

10. InnoDB 事務的ACID如何保證?

10.0 一些概念

redo log ---> 重做日志 ib_logfile0~1   50M   , 輪詢使用
redo log buffer ---> redo內(nèi)存區(qū)域
ibd     ----> 存儲 數(shù)據(jù)行和索引 
buffer pool --->緩沖區(qū)池,數(shù)據(jù)和索引的緩沖
LSN : 日志序列號 
磁盤數(shù)據(jù)頁,redo文件,buffer pool,redo buffer
MySQL 每次數(shù)據(jù)庫啟動,都會比較磁盤數(shù)據(jù)頁和redolog的LSN,必須要求兩者LSN一致數(shù)據(jù)庫才能正常啟動
WAL : write ahead log 日志優(yōu)先寫的方式實現(xiàn)持久化
臟頁: 內(nèi)存臟頁,內(nèi)存中發(fā)生了修改,沒寫入到磁盤之前,我們把內(nèi)存頁稱之為臟頁.
CKPT:Checkpoint,檢查點,就是將臟頁刷寫到磁盤的動作
TXID: 事務號,InnoDB會為每一個事務生成一個事務號,伴隨著整個事務.

image

10.1 redo log

10.1.1 Redo是什么惑畴?

redo,顧名思義“重做日志”,是事務日志的一種航徙。

10.1.2 作用是什么如贷?

在事務ACID過程中,實現(xiàn)的是“D”持久化的作用。對于AC也有相應的作用

10.1.3 redo日志位置

redo的日志文件:iblogfile0 iblogfile1

10.1.4 redo buffer

redo的buffer:數(shù)據(jù)頁的變化信息+數(shù)據(jù)頁當時的LSN號
LSN:日志序列號  磁盤數(shù)據(jù)頁杠袱、內(nèi)存數(shù)據(jù)頁尚猿、redo buffer芬首、redolog

10.1.5 redo的刷新策略

commit;
刷新當前事務的redo buffer到磁盤
還會順便將一部分redo buffer中沒有提交的事務日志也刷新到磁盤

10.1.6 MySQL CSR——前滾

MySQL : 在啟動時,必須保證redo日志文件和數(shù)據(jù)文件LSN必須一致, 如果不一致就會觸發(fā)CSR,最終保證一致
情況一:
我們做了一個事務,begin;update;commit.
1.在begin ,會立即分配一個TXID=tx_01.
2.update時,會將需要修改的數(shù)據(jù)頁(dp_01,LSN=101),加載到data buffer中
3.DBWR線程,會進行dp_01數(shù)據(jù)頁修改更新,并更新LSN=102
4.LOGBWR日志寫線程,會將dp_01數(shù)據(jù)頁的變化+LSN+TXID存儲到redobuffer
5. 執(zhí)行commit時,LGWR日志寫線程會將redobuffer信息寫入redolog日志文件中,基于WAL原則,
在日志完全寫入磁盤后,commit命令才執(zhí)行成功,(會將此日志打上commit標記)
6.假如此時宕機,內(nèi)存臟頁沒有來得及寫入磁盤,內(nèi)存數(shù)據(jù)全部丟失
7.MySQL再次重啟時,必須要redolog和磁盤數(shù)據(jù)頁的LSN是一致的.但是,此時dp_01,TXID=tx_01磁盤是LSN=101,dp_01,TXID=tx_01,redolog中LSN=102
MySQL此時無法正常啟動,MySQL觸發(fā)CSR.在內(nèi)存追平LSN號,觸發(fā)ckpt,將內(nèi)存數(shù)據(jù)頁更新到磁盤,從而保證磁盤數(shù)據(jù)頁和redolog LSN一值.這時MySQL正長啟動
以上的工作過程,我們把它稱之為基于REDO的"前滾操作"

11.2 undo 回滾日志

11.2.1 undo是什么穷蛹?

undo,顧名思義“回滾日志”

11.2.2 作用是什么免绿?

在事務ACID過程中皇耗,實現(xiàn)的是“A” 原子性的作用
另外CI也依賴于Undo
在rolback時,將數(shù)據(jù)恢復到修改之前的狀態(tài)
在CSR實現(xiàn)的是,將redo當中記錄的未提交的時候進行回滾.
undo提供快照技術(shù),保存事務修改之前的數(shù)據(jù)狀態(tài).保證了MVCC,隔離性,mysqldump的熱備

11.3 概念性的東西:

redo怎么應用的
undo怎么應用的
CSR(自動故障恢復)過程
LSN :日志序列號
TXID:事務ID
CKPT(Checkpoint)

11.4 鎖

“鎖”顧名思義就是鎖定的意思。
“鎖”的作用是什么华蜒?
在事務ACID過程中驳棱,“鎖”和“隔離級別”一起來實現(xiàn)“I”隔離性和"C" 一致性 (redo也有參與).
悲觀鎖:行級鎖定(行鎖)
誰先操作某個數(shù)據(jù)行,就會持有<這行>的(X)鎖.
樂觀鎖: 沒有鎖

11.5 隔離級別

影響到數(shù)據(jù)的讀取,默認的級別是 RR模式.
transaction_isolation   隔離級別(參數(shù))
負責的是,MVCC,讀一致性問題
RU  : 讀未提交,可臟讀,一般部議敘出現(xiàn)
RC  : 讀已提交,可能出現(xiàn)幻讀,可以防止臟讀.
RR  : 可重復讀,功能是防止"幻讀"現(xiàn)象 ,利用的是undo的快照技術(shù)+GAP(間隙鎖)+NextLock(下鍵鎖)
SR   : 可串行化,可以防止死鎖,但是并發(fā)事務性能較差
補充: 在RC級別下,可以減輕GAP+NextLock鎖的問題,但是會出現(xiàn)幻讀現(xiàn)象,一般在為了讀一致性會在正常select后添加for update語句.但是,請記住執(zhí)行完一定要commit 否則容易出現(xiàn)所等待比較嚴重.
例如:
[world]>select * from city where id=999 for update;
[world]>commit;

11.6 架構(gòu)改造項目

項目背景:
2臺  IBM X3650   32G  ,原來主從關(guān)系,2年多沒有主從了,"小問題"不斷(鎖,宕機后的安全)
MySQL 5.1.77   默認存儲引擎 MyISAM  
數(shù)據(jù)量: 60G左右 ,每周全備,沒有開二進制日志
架構(gòu)方案:
    1\. 升級數(shù)據(jù)庫版本到5.7.20 
    2\. 更新所有業(yè)務表的存儲引擎為InnoDB
    3\. 重新設計備份策略為熱備份,每天全備,并備份日志
    4\. 重新構(gòu)建主從
結(jié)果:
    1.性能
    2.安全方面
    3.快速故障處理

12 InnoDB存儲引擎核心特性-參數(shù)補充

12.1 存儲引擎相關(guān)

12.1.1 查看

show engines;
show variables like 'default_storage_engine';
select @@default_storage_engine;

12.1.2 如何指定和修改存儲引擎

(1) 通過參數(shù)設置默認引擎
(2) 建表的時候進行設置
(3) alter table t1 engine=innodb;

12.2. 表空間

12.2.1 共享表空間

innodb_data_file_path
一般是在初始化數(shù)據(jù)之前就設置好
例子:
innodb_data_file_path=ibdata1:512M:ibdata2:512M:autoextend

12.2.2 獨立表空間

show variables like 'innodb_file_per_table';

12.3. 緩沖區(qū)池

12.3.1 查詢

select @@innodb_buffer_pool_size;
show engine innodb status\G
innodb_buffer_pool_size 
一般建議最多是物理內(nèi)存的 75-80%

12.4. innodb_flush_log_at_trx_commit (雙一標準之一)

12.4.1 作用

主要控制了innodb將log buffer中的數(shù)據(jù)寫入日志文件并flush磁盤的時間點挣惰,取值分別為0塘安、1糠涛、2三個。

12.4.2 查詢

select @@innodb_flush_log_at_trx_commit;

12.4.3 參數(shù)說明:

1兼犯,每次事物的提交都會引起日志文件寫入忍捡、flush磁盤的操作,確保了事務的ACID切黔;flush  到操作系統(tǒng)的文件系統(tǒng)緩存  fsync到物理磁盤.
0砸脊,表示當事務提交時,不做日志寫入操作纬霞,而是每秒鐘將log buffer中的數(shù)據(jù)寫入文件系統(tǒng)緩存并且秒fsync磁盤一次凌埂;
2,每次事務提交引起寫入文件系統(tǒng)緩存,但每秒鐘完成一次fsync磁盤操作险领。
--------
The default setting of 1 is required for full ACID compliance. Logs are written and flushed to disk at each transaction commit.
With a setting of 0, logs are written and flushed to disk once per second. Transactions for which logs have not been flushed can be lost in a crash.
With a setting of 2, logs are written after each transaction commit and flushed to disk once per second. Transactions for which logs have not been flushed can be lost in a crash.
-------

12.5. Innodb_flush_method=(O_DIRECT, fdatasync)

image

https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_flush_method

12.5.1 作用

控制的是,log buffer 和data buffer,刷寫磁盤的時候是否經(jīng)過文件系統(tǒng)緩存

12.5.2 查看

show variables like '%innodb_flush%';

12.5.3 參數(shù)值說明

O_DIRECT  :數(shù)據(jù)緩沖區(qū)寫磁盤,不走OS buffer
fsync :日志和數(shù)據(jù)緩沖區(qū)寫磁盤,都走OS buffer
O_DSYNC  :日志緩沖區(qū)寫磁盤,不走 OS buffer

12.5.4 使用建議

最高安全模式
innodb_flush_log_at_trx_commit=1
Innodb_flush_method=O_DIRECT
最高性能:
innodb_flush_log_at_trx_commit=0
Innodb_flush_method=fsync

12.6. redo日志有關(guān)的參數(shù)

innodb_log_buffer_size=16777216
innodb_log_file_size=50331648
innodb_log_files_in_group = 3

13.擴展(自己擴展侨舆,建議是官方文檔秒紧。)

RR模式(對索引進行刪除時):
GAP:          間隙鎖
next-lock:    下一鍵鎖定

例子:
id(有索引)
1 2 3 4 5 6 
GAP:
在對3這個值做變更時绢陌,會產(chǎn)生兩種鎖,一種是本行的行級鎖熔恢,另一種會在2和4索引鍵上進行枷鎖
next-lock:
對第六行變更時脐湾,一種是本行的行級鎖,在索引末尾鍵進行加鎖叙淌,6以后的值在這時是不能被插入的秤掌。
總之:
GAP、next lock都是為了保證RR模式下鹰霍,不會出現(xiàn)幻讀闻鉴,降低隔離級別或取消索引,這兩種鎖都不會產(chǎn)生茂洒。
IX IS X S是什么?

17.小結(jié)

17.1 存儲引擎的類型

17.2 InnoDB和MyISAM

17.3 事務ACID

17.4 redo

17.5 undo

17.6 鎖

17.7 隔離級別

17.8 核心參數(shù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末孟岛,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌渠羞,老刑警劉巖斤贰,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異次询,居然都是意外死亡荧恍,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門屯吊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來送巡,“玉大人,你說我怎么就攤上這事盒卸∈诩瑁” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵世落,是天一觀的道長淮腾。 經(jīng)常有香客問我,道長屉佳,這世上最難降的妖魔是什么谷朝? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮武花,結(jié)果婚禮上圆凰,老公的妹妹穿的比我還像新娘。我一直安慰自己体箕,他們只是感情好专钉,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著累铅,像睡著了一般跃须。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上娃兽,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天菇民,我揣著相機與錄音,去河邊找鬼投储。 笑死第练,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的玛荞。 我是一名探鬼主播娇掏,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼勋眯!你這毒婦竟也來了婴梧?” 一聲冷哼從身側(cè)響起壁涎,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎志秃,沒想到半個月后怔球,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡浮还,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年竟坛,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钧舌。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡担汤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出洼冻,到底是詐尸還是另有隱情崭歧,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布撞牢,位于F島的核電站率碾,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏屋彪。R本人自食惡果不足惜所宰,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望畜挥。 院中可真熱鬧仔粥,春花似錦、人聲如沸蟹但。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽华糖。三九已至麦向,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間缅阳,已是汗流浹背磕蛇。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留十办,地道東北人。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓超棺,卻偏偏與公主長得像向族,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子棠绘,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 1件相、簡介 相當于Linux文件系統(tǒng)再扭,只不過比文件系統(tǒng)強大 2、功能了解 數(shù)據(jù)讀寫數(shù)據(jù)安全和一致性提高性能熱備份自動...
    成淺閱讀 668評論 0 0
  • 今天看到一位朋友寫的mysql筆記總結(jié)夜矗,覺得寫的很詳細很用心泛范,這里轉(zhuǎn)載一下,供大家參考下紊撕,也希望大家能關(guān)注他原文地...
    信仰與初衷閱讀 4,730評論 0 30
  • 如果您對數(shù)據(jù)庫感興趣罢荡,可以添加 DBA解決方案QQ群:895979329 1、簡介 2对扶、功能了解 3区赵、存儲引擎種類...
    MySQL_oldguo閱讀 19,358評論 4 33
  • 1)介紹 PerconaXtraBackup(簡稱PXB)是Percona公司開發(fā)的一個用于MySQL數(shù)據(jù)庫物理熱...
    溫東閱讀 2,503評論 0 6
  • (一) 我曾在迷霧之山向遠方凝望 我們都曾佇立于此處的峰巒 曾經(jīng)的所有,何時再見 我的故國浪南,只剩遙遠的光 ————...
    問過藍天閱讀 1,372評論 1 24