自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

詳解數(shù)據(jù)庫中的分頁、內(nèi)存和I/O延遲

數(shù)據(jù)庫
在這里我們將講解AIXA中的分頁、內(nèi)存和I/O延遲,不過這樣的內(nèi)容也適合大家了解數(shù)據(jù)庫在這方面的設(shè)置。

幾年前我寫了一篇關(guān)于 AIX 調(diào)優(yōu)的文章,現(xiàn)在 AIX 7 出現(xiàn)了,所以有必要重新審視需要在 AIX 系統(tǒng)上執(zhí)行的基本調(diào)優(yōu)措施。已經(jīng)發(fā)布的許多技術(shù)級別 (TL) 和一些建議可能會改變。在本文中,我將提供與 AIX 5.3、6.1 和 7 中的可調(diào)項(xiàng)相關(guān)的 AIX 調(diào)優(yōu)信息。

我主要關(guān)注 I/O、內(nèi)存和網(wǎng)絡(luò)。在默認(rèn)情況下,AIX 6 和 7 在內(nèi)存調(diào)優(yōu)方面做得相當(dāng)好,只需要做幾個(gè)小調(diào)整。但是,AIX 5.3 在這個(gè)方面需要更多調(diào)優(yōu)。圖 1 給出不同的可調(diào)項(xiàng)及其默認(rèn)設(shè)置。第四欄是對于這三個(gè)版本最新的 TL 的這些設(shè)置的推薦值。

圖 1.不同可調(diào)項(xiàng)及其默認(rèn)設(shè)置

圖 1.不同可調(diào)項(xiàng)及其默認(rèn)設(shè)置

請記住一個(gè)要點(diǎn):在安裝全新的 AIX 6 或 7 時(shí),會自動地設(shè)置新的內(nèi)存可調(diào)項(xiàng)默認(rèn)值。如果是從 AIX 5.3 遷移系統(tǒng),那么在 AIX 5.3 中設(shè)置的所有可調(diào)項(xiàng)會隨同遷移。在執(zhí)行遷移之前,建議記錄已經(jīng)修改的所有可調(diào)項(xiàng)(取得 /etc/tunables/nextboot 的拷貝),然后把可調(diào)項(xiàng)恢復(fù)為默認(rèn)值。在遷移之后,檢查 nextboot 并確保其中沒有任何內(nèi)容?,F(xiàn)在,討論需要為 AIX 6 或 7 修改的可調(diào)項(xiàng)。

分頁空間

最佳實(shí)踐建議在不同的不太忙的硬盤驅(qū)動器 (hdisk) 上配置多個(gè)相同大小的分頁空間。所有分頁空間應(yīng)該建立鏡像,或者放在 RAID(1 或 5)存儲區(qū)域網(wǎng)絡(luò) (SAN) 上。除非數(shù)據(jù)庫需要,分頁空間一般不需要達(dá)到內(nèi)存量的兩倍。我曾經(jīng)在 AIX 上用 250 GB 內(nèi)存和三個(gè) 24 GB 的分頁空間運(yùn)行大型 Oracle 數(shù)據(jù)庫。關(guān)鍵是使用并發(fā) I/O (CIO) 等技術(shù)避免分頁,提供分頁空間是為了以防萬一需要分頁。

在默認(rèn)情況下,AIX 在 rootvg 中創(chuàng)建一個(gè)分頁空間 (hd6),它太小了。如果 rootvg 被鏡像,那么這個(gè)分頁空間也會被鏡像。我通常使用幾個(gè)來自 SAN 的自定義大小的邏輯單元號 (LUN) 添加額外的分頁空間。不要在當(dāng)前 rootvg 分頁空間所在的內(nèi)部磁盤(或 SAN LUN)中添加分頁空間。在相同的 hdisk 上配置多個(gè)分頁空間會降低分頁速度。

在構(gòu)建虛擬 I/O 服務(wù)器 (VIOS) 時(shí),會自動地配置兩個(gè)分頁空間,它們都在 hdisk0 上。hd6 是 512 MB,paging00 是 1,024 MB。我總是關(guān)閉并刪除 paging00,然后把 hd6 增加到 4,096 MB。正如前面提到的,在相同的 hdisk 上配置兩個(gè)分頁空間是不好的做法。

頁面偷取方法

在 AIX 5.3 的默認(rèn)設(shè)置中,page_steal_method 設(shè)置為 0。這影響最近最少使用守護(hù)進(jìn)程 (least recently used daemon LRUD) 掃描可釋放頁面的方式。設(shè)置 lru_file_repage=0 意味著強(qiáng)烈建議 LRUD 不偷取可執(zhí)行代碼的頁面,總是嘗試偷取文件系統(tǒng)(持久)頁面。偷取持久頁面比偷取工作存儲頁面代價(jià)低得多,因?yàn)楹笳邥?dǎo)致?lián)Q出/換入頁面。假設(shè)使用 100 GB 內(nèi)存和五個(gè)內(nèi)存池,內(nèi)存會劃分為五個(gè)大約 20 GB 的池,每個(gè) LRUD 處理大約 20 GB(這是非常簡化的描述)。根據(jù)圖 2 中的 numclient 值,可以假設(shè)大約 45% 的內(nèi)存用于文件系統(tǒng),即大約 45 GB;另外的 55 GB 是工作存儲。

圖 2.vmstat 輸出

圖 2.vmstat 輸出

如果設(shè)置 page_steal_method=0,在尋找空閑頁面時(shí) LRUD 不得不掃描它們控制的所有內(nèi)存頁面,盡管很可能只釋放持久頁面。如果設(shè)置 page_steal_method=1,LRUD 會改用基于列表的頁面管理方案。這意味著 LRUD 把內(nèi)存劃分為一個(gè)持久頁面列表和一個(gè)工作存儲頁面列表。當(dāng) LRUD 搜索可從文件系統(tǒng)緩存中釋放的頁面時(shí),它們只搜索持久頁面列表。對于圖 2 中的示例,這應(yīng)該會把掃描可釋放頁面的速度提高一倍多,這會降低開銷。在“vmstat -I 2 2”的輸出中可以看到掃描速度和空閑率。

內(nèi)存和 I/O 緩沖區(qū)

在探索最佳內(nèi)存設(shè)置時(shí),有幾個(gè)命令很有用,尤其是 vmstat -v。圖 2 顯示 vmstat -v 的部分輸出。

在內(nèi)存中有兩類頁面:持久頁面(與文件系統(tǒng)關(guān)聯(lián))和工作存儲或者說動態(tài)頁面(包含可執(zhí)行代碼及其工作區(qū))。如果偷取持久頁面,就不需要換出頁 面,除非頁面被修改過(在這種情況下,把它寫回文件系統(tǒng))。如果偷取工作存儲頁面,就必須先把它寫到分頁數(shù)據(jù)集,下一次需要它時(shí)再從分頁數(shù)據(jù)集讀回來;這 是開銷很大的操作。

設(shè)置 minperm%=3 和 lru_file_repage=0 意味著,強(qiáng)烈建議 LRUD 在文件系統(tǒng)正在使用超過 3% 的內(nèi)存的情況下總是嘗試偷取持久頁面。LRUD 在大多數(shù)情況下忽略最大設(shè)置,除非是要限制文件系統(tǒng)可以使用的內(nèi)存量。maxperm% 指所有持久頁面,包括日志文件系統(tǒng) (JFS)、網(wǎng)絡(luò)文件服務(wù)器 (NFS)、Veritas File System (VxFS) 和增強(qiáng)型日志文件系統(tǒng) (JFS2)。maxclient% 是其中的子集,只包括 NFS 和 JFS2 文件系統(tǒng)。maxperm% 是軟限制,maxclient% 是硬限制(而且不能超過 maxperm%)。因?yàn)樾碌奈募到y(tǒng)通常是 JFS2,應(yīng)該把最大設(shè)置保持在 90%,以免意外限制文件系統(tǒng)使用的內(nèi)存量。

在 vmstat -v 的輸出中,有幾個(gè)指標(biāo)有助于判斷要調(diào)整哪些值。在圖 2 中,可以看到 numperm 和 numclient 是相同的,都是 45.1%。這意味著 NFS 和/或 JFS2 文件系統(tǒng)正在使用 45.1% 的內(nèi)存。如果這是一個(gè)數(shù)據(jù)庫系統(tǒng),我會檢查是否正在使用 CIO,因?yàn)樗梢韵p重頁面存儲和處理,從而降低內(nèi)存和 CPU 使用量。

在構(gòu)建 I/O 請求時(shí),邏輯卷管理程序 (LVM) 請求一個(gè) pbuf,這是固定的內(nèi)存緩沖區(qū),它保存 LVM 層中的 I/O 請求。然后把 I/O 放到另一個(gè)稱為 fsbuf 的固定內(nèi)存緩沖區(qū)中。有三種 fsbuf:文件系統(tǒng) fsbuf(供 JFS 文件系統(tǒng)使用)、客戶機(jī) fsbuf(由 NFS 和 VxFS 使用)和外部分頁程序 fsbuf(由 JFS2 文件系統(tǒng)使用)。另外,還有 psbuf,它們是對分頁空間的 I/O 請求所用的固定內(nèi)存緩沖區(qū)。

在圖 2 中,vmstat -v 命令顯示的值是自引導(dǎo)以來的平均值。因?yàn)榉?wù)器可能很長時(shí)間不重新引導(dǎo),所以一定要間隔幾小時(shí)取兩個(gè)快照,檢查這些值是否有變化。在這里,它們快速增長,需要調(diào)優(yōu)。

I/O 延遲

在 vmstat -v 的輸出中,有幾個(gè)表示存在 I/O 延遲的跡象。I/O 延遲會影響性能和內(nèi)存。下面介紹識別 I/O 阻塞的原因和解決問題的一些常用方法。

1468217 pending disk I/Os blocked with no pbuf 這一行清楚地說明一個(gè)或多個(gè)未完成的磁盤 I/O 在試圖獲得固定內(nèi)存緩沖區(qū)(具體地說是 pbuf)時(shí)被阻塞了。這表明在 LVM 層上出現(xiàn)排隊(duì)。因?yàn)?AIX 無法獲得緩沖區(qū)以存儲 I/O 請求的信息,導(dǎo)致請求被延遲。使用下面的 lvmo 命令應(yīng)該可以解決這個(gè)問題。

圖 3. lvmo –a 輸出

圖 3. lvmo –a 輸出

圖 3 給出 lvmo -a 命令的輸出,它表明 datavg 的 pbuf 不足(查看 pervg_blocked_io_count)。應(yīng)該只對正在使用的這個(gè)卷組糾正此問題,因?yàn)檫@些是固定的內(nèi)存緩沖區(qū),把它們設(shè)置得過大是沒有意義的:

  1. lvmo -v datavg -o pv_pbuf_count=2048 

通常,我會檢查當(dāng)前設(shè)置,如果它是 512 或 1024,那么在需要增加時(shí)把它提高一倍。

11173706 paging space I/Os blocked with no psbuf 。lvmo 命令還表明 rootvg 中的 pbuf 有問題??匆幌?vmstat -v 的輸出,會發(fā)現(xiàn)有大量分頁空間 I/O 請求由于無法獲得 psbuf 被阻塞。psbuf 用于在虛擬內(nèi)存管理程序 (VMM) 層上保存 I/O 請求,缺少 psbuf 會嚴(yán)重影響性能。它也表明正在執(zhí)行分頁,這是問題。最好的解決方法是停止導(dǎo)致分頁的東西。另一種方法是增加分頁空間。

39943187 file system I/Os blocked with no fsbuf 。在默認(rèn)情況下,系統(tǒng)只為 JFS 文件系統(tǒng)提供 196 個(gè) fsbuf。在 JFS2 之前,需要大大提高這個(gè)限制(常常增加到 2048),從而確保 JFS I/O 請求不會由于缺少 fsbuf 在文件系統(tǒng)層上被阻塞。即使在系統(tǒng)中沒有 JFS 的情況下,有時(shí)候也會見到阻塞的 I/O 請求達(dá)到 2,000 個(gè)左右。但是,上面的數(shù)字表明在系統(tǒng)中有大量 JFS I/O 被阻塞,在這種情況下我會調(diào)整 JFS 并嘗試和計(jì)劃轉(zhuǎn)移到 JFS2;在 JFS2 中,可以對數(shù)據(jù)庫使用 CIO 等技術(shù)。在 AIX 6 和 7 中,numfsbufs 現(xiàn)在是 ioo 命令中的受限制參數(shù)。

238 client file system I/Os blocked with no fsbuf 。NFS 和 VxFS 都是客戶機(jī)文件系統(tǒng),這一行是指在文件系統(tǒng)層上由于缺少客戶機(jī) fsbuf 被阻塞的 I/O 數(shù)量。要想解決此問題,需要進(jìn)一步研究,查明這是 VxFS 問題還是 NFS 問題。

1996487 external pager file system I/Os blocked with no fsbuf 。JFS2 是外部分頁程序客戶機(jī)文件系統(tǒng),這一行是指在文件系統(tǒng)層上由于缺少固定內(nèi)存 fsbuf 被阻塞的 I/O 數(shù)量。在以前,調(diào)整 j2_nBufferPerPagerDevice 可以解決此問題?,F(xiàn)在,通過使用 ioo 命令提高 j2_dynamicBufferPreallocation 來糾正 JFS2 緩沖區(qū)。默認(rèn)設(shè)置是 16,在嘗試減少這些 I/O 阻塞時(shí),我通常會慢慢提高它(試一下 32)。

其他內(nèi)存可調(diào)項(xiàng)

vmo 命令中的 minfree 和 maxfree 可調(diào)項(xiàng)也會影響分頁。它們現(xiàn)在是針對各個(gè)內(nèi)存池設(shè)置的,可以使用幾個(gè)命令之一查明有多少個(gè)內(nèi)存池。根據(jù)版本或 TL 不同,應(yīng)該使用 vmo -a、vmo -a -F(對于 6.1)或 vmstat -v 獲取此信息。

如果這些值設(shè)置得過大,可能會看到 vmstat 輸出中“fre”欄中的值很高,而同時(shí)卻在執(zhí)行分頁。默認(rèn)設(shè)置是 960 和 1,088;根據(jù)其他設(shè)置,我通常使用 1,000 和 1,200。minfree 和 maxfree 的正確計(jì)算方法取決于 j2MaxPageReadAhead 的設(shè)置、邏輯 CPU 數(shù)量和內(nèi)存池?cái)?shù)量。

在這里,假設(shè) vmstat 顯示有 64 個(gè)邏輯 CPU (lcpu) 和 10 個(gè)內(nèi)存池。當(dāng)前設(shè)置為默認(rèn)值,即 minfree=960 和 maxfree=1088。J2_maxPageReadahead=128。對于這些設(shè)置,計(jì)算過程如下:

Min=max(960,((120*lcpu)/mempools)

Max=minfree + (max(maxpgahead,j2MaxPageReadahead)*lcpu)/mempools)

lcpu 為 64,mempools 為 10,j2_MaxPageReadahead 為 128,因此:

Min=max(960,((120*64)/10) = max(960,768)=960

Max=960+((max(8,128)*64)/10) = 960+819=1780

我可能會把結(jié)果向上取整到 2,048。每當(dāng)修改 j2_maxPageReadahead 時(shí),應(yīng)該重新計(jì)算 maxfree。在這里,我保持 minfree 為 960,但是把 maxfree 提高到 2,048。

【編輯推薦】

  1. 三種優(yōu)化MySQL數(shù)據(jù)庫查詢的方法簡介
  2. 優(yōu)化SQL Server數(shù)據(jù)庫查詢方法
  3. Oracle數(shù)據(jù)庫查詢的五個(gè)技巧
責(zé)任編輯:彭凡 來源: dbthink.com
相關(guān)推薦

2011-04-19 11:02:57

數(shù)據(jù)庫分頁

2009-05-14 10:16:36

Oracle優(yōu)化磁盤

2010-10-28 15:37:36

高可用架構(gòu)

2015-05-04 14:17:16

數(shù)據(jù)庫架構(gòu)高可用

2011-04-01 15:50:49

數(shù)據(jù)庫計(jì)算機(jī)

2010-09-06 11:40:06

SqlServer語句

2019-11-04 12:51:48

mysql數(shù)據(jù)庫nnodb

2010-11-10 10:18:12

SQL Server動

2023-12-28 11:18:01

MySQL數(shù)據(jù)庫級聯(lián)從庫

2020-06-03 17:30:42

LinuxIO

2021-02-21 22:26:15

數(shù)據(jù)庫測試數(shù)據(jù)庫

2024-01-07 18:02:21

數(shù)據(jù)庫分片副本

2018-08-07 09:45:17

數(shù)據(jù)庫數(shù)據(jù)庫密碼破解密碼

2023-03-31 08:00:00

數(shù)據(jù)庫分布式系統(tǒng)

2013-09-16 16:07:38

Java基礎(chǔ)IO

2011-10-17 10:01:18

IBMPower服務(wù)器

2018-07-30 15:00:05

數(shù)據(jù)庫MySQLJOIN

2010-09-08 16:03:57

SQL臨時(shí)表數(shù)據(jù)庫

2009-05-15 10:11:55

數(shù)據(jù)庫查詢查詢性能分頁瀏覽

2013-09-13 09:31:09

MongoDBZardosht KaTokutek
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號