国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
DB2 基礎(chǔ): 表空間和緩沖池

數(shù)據(jù)庫中的所有數(shù)據(jù)都存儲(chǔ)在許多表空間中。可以認(rèn)為表空間是孩子而數(shù)據(jù)庫是其父母,其中表空間(孩子)不能有多個(gè)數(shù)據(jù)庫(父母)。由于表空間有不同用途,因此根據(jù)它們的用途和管理方式將它們分類。根據(jù)用途有五種不同的表空間:

目錄表空間
每個(gè)數(shù)據(jù)庫只有一個(gè)目錄表空間,它是在發(fā)出 CREATE DATABASE 命令時(shí)創(chuàng)建的。目錄表空間被 DB2 命名為 SYSCATSPACE,它保存了系統(tǒng)目錄表。每當(dāng)創(chuàng)建數(shù)據(jù)庫時(shí),都會(huì)創(chuàng)建這個(gè)表空間。
常規(guī)表空間
常規(guī)表空間保存所有永久的數(shù)據(jù),包括常規(guī)的表和索引。它還可以保存諸如 LOB(Large Object)之類的長(zhǎng)數(shù)據(jù),除非這些數(shù)據(jù)顯式地存儲(chǔ)在長(zhǎng)表空間中。如果某些表空間是用于非分區(qū)表的數(shù)據(jù)庫管理的空間(Database Managed Space,DMS)或者用于分區(qū)表的系統(tǒng)管理的空間,則可以將表及其索引分別放到單獨(dú)的常規(guī)表空間中。我們將在 表空間管理 小節(jié)描述 DMS 和 SMS。目錄表空間是常規(guī)表空間的一個(gè)例子。缺省情況下,目錄表空間是數(shù)據(jù)庫創(chuàng)建期間所創(chuàng)建的唯一一個(gè)常規(guī)表空間。
長(zhǎng)表空間
長(zhǎng)表空間像常規(guī)表空間一樣存儲(chǔ)永久數(shù)據(jù),包括 LOB。這種表空間必須是 DMS,這也是默認(rèn)類型。長(zhǎng)表空間中創(chuàng)建的表比常規(guī)表空間中的表大。大型表可支持每個(gè)數(shù)據(jù)頁超過 255 行,從而提高數(shù)據(jù)頁上的空間利用率。當(dāng)創(chuàng)建數(shù)據(jù)庫時(shí),DB2 創(chuàng)建一個(gè)名為 USERSPACE1 的長(zhǎng)表空間。
系統(tǒng)臨時(shí)表空間
系統(tǒng)臨時(shí)表空間用于存儲(chǔ) SQL 操作(比如排序、重組表、創(chuàng)建索引和連接表)期間所需的內(nèi)部臨時(shí)數(shù)據(jù)。每個(gè)數(shù)據(jù)庫必須至少有一個(gè)系統(tǒng)臨時(shí)表空間。隨數(shù)據(jù)庫創(chuàng)建的缺省系統(tǒng)臨時(shí)表空間名為 TEMPSPACE1。
用戶臨時(shí)表空間
用戶臨時(shí)表空間存儲(chǔ)已聲明的全局臨時(shí)表。創(chuàng)建數(shù)據(jù)庫時(shí)不存在用戶臨時(shí)表空間。至少應(yīng)當(dāng)創(chuàng)建一個(gè)用戶臨時(shí)表空間,以允許定義已聲明的臨時(shí)表。用戶臨時(shí)表空間是可選的,缺省情況下不創(chuàng)建。

表空間管理

可以用兩種不同的方式管理表空間:

系統(tǒng)管理的空間(SMS)
操作系統(tǒng)管理 SMS 表空間。容器被定義成常規(guī)操作系統(tǒng)文件,并且是通過操作系統(tǒng)調(diào)用訪問的。這意味著以下任務(wù)全部由常規(guī)操作系統(tǒng)功能來處理:
  • I/O 緩沖
  • 根據(jù)操作系統(tǒng)慣例分配空間
  • 必要時(shí)自動(dòng)擴(kuò)展表空間

但是,不能從 SMS 表空間刪除容器,并且僅限于將新的容器添加到分區(qū)的數(shù)據(jù)庫。前一節(jié)中所說明的那三個(gè)缺省表空間都是 SMS。

數(shù)據(jù)庫管理的空間(DMS)
DMS 表空間是由 DB2 管理的??梢詫⑷萜鞫x成文件(在創(chuàng)建表空間時(shí)將把給定的大小全部分配給它們)或設(shè)備。分配方法和操作系統(tǒng)允許多少 I/O,DB2 就可以管理多少 I/O??梢酝ㄟ^使用 ALTER TABLESPACE 命令來擴(kuò)展容器。還可以釋放未使用的那部分 DMS 容器(從 V8 開始)。

清單 1 展示如何增大容器大?。?/p>
清單 1. 增加容器大小

ALTER TABLESPACE TS1 RESIZE (FILE '/conts/cont0' 2000,                DEVICE '/dev/rcont1' 2000, FILE 'cont2' 2000)                

也可以使用 EXTEND 或 REDUCE 等選項(xiàng)增加或減少容器的大小。

如何創(chuàng)建和查看表空間

當(dāng)您創(chuàng)建數(shù)據(jù)庫時(shí),將創(chuàng)建三個(gè)表空間(SYSCATSPACE、TEMPSPACE1 和 USERSPACE1)。清單 2 展示如何使用 DB2 命令窗口或 UNIX 命令行創(chuàng)建一個(gè)名為 testdb 的數(shù)據(jù)庫,連接至該數(shù)據(jù)庫,然后列出表空間。


清單 2. 創(chuàng)建、連接和列出
CREATE DATABASE testdb                CONNECT TO testdb                LIST TABLESPACES                

清單 3 顯示 LIST TABLESPACES 命令的輸出。


清單 3. LIST TABLESPACES 命令的輸出
           Tablespaces for Current Database                Tablespace ID                        = 0                Name                                 = SYSCATSPACE                Type                                 = Database managed space                Contents                             = All permanent data. Regular table space.                State                                = 0x0000                Detailed explanation:                Normal                Tablespace ID                        = 1                Name                                 = TEMPSPACE1                Type                                 = System managed space                Contents                             = System Temporary data                State                                = 0x0000                Detailed explanation:                Normal                Tablespace ID                        = 2                Name                                 = USERSPACE1                Type                                 = Database managed space                Contents                             = All permanent data. Large table space.                State                                = 0x0000                Detailed explanation:                Normal                

清單 3 中的 3 個(gè)表空間是通過 CREATE DATABASE 命令自動(dòng)創(chuàng)建的。用戶可以通過在該命令中包含表空間說明來覆蓋缺省的表空間創(chuàng)建,但是在創(chuàng)建數(shù)據(jù)庫時(shí)必須創(chuàng)建一個(gè)目錄表空間和至少一個(gè)常規(guī)表空間,以及至少一個(gè)系統(tǒng)臨時(shí)表空間。通過使用 CREATE DATABASE 命令或以后使用 CREATE TABLESPACE 命令,可以創(chuàng)建更多的所有類型的表空間(目錄表空間除外)。

容器

每個(gè)表空間都有一個(gè)或多個(gè)容器。同樣,可以將容器看作是孩子,而表空間是其父母。每個(gè)容器只能屬于一個(gè)表空間,但是一個(gè)表空間可以擁有許多容器??梢詫⑷萜魈砑拥?DMS 表空間,或者從 DMS 表空間中刪除容器,還可以更改容器的大小。只能將容器添加到某個(gè)分區(qū)中分區(qū)數(shù)據(jù)庫上的 SMS 表空間,在添加之前該分區(qū)還未給表空間分配容器。添加新的容器時(shí),將啟動(dòng)一個(gè)自動(dòng)的重新均衡操作,以便將數(shù)據(jù)分布到所有容器上。重新均衡操作不會(huì)妨礙對(duì)數(shù)據(jù)庫的并發(fā)訪問。

表空間設(shè)置

可以在創(chuàng)建表空間時(shí)給它們指定許多設(shè)置,或者也可以稍后使用 ALTER TABLESPACE 語句時(shí)指定其設(shè)置。下面描述這些設(shè)置。

頁大小
定義表空間所使用的頁大小。所支持的大小為 4K、8K、16K 和 32K。根據(jù)表 1 所示的限制,頁大小限定可放到表空間中的表的行長(zhǎng)度和列數(shù)。

表 1. 頁大小的含義
頁大小 行大小限制 列數(shù)限制 最大容量
(DMS 表空間)
4 KB 4 005 500 64 GB
8 KB 8 101 1 012 128 GB
16 KB 16 293 1 012 256 GB
32 KB 32 677 1 012 512 GB

表空間最多可包含 16384 個(gè)頁,因此選擇較大的頁大小可以增加表空間的容量。

盤區(qū)大小
指定在跳到下一個(gè)容器之前將寫到當(dāng)前容器中的頁數(shù)。存儲(chǔ)數(shù)據(jù)時(shí)數(shù)據(jù)庫管理器反復(fù)循環(huán)使用所有容器。該參數(shù)只有在表空間中有多個(gè)容器時(shí)才起作用。
預(yù)取大小
指定當(dāng)執(zhí)行數(shù)據(jù)預(yù)取時(shí)將從表空間讀取的頁數(shù)。預(yù)取操作在查詢引用所需的數(shù)據(jù)之前讀入這些數(shù)據(jù),這樣一來查詢就不必等待執(zhí)行 I/O 了。當(dāng)數(shù)據(jù)庫管理器確定順序 I/O 是適當(dāng)?shù)?,并且確定預(yù)取操作可能有助于提高性能時(shí),它就選擇預(yù)取操作。
開銷和傳送速率
確定查詢優(yōu)化期間的 I/O 成本。這兩個(gè)值的度量單位都是毫秒,而且它們應(yīng)當(dāng)分別是所有容器開銷和傳送速率的平均值。開銷是與 I/O 控制器活動(dòng)、磁盤尋道時(shí)間和旋轉(zhuǎn)延遲時(shí)間有關(guān)。傳送速率是將一個(gè)頁讀入內(nèi)存所必需的時(shí)間量。對(duì)于在 DB2 Version 9 中創(chuàng)建的數(shù)據(jù)庫,它們的缺省值分別是 7.5 毫秒和 0.06 毫秒。對(duì)于從 DB2 較早版本遷移至 Version 9 或更高版本的數(shù)據(jù)庫,它們的缺省值分別是 12.67 毫秒和 0.18 毫秒。可以根據(jù)硬件規(guī)格計(jì)算這些值。

CREATE TABLESPACE 語句示例

清單 4 創(chuàng)建一個(gè)常規(guī)表空間,包括本文使用的所有設(shè)置。


清單 4. 創(chuàng)建表空間
CREATE TABLESPACE USERSPACE3                PAGESIZE 8K                MANAGED BY SYSTEM                USING ('d:\usp3_cont1', 'e:\usp3_cont2', 'f:\usp3_cont3')                EXTENTSIZE 64                PREFETCHSIZE 32                BUFFERPOOL BP3                OVERHEAD 7.5                TRANSFERRATE 0.06                

如何查看表空間的屬性和容器

指定 LIST TABLESPACES 命令的 SHOW DETAIL 選項(xiàng)將顯示其它信息:LIST TABLESPACES SHOW DETAIL

清單 5 顯示 USERSPACE1 表空間的輸出。缺省情況下,將列出創(chuàng)建數(shù)據(jù)庫時(shí)所創(chuàng)建的那三個(gè)表空間。


清單 5. LlST TABLESPACES SHOW DETAIL 命令的輸出
		Tablespaces for Current Database                Tablespace ID                        = 2                Name                                 = USERSPACE1                Type                                 = Database managed space                Contents                             = All permanent data. Large table space.                State                                = 0x0000                Detailed explanation:                Normal                Total pages                          = 8192                Useable pages                        = 8160                Used pages                           = 96                Free pages                           = 8064                High water mark (pages)              = 96                Page size (bytes)                    = 4096                Extent size (pages)                  = 32                Prefetch size (pages)                = 32                Number of containers                 = 1                

要列出以上輸出中的 Tablespace ID 所使用的容器,輸入 LIST TABLESPACE CONTAINERS FOR 2。


清單 6. LlST TABLESPACES CONTAINERS 命令的輸出
		Tablespace Containers for Tablespace 2                Container ID = 0                Name = C:\DB2\NODE0000\SQL00004\SQLT0002.0                Type = Path                

該命令列出指定表空間的所有容器。清單 6 中的路徑指向容器的物理位置。

緩沖池

一個(gè)緩沖池與一個(gè)數(shù)據(jù)庫相關(guān)聯(lián),可以被多個(gè)表空間使用。當(dāng)考慮將緩沖池用于一個(gè)或多個(gè)表空間時(shí),必須保證表空間頁大小和緩沖池頁大小對(duì)于緩沖池所 “服務(wù)” 的所有表空間而言都是一樣的。一個(gè)表空間只能使用一個(gè)緩沖池。

創(chuàng)建數(shù)據(jù)庫時(shí),會(huì)創(chuàng)建一個(gè)名為 IBMDEFAULTBP 的缺省緩沖池,所有的表空間都共享該緩沖池??梢允褂?CREATE BUFFERPOOL 語句添加更多的緩沖池。緩沖池的缺省大小是 BUFFPAGE 數(shù)據(jù)庫配置參數(shù)所指定的大小,但是可以通過在 CREATE BUFFERPOOL 命令中指定 SIZE 關(guān)鍵字來覆蓋該缺省值。足夠的緩沖池大小是數(shù)據(jù)庫擁有良好性能的關(guān)鍵所在,因?yàn)樗梢詼p少磁盤 I/O 這一最耗時(shí)的操作。大型緩沖池還會(huì)對(duì)查詢優(yōu)化產(chǎn)生影響,因?yàn)楦嗟墓ぷ骺稍趦?nèi)存中完成。

基于塊的緩沖池
V8 及更高版本允許留出緩沖池的一部分(最高可達(dá) 98%)用于基于塊的預(yù)取操作?;趬K的 I/O 可以通過將塊讀入相鄰的內(nèi)存區(qū)而不是將它分散裝入單獨(dú)的頁,來提高預(yù)取操作的效率。每個(gè)緩沖池的塊大小必須相同,并且由 BLOCKSIZE 參數(shù)進(jìn)行控制。該值等于塊的大?。▎挝粸轫摚?,從 2 到 256,缺省值為 32。

CREATE BUFFERPOOL 語句示例

作為 CREATE BUFFERPOOL 語句的一個(gè)例子,輸入:CREATE BUFFERPOOL BP3 SIZE 2000 PAGESIZE 8K

將該緩沖池分配給上面的 CREATE TABLESPACE 示例上的 USERSPACE3,并且在創(chuàng)建表空間之前創(chuàng)建該緩沖池。請(qǐng)注意,緩沖池和表空間的頁大小都是 8K,兩者是相同的。如果在創(chuàng)建緩沖池之后創(chuàng)建表空間,則可以省去 CREATE TABLESPACE 語句中的 BUFFER POOL BP3 語法。相反,可以使用 ALTER TABLESPACE 命令將緩沖池添加到現(xiàn)有的表空間:ALTER TABLESPACE USERSPACE3 BUFFERPOOL BP3。

如何查看緩沖池屬性

通過查詢 SYSCAT.BUFFERPOOLS 系統(tǒng)視圖可以列出緩沖池信息,如清單 7 所示。


清單 7. 查詢 SYSCAT.BUFFERPOOLS
SELECT * FROM SYSCAT.BUFFERPOOLS                BPNAME        BUFFERPOOLID  DBPGNAME  NPAGES  PAGESIZE  ESTORE  NUMBLOCKPAGES  BLOCKSIZE                ------------  ------------  --------  ------  --------  ------  -------------  ---------                IBMDEFAULTBP       1              -     1000      4096       N              0          0                1 record(s) selected.                

要找出哪個(gè)緩沖池被分配給了表空間,請(qǐng)運(yùn)行清單 8 中所示的查詢:


清單 8. 查詢 SYSCAT.TABLESPACES
SELECT TBSPACE, BUFFERPOOLID FROM SYSCAT.TABLESPACES                TBSPACE      BUFFERPOOLID                -----------  ------------                SYSCATSPACE       1                TEMPSPACE1        1                USERSPACE1        1                3 record(s) selected.                

清單 8 中的查詢中包括 BUFFERPOOLID,通過它可以查看每個(gè)表空間與哪個(gè)緩沖池相關(guān)聯(lián)。

關(guān)于數(shù)據(jù)庫如何保存表空間的可視化圖表

我們已經(jīng)知道表空間和緩沖池是什么,以及如何創(chuàng)建它們,圖 1 顯示一個(gè)關(guān)于如何在數(shù)據(jù)庫中可視化地組織表空間和緩沖池的例子。


圖 1. 表空間和緩沖池

這個(gè)例子數(shù)據(jù)庫有 5 個(gè)表空間:一個(gè)目錄表空間、兩個(gè)常規(guī)表空間、一個(gè)長(zhǎng)表空間和一個(gè)系統(tǒng)臨時(shí)表空間。沒有創(chuàng)建用戶臨時(shí)表空間。容器則有 8 個(gè)。在這個(gè)例子中,可以這樣分配緩沖池:

  • BP1 (4K) 分配給 SYSCATSPACE 和 USERSPACE2
  • BP2 (8K) 分配給 USERSPACE1
  • BP3 (32K) 分配給 LARGESPACE 和 SYSTEMP1

回頁首

性能的含義

一般而言,在物理設(shè)備上設(shè)計(jì)如何放置表空間和容器時(shí),目標(biāo)是使 I/O 并行性和緩沖區(qū)利用率達(dá)到最優(yōu)。要實(shí)現(xiàn)這個(gè)目標(biāo),應(yīng)當(dāng)全面了解數(shù)據(jù)庫設(shè)計(jì)和應(yīng)用程序。只有這樣才能確定類似于下面這樣的問題:將兩張表分隔到不同的設(shè)備會(huì)不會(huì)產(chǎn)生并行 I/O,或者,是否應(yīng)當(dāng)在單獨(dú)的表空間中創(chuàng)建表以便可以對(duì)它進(jìn)行完全緩沖。

設(shè)計(jì)新數(shù)據(jù)庫的物理布局應(yīng)當(dāng)從設(shè)計(jì)表空間的組織開始,步驟如下。

  1. 確定表設(shè)計(jì)所給出的約束。這些可能會(huì)導(dǎo)致必須使用多個(gè)常規(guī)表空間。
  2. 考慮如果讓表空間中的表具有不同的設(shè)置,是否有可能顯著提高性能。
  3. 設(shè)計(jì)一個(gè)試驗(yàn)性的表空間。
  4. 考慮緩沖池的利用率。這可能會(huì)使前面的表空間設(shè)計(jì)產(chǎn)生一些變化。
  5. 為表空間分配容器。

這是一個(gè)反復(fù)的過程,應(yīng)該通過壓力測(cè)試和基準(zhǔn)測(cè)試驗(yàn)證該設(shè)計(jì)。很顯然,實(shí)現(xiàn)最佳的設(shè)計(jì)可能需要花費(fèi)大量精力,并且僅當(dāng)數(shù)據(jù)庫性能必須可能是最佳時(shí)才能證明設(shè)計(jì)是最佳的。通常:

  • 從最簡(jiǎn)單的可行設(shè)計(jì)入手。
  • 只有根據(jù)測(cè)試證明有充分的性能理由時(shí)才增加復(fù)雜性。

通常,為了降低管理和保持一個(gè)較為簡(jiǎn)單的數(shù)據(jù)庫設(shè)計(jì)的復(fù)雜性,稍微降低一點(diǎn)性能是值得的。DB2 具有一種非常成熟的資源管理邏輯,往往不用進(jìn)行精心的設(shè)計(jì)就能產(chǎn)生非常好的性能。

表空間組織

取決于被最頻繁訪問的方式,每個(gè)表有一組最有效的表空間設(shè)置: PAGESIZE、EXTENTSIZE 和 PREFETCHSIZE。

通常應(yīng)該將目錄表空間和系統(tǒng)臨時(shí)表空間作為 SMS 分配。沒有必要擁有多個(gè)具有相同頁大小的臨時(shí)表空間,通常只需一個(gè)具有最大頁大小的臨時(shí)表空間就夠了。

突出的問題在于是否要將用戶數(shù)據(jù)分割到多個(gè)表空間中。一個(gè)考慮因素是頁的利用率。不能將行分割到不同的頁,因此具有長(zhǎng)行的表需要有合適的頁大小。但是,一個(gè)頁上的行不能超過 255 個(gè),因此具有較短行的表不能利用整個(gè)頁。

例如,在頁大小為 32K 的表空間中放置行長(zhǎng)度為 12 字節(jié)的表,它大約只能利用每個(gè)頁的 10%(即,(255 行 * 12 字節(jié) + 91 字節(jié)的開銷) / 32k 頁大小 = ~10%)。如果表很大,這只是一個(gè)考慮因素,因此浪費(fèi)的空間就非常大。它還會(huì)使 I/O 和緩存的效率降低,因?yàn)槊總€(gè)頁的實(shí)際有用內(nèi)容很少。

如果可以將表放到具有較小頁的表空間中,或者可以充分利用較大的頁大小,那么最常用的訪問方法將確定哪一個(gè)更好。如果通常是順序訪問大量行(該表可能進(jìn)行了群集),那么比較大的頁大小會(huì)更有效。如果隨機(jī)訪問行,那么較小的頁大小讓 DB2 可以更好地利用緩沖區(qū),因?yàn)橥瑯拥拇鎯?chǔ)區(qū)域可以容納更多頁。

一旦根據(jù)頁大小對(duì)表進(jìn)行了分組,那么訪問頻率和類型將確定把數(shù)據(jù)進(jìn)一步分組到獨(dú)立的表空間中是否有意義。EXTENTSIZE 是在將數(shù)據(jù)寫入到下一個(gè)容器之前寫入到當(dāng)前容器中的數(shù)據(jù)的頁數(shù)(如果表空間中存在多個(gè)容器的話)。

PREFETCHSIZE 指定在執(zhí)行數(shù)據(jù)預(yù)取時(shí)將從表空間讀取的頁數(shù)。當(dāng)數(shù)據(jù)庫管理器確定順序 I/O 是適當(dāng)?shù)模⑶掖_定預(yù)取操作可能有助于提高性能時(shí),會(huì)使用預(yù)取操作(通常是大型表掃描)。比較好的做法是將 PREFETCHSIZE 值顯式地設(shè)置成表空間的 EXTENTSIZE 值與表空間容器數(shù)的乘積的倍數(shù)。例如,如果 EXTENTSIZE 是 32,并且表空間中有 4 個(gè)容器,那么理想的 PREFETCHSIZE 應(yīng)當(dāng)是 128、256 等等。如果一個(gè)或多個(gè)頻繁使用的表需要的這組參數(shù)的值不同于那些最適用于表空間其它表的性能的參數(shù)值,那么將這些表放入單獨(dú)的表空間可能會(huì)提高整體性能。

如果預(yù)取操作是表空間中的重要因素,那么請(qǐng)考慮留出一部分緩沖區(qū)用于基于塊的 I/O。塊大小應(yīng)當(dāng)?shù)扔?PREFETCHSIZE。

緩沖池的利用率

使用多個(gè)用戶表空間的最重要原因是管理緩沖區(qū)的利用率。一個(gè)表空間只能與一個(gè)緩沖池相關(guān)聯(lián),而一個(gè)緩沖池可用于多個(gè)表空間。

緩沖池調(diào)優(yōu)的目標(biāo)是幫助 DB2 盡可能好地利用可用于緩沖區(qū)的內(nèi)存。整個(gè)緩沖區(qū)大小對(duì) DB2 性能有巨大影響,這是因?yàn)榇罅康捻摽梢燥@著地減少 I/O 這一最耗時(shí)的操作。但是,如果總的緩沖區(qū)大小太大,并且沒有足夠的存儲(chǔ)器可用來分配給它們,那么將為每種頁大小分配最少的緩沖池,性能就會(huì)急劇下降。要計(jì)算最大的緩沖區(qū)大小,DB2、操作系統(tǒng)以及其它任何應(yīng)用程序都必須考慮其它所有存儲(chǔ)器的利用率。一旦確定了總的可用大小,就可以將這個(gè)區(qū)域劃分成不同的緩沖池以提高利用率。如果有一些具有不同頁大小的表空間,那么每種頁大小必須至少有一個(gè)緩沖池。

擁有多個(gè)緩沖池可以將數(shù)據(jù)保存在緩沖區(qū)中。例如,假設(shè)一個(gè)數(shù)據(jù)庫有許多頻繁使用的小型表,這些表通常全部都位于緩沖區(qū)中,因此訪問起來就非???。假設(shè)有一個(gè)針對(duì)非常大的表運(yùn)行的查詢,它使用同一個(gè)緩沖池并且需要讀取比總的緩存區(qū)大小還多的頁。當(dāng)查詢運(yùn)行時(shí),來自這些頻繁使用的小型表的頁將會(huì)丟失,這使得再次需要這些數(shù)據(jù)時(shí)就必須重新讀取它們。如果小型表擁有自己的緩沖池,那么它們就必須擁有自己的表空間,因此大型查詢就不能覆蓋它們的頁。這有可能產(chǎn)生更好的整體系統(tǒng)性能,雖然這會(huì)對(duì)大型查詢?cè)斐梢恍┬〉呢?fù)面影響。

調(diào)優(yōu)常常需要為實(shí)現(xiàn)整體性能的提高而在系統(tǒng)的不同功能之間做出權(quán)衡。區(qū)分功能的優(yōu)先級(jí)并記住總吞吐量和使用情況,同時(shí)對(duì)系統(tǒng)性能進(jìn)行調(diào)整,這是非常重要的。

對(duì)于 DB2 Version 8 及更高版本,可以在不關(guān)閉數(shù)據(jù)庫的情況下更改緩沖池大小。只要數(shù)據(jù)庫共享的內(nèi)存中有足夠的保留空間可以分配給新空間,帶有 IMMEDIATE 選項(xiàng)的 ALTER BUFFERPOOL 語句會(huì)立刻生效??梢允褂眠@個(gè)功能,根據(jù)使用過程中的周期變化(例如從白天的交互式使用轉(zhuǎn)換到夜間的批處理工作)來調(diào)優(yōu)數(shù)據(jù)庫性能。DB2 Version 9.1 及更高版本將緩沖池的大小管理完全自動(dòng)化。DB2 自調(diào)優(yōu)內(nèi)存管理器(self-tuning memory manager , STMM)控制這個(gè)自動(dòng)過程。

物理存儲(chǔ)的組織

一旦將表分布到多個(gè)表空間中,就必須決定它們的物理存儲(chǔ)器。表空間可以存儲(chǔ)在多個(gè)容器中,并且它可以是 SMS 或 DMS。SMS 更容易管理,對(duì)于包含許多不同的小型表的表空間(例如目錄表空間),尤其是那些包含 LOB 的表的表空間而言,SMS 可能是個(gè)不錯(cuò)的選擇。

為了降低每次一頁地?cái)U(kuò)展 SMS 容器的開銷,應(yīng)當(dāng)運(yùn)行 db2empfa 命令。這會(huì)將數(shù)據(jù)庫配置參數(shù) MULTIPAGE_ALLOC 的值設(shè)置成 YES

DMS 通常有更好的性能,并且它提供了分別地存儲(chǔ)索引和 LOB 數(shù)據(jù)的靈活性。通常應(yīng)當(dāng)將一個(gè)表空間的多個(gè)容器分開存放在單獨(dú)的物理卷上。這可以提高某些 I/O 的并行性。當(dāng)有多個(gè)用戶表空間和多個(gè)設(shè)備時(shí),應(yīng)當(dāng)考慮應(yīng)用程序邏輯,以盡可能平均地在這些設(shè)備上分配工作負(fù)載。

RAID 設(shè)備有它們自己的特殊考慮。EXTENTSIZE 應(yīng)該等于 RAID 條帶大小或者是它的倍數(shù)。PREFETCHSIZE 應(yīng)該等于 RAID 條帶大小乘以 RAID 并行設(shè)備數(shù)(或者等于該乘積的倍數(shù)),這個(gè)值應(yīng)該是 EXTENTSIZE 的倍數(shù)。DB2 提供了自己的注冊(cè)表變量,通過它們可以增強(qiáng)特定的環(huán)境。輸入以下命令,在一個(gè)容器中啟用 I/O 并行性: db2set DB2_PARALLEL_IO=*。

至于性能評(píng)估的其它方面,要知道某個(gè)更改是否有益,唯一穩(wěn)妥的方法就是進(jìn)行基準(zhǔn)測(cè)試。如果物理組織發(fā)生了更改,那么執(zhí)行該任務(wù)稍微有些復(fù)雜,這是因?yàn)檫@時(shí)要更改表空間必須要付出相當(dāng)大的精力。最實(shí)用的方法就是減少設(shè)計(jì)階段中的案例數(shù),這樣的話稍后需要進(jìn)行基準(zhǔn)測(cè)試的案例就比較少了。只有在性能極其重要并且不同的設(shè)計(jì)之間有可能存在顯著的性能差別時(shí),才值得花時(shí)間和精力進(jìn)行嚴(yán)格的基準(zhǔn)測(cè)試來比較設(shè)計(jì)。應(yīng)當(dāng)把重點(diǎn)放在緩沖池上,確保沒有將它們分配到虛擬內(nèi)存中,并確保以最有效的方式利用它們。


本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
[DB2使用小結(jié)
【贈(zèng)書】從商用到開源:15個(gè)維度,全面剖析DB2與MySQL數(shù)據(jù)庫的差異
db2 查看表空間使用率
db2數(shù)據(jù)庫基本概念
查詢Oracle數(shù)據(jù)庫表空間和數(shù)據(jù)文件方法
Oracle數(shù)據(jù)庫管理
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服