2020-02-28存儲引擎

功能了解

數(shù)據(jù)讀寫

數(shù)據(jù)安全和一致性

提高性能

熱備份

自動故障恢復(fù)

高可用方面支持

等.

存儲引擎種類

InnoDB

MyISAM

MEMORY

ARCHIVE

FEDERATED

EXAMPLE

BLACKHOLE

MERGE

NDBCLUSTER

CSV

mysql>show engines;

innodb核心特性:

1、事務(wù)(Transaction)

2、MVCC(Multi-Version Concurrency Control多版本并發(fā)控制)

3、行級鎖(Row-level Lock)

4、ACSR(Auto Crash Safey Recovery)自動的故障安全恢復(fù)

5、支持熱備份(Hot Backup)6、Replication:Group Commit,GTID(GlobalTransactionID),多線程(Multi-Threads-SQL)

存儲引擎查看

使用 SELECT 確認(rèn)會話存儲引擎

SELECT @@default_storage_engine;

寫入配置文件vim/etc/my.cnf? ? [mysqld]default_storage_engine=myisam

SHOW 確認(rèn)每個表的存儲引擎:

SHOW CREATE TABLE City\G;

SHOW TABLE STATUS LIKE 'CountryLanguage'\G

?INFORMATION_SCHEMA 確認(rèn)每個表的存儲引擎


selecttable_schema,table_name,enginefrominformation_schema.tableswheretable_schema notin('sys','mysql','information_schema','performance_schema');

?修改一個表的存儲引擎

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


平常處理過的MySQL問題--碎片處理(面試問題)

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

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

環(huán)境:centos7.4,MySQL 5.7.20,InnoDB存儲引擎業(yè)務(wù)特點:數(shù)據(jù)量級較大,經(jīng)常需要按月刪除歷史數(shù)據(jù).

問題:磁盤空間占用很大,不釋放處理方法:以前:將數(shù)據(jù)邏輯導(dǎo)出,手工drop表

,然后導(dǎo)入進(jìn)去現(xiàn)在:對表進(jìn)行按月進(jìn)行分表(partition,中間件)業(yè)務(wù)替換為truncate方式

定期進(jìn)行碎片整理

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


ibdata1:系統(tǒng)數(shù)據(jù)字典信息(統(tǒng)計信息),UNDO表空間等數(shù)據(jù)

ib_logfile0 ~ ib_logfile1: REDO日志文件,事務(wù)日志文件。

ibtmp1: 臨時表空間磁盤位置,存儲臨時表

frm:存儲表的列信息

ibd:表的數(shù)據(jù)行和索引

表空間(Tablespace)


6.1.1、共享表空間

需要將所有數(shù)據(jù)存儲到同一個表空間中 ,

管理比較混亂5.5版本出現(xiàn)的管理模式,

也是默認(rèn)的管理模式。5.6版本以,共享表空間保留,只用來存儲:數(shù)據(jù)字典信息,undo,臨時表。

5.7 版本,臨時表被獨立出來了

8.0版本,undo也被獨立出去了

共享表空間設(shè)置(在搭建MySQL時,初始化數(shù)據(jù)之前設(shè)置到參數(shù)文件中)

mysql>select @@innodb_data_file_path;

+-------------------------+

| @@innodb_data_file_path |

+-------------------------+

| ibdata1:12M:autoextend? |

+-------------------------+

1 row in set (0.00 sec)

mysql>show variables like '%extend%';

+-----------------------------+-------+

| Variable_name? ? ? ? ? ? ? | Value |

+-----------------------------+-------+

| innodb_autoextend_increment | 64? ? |

+-----------------------------+-------+

1 row in set (0.01 sec)

搭建數(shù)據(jù)庫環(huán)境的時候? 可以提前設(shè)置好共享表空間

獨立表空間:

從5.6,默認(rèn)表空間不再使用共享表空間,替換為獨立表空間。

主要存儲的是用戶數(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+DQLMySQL的存儲引擎日志:Redo Log:ib_logfile0 ib_logfile1

,重做日志Undo Log:ibdata1ibdata2(存儲在共享表空間中),

回滾日志臨時表:ibtmp1,在做joinunion操作產(chǎn)生臨時數(shù)據(jù),用完就自動

mysql>select @@innodb_file_per_table;

+-------------------------+

| @@innodb_file_per_table |

+-------------------------+

|? ? ? ? ? ? ? ? ? ? ? 1 |

+-------------------------+

alter table city dicard tablespace;? ?alter table cityimporttablespace;?比較重要

關(guān)閉表空間語句 (慎用)

set global innodb_file_per_table=0;


事務(wù)的ACID特性

Atomic(原子性)

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

Consistent(一致性)

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

Isolated(隔離性)

事務(wù)之間不相互影響。

Durable(持久性)

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

事務(wù)的生命周期(事務(wù)控制語句)


?事務(wù)的開始

begin

標(biāo)準(zhǔn)的事物語句

DML:insert delete update

DDL?就是一個事物

自動提交策略(autocommit)

db01[(none)]>select @@autocommit;

db01[(none)]>setautocommit=0;

db01[(none)]>setglobalautocommit=0;

注:自動提交是否打開,一般在有事務(wù)需求的MySQL中,將其關(guān)閉不管有沒有事務(wù)需求,

我們一般也都建議設(shè)置為0,可以很大程度上提高數(shù)據(jù)庫性能

(1)setautocommit=0;setglobalautocommit=0;

+(2)vim/etc/my.cnfautocommit=0

?隱式提交語句


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

a b

begin?

SETAUTOCOMMIT=1

導(dǎo)致提交的非事務(wù)語句:DDL語句: (ALTER、CREATE和DROP)

DCL語句: (GRANT、REVOKE和SETPASSWORD)

鎖定語句:(LOCKTABLES和UNLOCKTABLES)

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

LOAD DATA INFILE

SELECT FOR UPDATE

InnoDB 事務(wù)的ACID如何保證?





redo的buffer:數(shù)據(jù)頁的變化信息+數(shù)據(jù)頁當(dāng)時的LSN號LSN:日志序列號 磁盤數(shù)據(jù)頁、內(nèi)存數(shù)據(jù)頁、redobuffer、redolog

臟頁? 內(nèi)存里的數(shù)據(jù)?沒有寫到磁盤里的數(shù)據(jù)

checkpoint?將臟頁的數(shù)據(jù)刷到磁盤

最后編輯于
?著作權(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)容