MySQL的表空間是什么
今天我要跟你分享的話題是:“大家常說(shuō)的表空間到底是什么?究竟什么又是數(shù)據(jù)表?”
這其實(shí)是一個(gè)概念性的知識(shí)點(diǎn),當(dāng)作拓展知識(shí)。涉及到的概念大家了解一下就好,涉及的參數(shù),留個(gè)印象就好。
一、什么是表?
但凡是用過(guò)MySQL都知道,直觀上看,MySQL的數(shù)據(jù)都存在數(shù)據(jù)表中。
比如一條Update SQL:
update user set username = '白日夢(mèng)' where id = 999;
它將user這張數(shù)據(jù)表中id為1的記錄的username列修改成了‘白日夢(mèng)'
這里的user其實(shí)就是數(shù)據(jù)表。當(dāng)然這不是重點(diǎn),重點(diǎn)是我想表達(dá):數(shù)據(jù)表其實(shí)是邏輯上的概念。而下面要說(shuō)的表空間是物理層面的概念。
二、什么是表空間?
不知道你有沒(méi)有看到過(guò)這句話:“在innodb存儲(chǔ)引擎中數(shù)據(jù)是按照表空間來(lái)組織存儲(chǔ)的”。其實(shí)有個(gè)潛臺(tái)詞是:表空間是表空間文件是實(shí)際存在的物理文件。
大家不用糾結(jié)為啥它叫表空間、為啥表空間會(huì)對(duì)應(yīng)著磁盤(pán)上的物理文件,因?yàn)镸ySQL就是這樣設(shè)計(jì)、設(shè)定的。直接接受這個(gè)概念就好了。
MySQL有很多種表空間,下面一起來(lái)了解一下。
三、sys表空間
你可以像下面這樣查看你的MySQL的系統(tǒng)表空間
Value部分的的組成是:name:size:attributes
默認(rèn)情況下,MySQL會(huì)初始化一個(gè)大小為12MB,名為ibdata1文件,并且隨著數(shù)據(jù)的增多,它會(huì)自動(dòng)擴(kuò)容。
這個(gè)ibdata1文件是系統(tǒng)表空間,也是默認(rèn)的表空間,也是默認(rèn)的表空間物理文件,也是傳說(shuō)中的共享表空間。
關(guān)于這個(gè)共享表空間,直觀上看,如果這個(gè)表空間能為multiple tables.存儲(chǔ)數(shù)據(jù),那么它就可以被稱為共享表空間,所以你可以認(rèn)為系統(tǒng)表空間是共享表空間。
四、配置sys表空間
系統(tǒng)表空間的數(shù)量和大小可以通過(guò)啟動(dòng)參數(shù):innodb_data_file_path
# my.cnf [mysqld] innodb_data_file_path=/dir1/ibdata1:2000M;/dir2/ibdata2:2000M:autoextend
五、file per table 表空間
如果你想讓每一個(gè)數(shù)據(jù)庫(kù)表都有一個(gè)單獨(dú)的表空間文件的話,可以通過(guò)參數(shù)innodb_file_per_table設(shè)置。
這個(gè)參數(shù)只有在MySQL5.6或者是更高的版本中才可以使用。
可以通過(guò)配置文件
[mysqld] innodb_file_per_table=ON
也可以通過(guò)命令
mysql> SET GLOBAL innodb_file_per_table=ON;
讓你將其設(shè)置為ON,那之后InnoDB存儲(chǔ)引擎產(chǎn)生的表都會(huì)自己獨(dú)立的表空間文件。
獨(dú)立的表空間文件命名規(guī)則:表名.ibd
注意:
獨(dú)立表空間文件中僅存放該表對(duì)應(yīng)數(shù)據(jù)、索引、insert buffer bitmap。
其余的諸如:undo信息、insert buffer 索引頁(yè)、double write buffer 等信息依然放在默認(rèn)表空間,也就是共享表空間中。
這里的undo、insert buffer、double write buffer 如果你不了解他們是啥也沒(méi)關(guān)系。按照大綱排期,我會(huì)在第 41、42 篇文中跟大家分享。在這里只需要先了解即使你設(shè)置了innodb_file_per_table=ON 共享表空間的體量依然會(huì)不斷的增長(zhǎng),并且你即使你不斷的使用undo進(jìn)行rollback,共享表空間大小也不會(huì)縮減就好了。
查看我的表空間文件:
最后再簡(jiǎn)述一下這種file per table的優(yōu)缺點(diǎn):
優(yōu)點(diǎn):
- 提升容錯(cuò)率,表A的表空間損壞后,其他表空間不會(huì)收到影響。s
- 使用MySQL Enterprise Backup快速備份或還原在每表文件表空間中創(chuàng)建的表,不會(huì)中斷其他InnoDB 表的使用
缺點(diǎn):
對(duì)fsync系統(tǒng)調(diào)用來(lái)說(shuō)不友好,如果使用一個(gè)表空間文件的話單次系統(tǒng)調(diào)用可以完成數(shù)據(jù)的落盤(pán),但是如果你將表空間文件拆分成多個(gè)。原來(lái)的一次fsync可能會(huì)就變成針對(duì)涉及到的所有表空間文件分別執(zhí)行一次fsync,增加fsync的次數(shù)。
六、臨時(shí)表空間
臨時(shí)表空間用于存放用戶創(chuàng)建的臨時(shí)表和磁盤(pán)內(nèi)部臨時(shí)表。
參數(shù)innodb_temp_data_file_path定義了臨時(shí)表空間的一些名稱、大小、規(guī)格屬性如下圖:
查看臨時(shí)表空間文件存放的目錄
七、undo表空間
相信你肯定聽(tīng)過(guò)說(shuō)undolog,常見(jiàn)的當(dāng)你的程序想要將事物rollback時(shí),底層MySQL其實(shí)就是通過(guò)這些undo信息幫你回滾的。
在MySQL的設(shè)定中,有一個(gè)表空間可以專門(mén)用來(lái)存放undolog的日志文件。
然而,在MySQL的設(shè)定中,默認(rèn)的會(huì)將undolog放置到系統(tǒng)表空間中。
如果你的MySQL是新安裝的,那你可以通過(guò)下面的命令看看你的MySQL undo表空間的使用情況:
大家可以看到,我的MySQL的undo log 表空間有兩個(gè)。
也就是我的undo從默認(rèn)的系統(tǒng)表空間中轉(zhuǎn)移到了undo log專屬表空間中了。
那undo log到底是該使用默認(rèn)的配置放在系統(tǒng)表空間呢?還是該放在undo表空間呢?
這其實(shí)取決服務(wù)器使用的存儲(chǔ)卷的類型。
如果是SSD存儲(chǔ),那推薦將undo info存放在 undo表空間中。
以上就是MySQL的表空間是什么的詳細(xì)內(nèi)容,更多關(guān)于MySQL 表空間的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
將json文件數(shù)據(jù)導(dǎo)入到MySQL表中的詳細(xì)教程
如何使用json文件將數(shù)據(jù)導(dǎo)入到MySQL數(shù)據(jù)庫(kù)中的表里?Excel表格等文件的數(shù)據(jù)通過(guò)java或者python等語(yǔ)言讀取后生成一個(gè)json文件,然后想要將文件中的數(shù)據(jù)寫(xiě)入到MySQL表中,本文介紹了將json文件數(shù)據(jù)導(dǎo)入到MySQL表中的詳細(xì)教程,需要的朋友可以參考下2024-07-07mysql SKIP-NAME-RESOLVE 錯(cuò)誤的使用時(shí)機(jī)造成用戶權(quán)限
新加的一臺(tái)服務(wù)器,連接內(nèi)網(wǎng)中的一臺(tái)mysql服務(wù)器的時(shí)候,經(jīng)常出現(xiàn)超時(shí)。2011-06-06mysql 定時(shí)任務(wù)的實(shí)現(xiàn)與使用方法示例
這篇文章主要介紹了mysql 定時(shí)任務(wù)的實(shí)現(xiàn)與使用方法,結(jié)合實(shí)例形式分析了MySQL定時(shí)任務(wù)的相關(guān)原理、創(chuàng)建及使用方法,需要的朋友可以參考下2019-11-11MySQL 數(shù)據(jù)庫(kù)鐵律(小結(jié))
這篇文章主要介紹了MySQL 數(shù)據(jù)庫(kù)鐵律,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09Sql Server數(shù)據(jù)庫(kù)遠(yuǎn)程連接訪問(wèn)設(shè)置詳情
這篇文章主要介紹了Sql Server數(shù)據(jù)庫(kù)遠(yuǎn)程連接訪問(wèn)設(shè)置詳情,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容戒殺,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09mysql報(bào)錯(cuò)Duplicate entry ‘xxx‘ for key&nbs
有時(shí)候?qū)Ρ磉M(jìn)行操作,例如加唯一鍵,或者插入數(shù)據(jù),會(huì)報(bào)錯(cuò),本文就來(lái)介紹一下mysql報(bào)錯(cuò)Duplicate entry ‘xxx‘ for key ‘字段名‘的解決方法,感興趣的可以了解一下2023-10-10