第6 章調整快取大小
文章推薦指數: 80 %
Directory Server 快取記憶體和磁碟上的目錄資訊,以便能夠更快速地回應用戶端的要求。
適當地調整快取,可將處理用戶端要求時,對存取磁碟子系統的需求降到最低。
上一章
目錄
索引
下一章
SunONEDirectoryServer5.2安裝和調整指南
第6章
調整快取大小
DirectoryServer快取記憶體和磁碟上的目錄資訊,以便能夠更快速地回應用戶端的要求。
適當地調整快取,可將處理用戶端要求時,對存取磁碟子系統的需求降到最低。
注意
除非快取經過調整並且運作順暢,否則其他調整對效能的影響很有限。
快取類型
DirectoryServer處理三種快取類型,如表 6-1中所述。
表6-1   快取
快取類型
描述
資料庫
每個DirectoryServer實例都有一個資料庫快取,其中儲存了使用資料庫格式的索引和項目。
項目
每個尾碼都有一個項目快取,其中儲存了前一作業期間擷取自資料庫的項目,該項目並已格式化,以便能快速傳送至用戶端的應用程式。
匯入
每個DirectoryServer實例都有一個匯入快取,其結構類似於資料庫快取,並且是在大量載入時使用。
當在以下作業系統中以及從磁碟子系統的I/O緩衝區處理DirectoryServer時,檔案系統快取亦有助於DirectoryServer。
圖 6-1顯示處理三個尾碼的DirectoryServer實例快取,而每個尾碼都有它自己的項目快取。
實體被設定為可在不同的磁碟子系統中處理重要磁碟活動、放置異動記錄檔、資料庫和其他檔案與記錄檔,如第8章「調整記錄」中所建議。
圖6-1   內容中的項目和資料庫快取
資料庫快取
每個DirectoryServer實體都有一個資料庫快取。
資料庫快取儲存含有索引和項目之資料庫的頁面。
每個頁面並不是一個項目,而是含有部分資料庫的記憶體片段。
您可以指定資料庫快取大小(nsslapd-dbcachesize)。
資料庫快取大小的變更會在重新啟動伺服器後生效,並且使用伺服器啟動時所配置的資料庫快取空間。
DirectoryServer移動資料庫檔案和資料庫快取之間的頁面,以維持最大的資料庫快取大小。
DirectoryServer用於資料庫快取的實際記憶體大小,最多可能會超過您所指定大小的25%,因為系統需要額外的記憶體來管理本身的資料庫快取。
當使用的資料庫快取非常大時,可透過經驗測試、並利用Solaris系統上的pmap(1)等工具來監控記憶體使用狀況,以驗證DirectoryServer使用的記憶體大小並未超過可用的實體記憶體。
超過可用實體記憶體將會使系統開始重複呼叫,而導致效能嚴重降低。
亦可使用ps(1)公用程式(顯示於UNIX平台DirectoryServer支援上)加上-ppid與-oformat選項,來檢視諸如DirectoryServer(ns-slapd)之類的特定處理序所用之目前記憶體。
在Windows系統上,[工作管理員處理序]標籤頁列出基於每個處理序的記憶體使用率(slapd.exe)。
如需詳細資料,請參閱作業系統的說明文件。
使用32位元的伺服器時,實際的資料庫快取大小必須限制在2GB(含)以下。
注意
在Windows和AIX平台上,請勿配置超過1GB(1,073,741,824位元組)的資料庫快取。
有關nsslapd-dbcachesize值有效範圍的詳細資料,請參閱「SunONEDirectoryServer參考手冊」。
項目快取
項目快取儲存最近存取的項目,這些項目已格式化以傳送給用戶端應用程式。
您指定尾碼的項目快取大小(nsslapd-cachememsize)和最大項目數(nsslapd-cachesize)。
項目快取依需求配置。
DirectoryServer可以非常有效率地自項目快取中傳回項目,因為儲存在此快取中的項目已經格式化。
資料庫中的項目是儲存成位元組的原始字串,因此在傳送給用戶端應用程式前必須格式化(並且儲存在項目快取中)。
指定項目快取大小時,需要知道nsslapd-cachememsize表示DirectoryServer從基礎記憶體配置程式庫要求多少記憶體。
依據記憶體配置程式庫如何處理這樣的要求,實際使用的記憶體可能遠遠大於最終用於DirectoryServer的項目快取之有效記憶體最大數量。
DirectoryServer程序實際使用的記憶體主要依存於使用的記憶體配置程式庫,以及快取的項目。
具有很多小屬性值的項目一般比具有較少大屬性值的項目要求更多的額外資源。
使用32位元的伺服器時,實際的項目快取大小必須限制在2GB(含)以下。
注意
在AIX平台上,DirectoryServer是用maxdata=0x50000000所建立,允許您為資料庫快取和項目快取各配置1GB。
如果您必須變更maxdata的值,請聯絡SunONE支援人員。
有關nsslapd-cachememsize和nsslapd-cachesize值有效範圍的詳細資料,請參閱「SunONEDirectoryServer參考手冊」。
匯入快取
匯入快取僅在尾碼初始化期間建立和使用,也稱為大量載入或匯入。
如果部署只涉及到offline尾碼的初始化,則匯入快取和資料庫快取不會一起使用,所以您不需要在彙總快取大小時同時加入它們,如「總彙總快取大小」中所述。
您指定匯入快取大小(nsslapd-import-cachesize)。
匯入快取大小的變更會在下一次尾碼重設和初始化時生效,並使用為初始化所配置的匯入快取,而該快取會在初始化後釋放。
DirectoryServer會以處理資料庫快取相同的方式來處理匯入快取。
因此請確定有足夠的實體記憶體可供使用以防止交換。
使用32位元的伺服器時,實際的匯入快取大小必須限制在2GB(含)以下。
有關nsslapd-import-cachesize值有效範圍的詳細資料,請參閱「SunONEDirectoryServer參考手冊」。
檔案系統快取
作業系統將DirectoryServer快取和其他應用程式沒有使用的可用記憶體配置給檔案系統快取。
此快取儲存最近讀取自磁碟的資料,並讓後續的要求可以從這裡取得從快取所複製的資料,而不需再從磁碟讀取一次。
因記憶體存取比磁碟存取快上許多倍,所以保留一些實體記憶體作為檔案系統快取可增進效能。
如需有關檔案系統快取的詳細資料,請參閱作業系統的說明文件。
總彙總快取大小
同時使用的所有快取總和,必須保持小於可用實體記憶體的總大小,減去檔案系統快取原訂使用的記憶體。
使用32位元的伺服器時,這表示實際的總彙總快取大小必須限制在2GB(含)以下。
使用的總快取大小可能遠大於指定的大小。
如需如何檢查快取大小以及DirectoryServer程序大小是否沒有超過可用實際記憶體的提示,請參閱「資料庫快取」。
注意
在Windows平台上,應用程式可用的最大位址空間為2GB。
如果總彙總快取大小超過這個限制,則DirectoryServer便會退出並出現錯誤訊息。
如果尾碼在DirectoryServer處於線上狀態時初始化(大量載入),則資料庫、項目和匯入快取大小的總和應該保持小於可用實體記憶體的總大小。
表6-2   尾碼初始化(匯入)作業和快取的使用
快取類型
離線匯入
線上匯入
資料庫
否
是
項目
是
是
匯入
是
是
如果所有尾碼初始化都是在DirectoryServer停止時離線執行的,則此限制範圍左右可能都適用。
在這種情況下,匯入快取並不會與資料庫快取共存,因此您可以配置相同的記憶體給匯入快取和資料庫快取,前者是供離線尾碼初始化使用,而後者是在線上使用。
但是,如果您選擇執行此特殊的情況,則請確定沒有人在執行的系統上執行線上大量載入。
同時使用的快取總和,仍然必須維持小於可用實體記憶體的總大小。
如何搜尋使用快取
圖 6-2說明DirectoryServer如何同時處理指定BaseDN的搜尋與使用篩選器的搜尋。
個別的線代表存取不同記憶體層級的執行緒,而虛線代表透過有效調整的最小化步驟。
圖6-2   搜尋和快取
基礎搜尋處理
如圖所示,基礎搜尋(指定BaseDN的搜尋)是DirectoryServer所處理最簡單的搜尋類型。
若要處理這類搜尋,DirectoryServer:
嘗試從項目快取中擷取擁有指定BaseDN的項目。
如果在其中找到項目,DirectoryServer會檢查該候選項目是否符合搜尋所提供的篩選器。
如果該項目符合,DirectoryServer便會快速地將已格式化的快取項目傳回給用戶端應用程式。
嘗試從資料庫快取擷取項目。
如果在其中找到項目,DirectoryServer會將項目複製到尾碼的項目快取中,然後以在項目快取中找到該項目的方式來進行處理。
嘗試從資料庫本身擷取項目。
如果在其中找到項目,DirectoryServer會將項目複製到資料庫快取中,然後以在資料庫快取中找到該項目的方式來進行處理。
樹狀子目錄和單層搜尋處理
亦如圖 6-2中所示,在樹狀子目錄或樹狀目錄的層級中搜尋時,涉及額外的處理,以處理數組的項目。
若要處理這類搜尋,DirectoryServer:
嘗試從資料庫快取的索引中,建立一組符合篩選器的候選項目。
如果沒有顯示適當的索引,則必須從資料庫本身的相關項目中產生一組候選項目。
處理各候選項目經由:
執行基礎搜尋以擷取項目。
檢查項目是否符合搜尋所提供的篩選器。
如果項目符合篩選器,則將項目傳回給用戶端應用程式。
這樣,DirectoryServer便可避免在記憶體中建構組合。
理想情況下,在調整DirectoryServer之前您知道要執行何種搜尋。
而在實際執行時,請透過經驗測試來驗證您的假設。
更新如何使用快取
圖 6-3說明DirectoryServer如何處理更新。
個別的線代表存取不同記憶體層級的執行緒,而虛線代表透過有效調整的最小化步驟。
圖6-3   更新和快取
更新涉及到的處理比搜尋要多。
若要處理更新,DirectoryServer:
執行BaseDN搜尋擷取項目以進行更新,或是在新增尚不存在的作業時進行驗證。
變更資料庫快取時會更新索引,特別是受更新影響的任何索引。
如果受更新影響的資料尚未載入資料庫快取,則此步驟在相關資料載入快取時會導致產生磁碟活動。
將與變更有關的資訊寫入異動紀錄檔,等待資訊排清到磁碟中。
如需詳細資訊,請參閱「交易記錄」。
將更新項目格式化,並將它複製到尾碼的項目快取中。
將成功更新的認可傳回給用戶端應用程式。
尾碼初始化如何使用快取
圖 6-4說明DirectoryServer如何處理尾碼初始化,也稱為大量載入匯入。
個別的線代表存取不同記憶體層級的執行緒,而虛線代表透過有效調整的最小化步驟。
圖6-4   尾碼初始化(大量載入)和快取
若要初始化尾碼,DirectoryServer:
從LDIF啟動執行緒以餵送項目快取,此項目快取是作為緩衝區。
啟動每個受影響索引的執行緒,並啟動執行緒以在匯入快取中建立項目。
這些執行緒會消耗餵送到項目快取中的項目。
當匯入快取用盡時,將從資料庫檔案進行讀寫。
DirectoryServer在尾碼初始化期間可能也會寫入記錄訊息,但並不會寫入異動記錄檔。
DirectoryServer所提供的尾碼初始化工具,如ldif2db(/usr/sbin/directoryserverldif2db),提供與快取點擊率和匯入流量相關的回饋。
若快取點擊率和匯入流量同時降低,即表示匯入快取可能太小。
請考慮增加匯入快取大小。
搜尋最佳化
為達到最佳效能,請盡量快取記憶體中的目錄資料。
為防止目錄從磁碟讀取資訊,您必須限制磁碟I/O瓶頸。
有幾種不同的方式可達成此目的,而採取的方式則視您樹狀目錄、可用的記憶體數量與所使用的硬體而定。
根據您的部署,您可以選擇配置較多或較少的記憶體給項目和資料庫快取,以最佳化搜尋效能。
此外,您可以選擇跨越不同伺服器上的DirectoryServer使用者分散搜尋。
記憶體中的所有項目和索引
想像最佳的情況。
資料庫和項目快取適合可用的實體記憶體。
項目快取大到足以儲存目錄中的所有項目。
資料庫快取大到最少足以儲存所有索引。
在這種情況下,搜尋會找到快取中的所有項目。
DirectoryServer永遠不需到檔案系統快取或磁碟中來擷取項目。
在這種情況下,請確定資料庫快取即使在更新後也能包含所有資料庫索引。
當空間被資料庫快取中的索引用盡時,對於每次提出的搜尋要求,DirectoryServer都必須從磁碟讀取索引,從而嚴重影響到流量。
DirectoryServerConsole會在[狀態]標籤下顯示點擊率和其他有用的資訊,如圖 6-5中所示。
圖6-5   使用DirectoryServerConsole監控快取點擊率
延伸文章資訊
- 1聊一聊CPU快取的作用,是越大越好嗎? - 3C匠
因為CPU運算速度太快了,光靠記憶體讀寫完全跟不上,而CPU快取的資料交換 ... 總的來說,不同工藝和架構之間的CPU,單純從三級快取大小是看不出來性能 ...
- 2記憶體RAM 基本常識:容量大小、時脈、傳輸速度與插槽規格
記憶體(Random Access Memory,簡稱RAM)是電腦暫時儲存資料的地方,它介於CPU 快取(cache)與硬碟之間,一般來說記憶體越大,則電腦能夠同時處理的 ...
- 3CPU的快取大小到底在哪邊會有影響? - Mobile01
OS要執行一個程式時會先把程式從硬碟載到RAM等待CPU處理,CPU要執行程式時才會把程式碼預載到L3或L2,再到CPU去執行,所以理論上L1與L2越大效能就越好,
- 4處理器的快取記憶體(Cache)為何要分成L1和L2? - iT 邦幫忙
現在有許多CPU的L1快取記憶體(L1 Cache Memory)是128K的容量,但是有的會介紹到64K+64K的L1快取記憶體,為什麼要這樣子寫呢?有沒有什麼特別的原因呢?第二個64K是L2...
- 5CPU價格差別為什麼這麼大?三層快取是關鍵
3、L3 Cache(三級快取)CPU的第三層快取記憶體容量更大,執行速度則更慢, ... 有80%的命中率,所以,L1快取記憶體的容量大小對CPU的效能影響不明顯。