top
Loading...
7.4.6.MyISAM鍵高速緩沖
7.4.6. MyISAM鍵高速緩沖
7.4.6.1. 共享鍵高速緩沖訪問
7.4.6.2. 多鍵高速緩沖
7.4.6.3. 中點插入策略
7.4.6.4. 索引預加載
7.4.6.5. 鍵高速緩沖塊大小
7.4.6.6. 重構鍵高速緩沖

為了使硬盤I/O最小化,MyISAM存儲引擎使用一個被許多數據庫管理系統使用的策略。它使用一個緩存機制將經常訪問的表鎖在內存中:

·         對于索引塊,維護一個稱之為鍵高速緩沖(鍵高速緩沖區)的特殊結構。該結構包含大量塊緩存區,其中放置了最常用的索引塊。

·         對于數據塊,MySQL不使用特殊緩存。而使用原生的操作系統文件系統的緩存。

本節首先描述了MyISAM鍵高速緩沖的基本操作。然后討論了提高 鍵高速緩沖性能并使你更好地控制緩存操作的最新的更改:

·         多個線程可以并行訪問緩存。

·         可以設置多個鍵高速緩沖,并將表索引指定給具體緩存。

可以使用key_buffer_size系統變量控制 鍵高速緩沖的大小。如果該變量設置為零,不使用鍵高速緩沖。如果key_buffer_size值太小不能分配最小數量的塊緩存區(8),也不使用 鍵高速緩沖。

如果鍵高速緩沖不工作,只使用操作系統提供的原生文件系統緩存區訪問索引文件。(換句話說,使用與表數據塊相同的策略表來訪問索引塊)

索引塊是一個連續的訪問MyISAM索引文件的單位。通常一個索引塊的大小等于索引B-樹節點的大小。(在硬盤上使用B-樹數據結構表示索引。樹底部的節點為葉子節點。葉子節點上面的節點為非葉子節點)

鍵高速緩沖結構中的所有塊緩存區大小相同。該大小可以等于、大于或小于表索引塊的大小。通常這兩個值中的一個是另一個的幾倍。

當必須訪問表索引塊中的數據時,服務器首先檢查是否它可以用于鍵高速緩沖中的某些塊緩存區。如果適用,服務器訪問鍵高速緩沖中的數據而不是硬盤上的數據。也就是說,從緩存讀取或寫入緩存,而不是從硬盤讀寫。否則,服務器選擇一個包含一個不同的表索引塊的緩存塊緩存區,并用需要的表索引塊的拷貝替換那里的數據。一旦新的索引塊位于緩存中,可以訪問索引數據。

如果用于替換的塊已經被修改了,塊被視為“臟了”。在這種情況下,在替換前,其內容被刷新到它來自的表索引。

通常服務器遵從LRU(最近最少使用)策略:當選擇一個塊用于替換時,它選擇最近最少使用的索引塊。為了使該選擇更容易, 鍵高速緩沖模塊維護所有使用的塊的專門隊列(LRU)。當訪問塊時,它被放到隊列最后。當塊需要替換時,隊列開頭的塊是最近最少使用的塊,并成為第1個候選者。

作者:mysql.com
來源:http://dev.mysql.com/doc/refman/5.1/zh/optimization.html
北斗有巢氏 有巢氏北斗