MYSQLPAGE頁及如何通過innochecksum來對ibd文件進行查詢

這篇文章給大家介紹MySQL PAGE頁及如何通過innochecksum來對ibd文件進行查詢,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

成都創(chuàng)新互聯(lián)網(wǎng)站建設公司是一家服務多年做網(wǎng)站建設策劃設計制作的公司,為廣大用戶提供了網(wǎng)站設計、成都網(wǎng)站設計,成都網(wǎng)站設計,廣告投放平臺,成都做網(wǎng)站選成都創(chuàng)新互聯(lián),貼合企業(yè)需求,高性價比,滿足客戶不同層次的需求一站式服務歡迎致電。

問:MYSQL的一個PAGE  頁多大

回答干脆利索,16K唄,我想這是大多數(shù)人的第一個反應和回答,這個回答沒有毛病。但這16k里面到底有多少是你表中存儲的那些實實在在的數(shù)據(jù) ??

這時95%的人肯能已經(jīng)......

我們都知道,MySql 存儲數(shù)據(jù)的物理單位,不是行,而是數(shù)據(jù)頁,默認是一個16KB的數(shù)據(jù)單元。實際上 MYSQL的頁的大小是可以改變的,可以是8K可以是32K,UNIV_PAGE_SIZE 其實是定義一個MYSQL頁面大小的參數(shù),同時UNIV_PAGE_SIZE_SHIFT也是與修改MYSQL 默認頁大小有關(guān)的量,如果你的頁的大小為 16K 則UNIV_PAGE_SIZE_SHIFT的數(shù)字必須設置為 14 ,2乘以14次自己,就是16K。(16384)(順便問一句 MYSQL一行能存儲的大小是多少?回味一下)

每個頁面中都會分配一個32位的整數(shù)頁碼,通過這個頁碼,頁面之間產(chǎn)生了關(guān)系,并且也限制了大小, 232 x 16 KiB = 64 TiB 這就算是一個表最大的存儲容量了。所以一個表的大小與單個頁面之間的關(guān)系如官方下面的圖,頁面是一個變量的話,其他都不變。

MYSQL PAGE頁及如何通過innochecksum來對ibd文件進行查詢

實際上MYSQL 的頁面存儲的格式也是有分門別類的,在每個數(shù)據(jù)頁的的文件頁頭中38個字節(jié)不是白占用的,他主要負責以下的一些功能

1 監(jiān)測頁面的數(shù)據(jù)的正確性,F(xiàn)IL_PAGE_CHECKSUM, (還記得MYSQL 廣泛提供的頁面監(jiān)測的工具嗎)  4 字節(jié)

2 FIL_PAGE_OFFSET ,這個其實可以理解為用頁面組成的表的每頁的編碼,用來看看這個物理的文件到底有多少個頁面,當前你訪問的頁面在整體的位置

4個字節(jié)

3 FIL_PAGE_PREV  FILE_PAGE_NEXT ,我們都在說MYSQL是B+ 樹的數(shù)據(jù)存儲結(jié)構(gòu),其中這兩個值就表達了 B + 數(shù)據(jù)樹中的雙向鏈表的形式, 因為他們兩個是指針,指定當前頁面前一個頁面的地址,也指向了當前頁面下一個頁面的地址。所以每個數(shù)據(jù)頁之間是一個“雙向鏈表”。這對數(shù)據(jù)的查詢時提取數(shù)據(jù)是非常重要的。

4 FIL_PAGE_LSN  被修改的日志序列位置LSN

5 FIL_PAGE_TYPE 當前頁面的類型  頁面是B+樹葉子節(jié)點, UNDO LOG ,索引節(jié)點,insert buffer空閑列表,insertbuffer位圖, 系統(tǒng)頁面,事務系統(tǒng)數(shù)據(jù),BLOB頁面,文件空間頭,擴展描述頁 等

6 LSN_FLUSH_LSN 系統(tǒng)表空間的一個頁中定義,與普通的數(shù)據(jù)頁面無關(guān)

7 FIL_PAGE_ARCH_LOG_NO_OR_SPACE_ID  頁面數(shù)據(jù)那個表空間

其中關(guān)于當前ibd 文件的中存儲的數(shù)據(jù)的類型可以通過mysql 自帶的工具 

innochecksum 來進行查看,這里我們打開MYSQL 中的一個ibd文件

MYSQL PAGE頁及如何通過innochecksum來對ibd文件進行查詢

在一個MYSQL Per = 1 情況下的頁面,我看可以看到這個文件中 有 1337個索引的頁面,我們的索引節(jié)點 INODE PAGE 只有一個,還有452個新分配的頁面,一個insert buffer bitmap 頁面, 1個文件 file spave header

我們將這些數(shù)字加在一起,1792 * 16384/1024/1024 = 28MB

MYSQL PAGE頁及如何通過innochecksum來對ibd文件進行查詢

MYSQL PAGE頁及如何通過innochecksum來對ibd文件進行查詢

從實際當中表的ibd文件,我們也可以驗證。

所以文件的存儲空間與我們的從Ibd文件中導出的數(shù)據(jù)記錄頁面的信息的組合最終得出的數(shù)據(jù)存儲頁面大小是一致的。

現(xiàn)在馬上就有一個疑問

問:那這28MB 的數(shù)據(jù)空間里面有沒有還可以寫入數(shù)據(jù)的頁面。

SELECT round((data_length+index_length)/1024/1024,2) FROM information_schema.tables WHERE   table_schema='employees'   AND table_name='dept_emp';

MYSQL PAGE頁及如何通過innochecksum來對ibd文件進行查詢

實際當中通過數(shù)據(jù)庫的方式SQL的語句來獲得表占用的數(shù)據(jù)空間,與通過innochecksum 獲得空間之間是對不上的。

對比一下,目前通過 innochecksum 獲得數(shù)據(jù)存儲空間占用是 20.89 MB

而通過語句來獲得是17.09MB

到底哪個更準確

我們對目前的表進行

OPTIMIZE TABLE dept_emp;  讓表中的空間進行一次整理

MYSQL PAGE頁及如何通過innochecksum來對ibd文件進行查詢

然后我看一下數(shù)值到底有什么改變,通過SQL 來計算后結(jié)果是 24.55

MYSQL PAGE頁及如何通過innochecksum來對ibd文件進行查詢

MYSQL PAGE頁及如何通過innochecksum來對ibd文件進行查詢

而我們再次通過innochecksum來對ibd文件進行查詢,占用的數(shù)據(jù)空間在20.77左右。

同時也做了其他的一些表的空間使用,以及free空間的計算,可以證明通過SQL 來獲得當前表的ibd的空間使用,與實際的表在LINUX下的使用情況是對不上的。

而通過innochecksum 來獲得數(shù)據(jù)表的使用情況,是比較穩(wěn)定,并且也是比較準確的。另外OPTIMIZE后會導致通過SQL 來計算表的空間占用浮動較大,而innochecksum 不會受到影響,并能準確返回實際的磁盤空間使用的情況。

關(guān)于MYSQL PAGE頁及如何通過innochecksum來對ibd文件進行查詢就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

本文名稱:MYSQLPAGE頁及如何通過innochecksum來對ibd文件進行查詢
URL分享:http://muchs.cn/article8/gpjsop.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設計、網(wǎng)站策劃、小程序開發(fā)、云服務器域名注冊、微信公眾號

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設計公司