亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2406 | 回復(fù): 3
打印 上一主題 下一主題

MySQL頁格式 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2010-12-23 19:39 |只看該作者 |倒序?yàn)g覽
InnoDB將所有記錄存儲在一個(gè)確定大小的單元中,也就是頁(有時(shí)候也稱為塊)。目前所有頁的大小都是固定的16K。
一個(gè)頁包含有很多記錄,另外也包含Headers和Trailer。下面我們從總體結(jié)構(gòu)上來看看頁的組成。
一個(gè)頁包含七個(gè)部分
        Fil Header
        Page Header
        Infimum + Supremum Records
        User Records
        Free Space
        Page Directory
        Fil Trailer
我們可以看到,一個(gè)頁包含兩對header/trailer。里面的一對,Page Header和Page Directory主要涉及到\page program group,外面的一對Fil Header和Fil Trailer主要涉及到\fil program group。Fil Header也被稱為File Page Header。
夾在headers和trailers中間的就是一些記錄和自由(未使用)空間。一個(gè)頁通常開始于兩個(gè)固定的記錄,稱為Infirmum和Supremum,然后就是用戶記錄。在用戶記錄和page directory中間是自由空間,用來存放新的記錄。
Fil Header
Fil Header由八個(gè)部分組成:
Name        Size        Remarks
FIL_PAGE_SPACE        4        4 ID of the space the page is in
FIL_PAGE_OFFSET        4        ordinal page number from start of space
FIL_PAGE_PREV        4        offset of previous page in key order
FIL_PAGE_NEXT        4        offset of next page in key order
FIL_PAGE_LSN        8        log serial number of page's latest log record
FIL_PAGE_TYPE        2        current defined types are: FIL_PAGE_INDEX, FIL_PAGE_UNDO_LOG, FIL_PAGE_INODE, FIL_PAGE_IBUF_FREE_LIST
FIL_PAGE_FILE_FLUSH_LSN        8        "the file has been flushed to disk at least up to this lsn" (log serial number), valid only on the first page of the file
FIL_PAGE_ARCH_LOG_NO        4        the latest archived log file number at the time that FIL_PAGE_FILE_FLUSH_LSN was written (in the log)
FIL_PAGE_SPACE是一個(gè)很重要的標(biāo)識符,因?yàn)椴煌捻摽赡軐儆谕晃募胁煌目臻g。
空間可能指的是log或表空間。
FIL_PAGE_PREV和FIL_PAGE_NEXT是頁的前后指針,用來指向前一個(gè)頁和后一個(gè)頁。
FIL_PAGE_FILE_FLUSH_LSN, FIL_PAGE_PREV和FIL_PAGE_NEXT都和日志相關(guān)。
FIL_PAGE_FILE_FLUSH_LSN 和FIL_PAGE_ARCH_LOG_NO只在數(shù)據(jù)文件的第一頁有效。
Page Header
Page Header由14個(gè)部分組成:
Name        Size        Remarks
PAGE_N_DIR_SLOTS        2        number of directory slots in the Page Directory part; initial value = 2
PAGE_HEAP_TOP        2        record pointer to first record in heap
PAGE_N_HEAP        2        number of heap records; initial value = 2
PAGE_FREE        2        record pointer to first free record
PAGE_GARBAGE        2        "number of bytes in deleted records"
PAGE_LAST_INSERT        2        record pointer to the last inserted record
PAGE_DIRECTION        2        either PAGE_LEFT, PAGE_RIGHT, or PAGE_NO_DIRECTION
PAGE_N_DIRECTION        2        number of consecutive inserts in the same direction, e.g. "last 5 were all to the left"
PAGE_N_RECS        2        number of user records
PAGE_MAX_TRX_ID        8        the highest ID of a transaction which might have changed a record on the page (only set for secondary indexes)
PAGE_LEVEL        2        level within the index (0 for a leaf page)
PAGE_INDEX_ID        8        identifier of the index the page belongs to
PAGE_BTR_SEG_LEAF        10        "file segment header for the leaf pages in a B-tree" (this is irrelevant here)
PAGE_BTR_SEG_TOP        10        "file segment header for the non-leaf pages in a B-tree" (this is irrelevant here)
PAGE_FREE:
被free掉的記錄都存在一個(gè)單向鏈表中,PAGE_FREE指針指向這個(gè)鏈表的第一條記錄。下一條記錄通過記錄的EXTRA BYTES來指示。
PAGE_DIRECTION和PAGE_N_DIRECTION:
用來指示記錄是否以升序的形式插入。
PAGE_HEAP_TOP和PAGE_FREE以及PAGE_LAST_INSERT:
和記錄指針一樣,這些指針也不是指向記錄的開始,而是記錄的原點(diǎn)(見記錄格式)。
PAGE_BTR_SEG_LEAF和PAGE_BTR_SEG_TOP:
這幾個(gè)域保存了索引節(jié)點(diǎn)的文件段信息(space ID, page number, byte offset)。InnoDB使用這些信息來分配一個(gè)新的頁。InnoDB為葉子頁和內(nèi)節(jié)點(diǎn)頁分別分配空間。

Infimum和Supremum記錄
在InnoDB中一個(gè)Infimum就相當(dāng)于達(dá)夢中的最小虛記錄,它比任何可能的實(shí)際值都要小,一個(gè)Supremum記錄相當(dāng)于達(dá)夢中的最大虛記錄,它比任何可能的實(shí)際值都要大。InnoDB在頁創(chuàng)建的時(shí)候?qū)⒆詣?dòng)創(chuàng)建Infimum記錄和Supremum記錄,這兩個(gè)記錄為頁中記錄的遍歷提供了一個(gè)屏障。而且infimum記錄對于臨時(shí)記錄鎖也有用。
User Records
在User Records部分,你可以找到用戶插入的所有記錄。
有兩種辦法可以遍歷用戶記錄,取決于你是要考慮組織順序還是不考慮。
一個(gè)無序的鏈表通常稱為heap,InnoDB插入一條新的記錄不會按照B樹鍵的順序來插入,而是在現(xiàn)在的行的最后插入,或者從刪除的行上分配空間。
但是根據(jù)B樹的定義,記錄的存取應(yīng)該是按照關(guān)鍵字來排序的,因此,每個(gè)記錄都有一個(gè)指針(EXTRA BYTES中的next域)來指向按照關(guān)鍵字排序的下一個(gè)記錄。也就是說,這些記錄是一個(gè)單向鏈表。
Page Directory
Page Directory是指向記錄的指針。有時(shí)候這些記錄指針被稱為slots或directory solts。InnoDB并不為頁中的每個(gè)記錄保留一個(gè)slot,而是使用一個(gè)稀疏目錄,在一個(gè)完整的頁中,每六個(gè)記錄使用一個(gè)slot。
slots記錄了記錄的邏輯順序。如果記錄物理格式為A B F D,那么slots中為A B D F。
但是因?yàn)镻age Directory并不為每個(gè)記錄保留一個(gè)slot,因此,它只能給出一個(gè)大體的位置,然后利用記錄的next指針。
Fil Trailer
Fil Trailer只有一個(gè)部分:
FIL_PAGE_END_LSN        8        low 4 bytes = checksum of page, last 4 bytes = same as FIL_PAGE_LSN
這個(gè)部分是用來保證頁的完整性的。
下面看你個(gè)完整的例子:
這是一個(gè)頁在物理上的存儲,
Address Values in Hexadecimal        Values in ASCII
0D4000: 00 00 00 00 00 00 00 35 FF FF FF FF FF FF FF FF        .......5........
0D4010: 00 00 00 00 00 00 E2 64 45 BF 00 00 00 00 00 00        .......dE.......
0D4020: 00 00 00 00 00 00 00 05 02 F5 00 12 00 00 00 00        ................
0D4030: 02 E1 00 02 00 0F 00 10 00 00 00 00 00 00 00 00        ................
0D4040: 00 00 00 00 00 00 00 00 00 14 00 00 00 00 00 00        ................
0D4050: 00 02 16 B2 00 00 00 00 00 00 00 02 15 F2 08 01        ................
0D4060: 00 00 03 00 89 69 6E 66 69 6D 75 6D 00 09 05 00        .....infimum....
0D4070: 08 03 00 00 73 75 70 72 65 6D 75 6D 00 22 1D 18        ....supremum."..
0D4080: 13 0C 06 00 00 10 0D 00 B7 00 00 00 00 04 14 00        ................
0D4090: 00 00 00 09 1D 80 00 00 00 2D 00 84 41 41 41 41        .........-..AAAA
0D40A0: 41 41 41 41 41 41 41 41 41 41 41 1F 1B 17 13 0C        AAAAAAAAAAA.....
...          
...          
0D7FE0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 74        ...............t
0D7FF0: 02 47 01 AA 01 0A 00 65 3A E0 AA 71 00 00 E2 64        .G.....e:..q...d
我們?nèi)サ羟懊?8字節(jié)的Fil Header。Page Header開始位置是0d4026,如下所示:
Location        Name        Description
00 05        PAGE_N_DIR_SLOTS        There are 5 directory slots.
02 F5        PAGE_HEAP_TOP        At location 0402F5, not shown, is the beginning of free space. Maybe a better name would have been PAGE_HEAP_END.
00 12        PAGE_N_HEAP        There are 18 (hexadecimal 12) records in the page.
00 00        PAGE_FREE        There are zero free (deleted) records.
00 00        PAGE_GARBAGE        There are zero bytes in deleted records.
02 E1        PAGE_LAST_INSERT        The last record was inserted at location 02E1, not shown, within the page.
00 02        PAGE_DIRECTION        A glance at page0page.h will tell you that 2 is the #defined value for PAGE_RIGHT.
00 0F        PAGE_N_DIRECTION        The last 15 (hexadecimal 0F) inserts were all done "to the right" because I was inserting in ascending order.
00 10        PAGE_N_RECS        There are 16 (hexadecimal 10) user records. Notice that PAGE_N_RECS is smaller than the earlier field, PAGE_N_HEAP.
00 00 00 00 00 00 00        PAGE_MAX_TRX_ID         
00 00        PAGE_LEVEL        Zero because this is a leaf page.
00 00 00 00 00 00 00 14        PAGE_INDEX_ID        This is index number 20.
00 00 00 00 00 00 00 02 16 B2        PAGE_BTR_SEG_LEAF         
00 00 00 00 00 00 00 02 15 F2        PAGE_BTR_SEG_TOP

論壇徽章:
8
綜合交流區(qū)版塊每周發(fā)帖之星
日期:2015-12-02 15:03:53數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2015-10-02 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2015-10-02 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2015-09-14 06:20:00金牛座
日期:2014-10-10 11:23:34CU十二周年紀(jì)念徽章
日期:2013-10-24 15:41:34酉雞
日期:2013-10-19 10:17:1315-16賽季CBA聯(lián)賽之北京
日期:2017-03-06 15:12:44
2 [報(bào)告]
發(fā)表于 2010-12-24 09:35 |只看該作者
LZ原創(chuàng)???

原創(chuàng)的話我就加精了!

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2010-12-24 11:59 |只看該作者
回復(fù) 2# ruochen


    不是,公司內(nèi)部交流的

論壇徽章:
8
綜合交流區(qū)版塊每周發(fā)帖之星
日期:2015-12-02 15:03:53數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2015-10-02 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2015-10-02 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2015-09-14 06:20:00金牛座
日期:2014-10-10 11:23:34CU十二周年紀(jì)念徽章
日期:2013-10-24 15:41:34酉雞
日期:2013-10-19 10:17:1315-16賽季CBA聯(lián)賽之北京
日期:2017-03-06 15:12:44
4 [報(bào)告]
發(fā)表于 2010-12-24 17:44 |只看該作者
不錯(cuò)

都在挖掘internal的東西,研究的差不多的時(shí)候就出點(diǎn)工具共享吧,呵呵
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP