您好,登錄后才能下訂單哦!
數據庫由稱為表空間的部件組成。表空間是用來存儲表的位置。當創建表時,您可以決定將特定對象(如索引和大對象)數據與其余表數據分開存放。表空間也可以分布在一個或多個物理存儲設備上。
我們這一節主要講講如何創建表空間(如需要使用什么樣的參數來創建最適用的表空間)
表空間可分為SMS表空間和DMS表空間,
簡單來說,SMS表空間易于管理,DMS表空間性能更優。
SMS表空間:
1)根據需要,系統按需分配;
2)由于不必預定義容器,因此創建表空間需要的初始工作少。
3)通過操作系統來管理空間,邏輯上數據是連續的,但物理上不是。
DMS表空間:
1)可通過ALTER TABLESPACE來添加或擴展容器來增加表空間大小,現有數據可以在新添加的容器集合中重新平衡以保持最佳I/O效率。
2)可將數據分割存放在多個表空間中以提高性能和空間存儲容量。
3)可控制數據在磁盤上的位置(需操作系統允許)
4)精心設計的DMS性能優于SMS表空間(涉及大量DML操作的應用程序,建議使用DMS表空間)
5)數據在物理磁盤上是連續的。
注:對于個人數據庫用SMS表空間管理最容易。對于不斷增長的大型數據庫,建議使用SMS表空間做臨時表空間和系統編目表空間,而將具有多個容器的單獨的DMS表空間用于每個表。另外建議將長字段(LF)數據和索引存儲在它們自己的表空間中。
SMS表空間:
計劃在一個表空間中存儲許多小表,應考慮使用SMS表空間。(對于小標,DMS表現在I/O和空間管理效率方面優點沒有那么重要)
DMS表空間:
表較大或者需要更快地訪問表中的數據,應考慮具有較小擴展數據塊大小的DMS表空間。
1)有的表包含不經常使用的歷史記錄數據,用戶可能愿意接受較長的響應時間。可以為歷史記錄表使用單獨的表空間,并分配給訪問速率較低的較便宜的物理設備。
2)有些表需要數據快速響應,需要將這些表分配給快速物理設備的表空間中。可以使用固態硬盤來存放訪問最頻繁的表。
3)使用DMS表空間,可以將表數據分發在3個不同的表空間中:
一個存儲索引數據;
一個存儲大對象(LOB)和長字段(LF)數據;
一個存儲常規表數據。
(如果將表分布在各個DMS表空間中,在啟用表空間級備份恢復時,應考慮一起備份和復原那些表空間。SMS表空間不支持以此方式將數據分發在所有表空間中)。
如果需要經常刪除并重新創建特定表,應給這樣的表表單獨創建DMS表空間,因為刪除DMS表空間比刪除表更有效率。
數據頁可選擇使用4KB、8KB、16KB、32KB頁大小,在選擇數據頁大小時需要綜合考慮空間需求和業務類型(性能需求)以做出選擇。
DB2中每個頁大小限定了可存儲行的最大長度和可存儲表空間的最大值,所以選擇頁大小的時候需要考慮這些。
4KB – 最大可存放的行長度是4005字節
表空間特定于頁大小的限制 | ||||
表空間類型 | 4KB | 8KB | 16KB | 32KB |
SMS表空間 | 64GB | 128GB | 256GB | 512GB |
DMS表空間(常規) | 64GB | 128GB | 256GB | 512GB |
DMS表空間(大型) | 8TB | 16TB | 32TB | 64TB |
自動存儲表空間(常規) | 64GB | 128GB | 256GB | 512GB |
自動存儲表空間(大型) | 8TB | 16TB | 32TB | 64TB |
臨時表空間 | 64GB | 128GB | 256GB | 512GB |
數據頁大小選擇不當,可能造成空間浪費。
建議常見表表空間時,盡量創建大型表空間,大型表空間的數據頁可以存放更多的容量和行數。
聯機事務處理(OLTP)工作負載的特征:事務需要對數據進行隨機訪問,涉及頻繁插入或更新活動和返回一小組數據的查詢。對于性能要求很高的OLTP應用,可以考慮把一些頻繁訪問的表創建在固態硬盤上。(使用裸設備容器的DMS表空間在這種情況下表現最好)
OLAP查詢工作負載的特征:事務需要對數據進行順序訪問或部分順序訪問,并常返回大的數據集。(使用多個設備容器且每個容器都在單獨磁盤上的DMS表空間最有可能提供有效的并行預存取)。應將PREFETCHSIZE參數的值設為EXTENTSIZE參數的值乘以容器設備數之積。并可以將預取大小設置為-1(AUTOMATIC),這允許數據庫管理器以并行方式從所有容器中預取。如果容器數目發生更改,或需要使預取更多或更少,那么可以使用ALTER TABLESPACE語句響應地更改PREFETCHSIZE值;強烈建議把PREFETCHSIZE設置為AUTOMATIC或-1。
混合工作負載的目標:對于OLTP工作負載,使單個I/O請求盡可能有效率;對于OLAP查詢工作負載,最大程度地提高并行I/O的效率。
1) 對于執行隨機行讀寫操作的OLTP應用程序,通常最好使用較小的頁大小(4KB、8KB),這樣不需要的行就不會浪費緩沖池空間;
2) 對于一次訪問大量連續行的決策支持系統(DSS)和OLAP應用程序,頁大小大點(16KB、32KB)比較好,這樣能減少讀取特定數目的行所需的I/O請求數。較大的頁大小還允許減少索引中的層數,因為在一頁中可以保留更多的行指針。
3) 越大的頁,支持的行越長。應根據業務需求選擇合適的數據頁。
4) 4KB – 表有500列;8KB、16KB、32KB支持1012列。
5) 表空間最大大小與表空間的頁大小成正比(參考表3-3)
EXTENTSIZE指定在跳到下一個容器之前可以寫入容器PAGESIZE頁面的數量。存儲數據時數據庫管理器反復均衡使用所有容器。該參數只有在表空間中有多個容器時才起作用。合理的EXTENTSIZE會對表空間的性能產生重大影響。這個參數只能在創建表空間時定義,之后不能修改。
以下經驗法則建立在表空間中每個表的平均大小的基礎上:
1) 如果小于50MB,EXTENTSIZE為8
2) 如果介于50MB到500MB之間,EXTENTSIZE為16
3) 如果介于500MB到5GB之間,EXTENTSIZE為32
4) 如果大于5GB,EXTENTSIZE為64
對于OLAP數據庫和大部分對表的訪問包括許多查詢或處理大量數據的事物(僅限于查詢)的表,或者增長速度很快的表,從表中預取數據可以顯著改善性能,應使用較大的extent,反之,使用較小的extent。
為了提高緩沖池命中率,數據庫通過預取操作再查詢使用所需的數據之前讀入這些數據,因為數據已經存在于內存,查詢在使用這些數據的時候就不必等待執行I/O了。數據庫管理器會確定預取操作是否有助于提高性能。
通過ALTER TABLEPSPACE可以修改預取大小。一般最優設置如下:
Prefetch Size = (# Containers of the table space on different physical disks) * Extent Size
如果表空間駐留在某個磁盤陣列上,那按如下設置:
Prefetch Size = Extent Size * (# of non-parity disks in array)
注:DB2 V9版本以后,可以在創建表空間時自動預取大小。
在添加或刪除容器后,要及時更新表空間的預取大小,否則數據庫性能會明顯降低。可以在創建表空間時指定Prefetchsize 為 Automatic,這樣可以設置自動預取大小。可通過以下方法查看是否設置自動預取:
db2 get snapshot for tablespaces on dbname| more
Prefetchsize的大小設置和Extentsize的設置有關,所以需要合理設置 Extentsize大小,再根據Extentsize大小設置Prefetchsize。較好的建議是創建數據庫時采用自動存儲,這樣數據庫管理器可自動設置Prefetchsize和Extentsize的大小。
在創建DMS表空間容器時可以選擇使用文件系統或裸設備。
為避免操作系統做多一次緩存(數據庫已經通過buffer pool做了一次緩存),可以采用裸設備作為數據文件的存儲設備。裸設備也稱為裸分區(Raw Partition),是沒有被加載(mount)到操作系統的文件系統中的磁盤分區,通過字符設備驅動來訪問。裸設備的I/O讀寫不由操作系統控制,而是由應用系統(如數據庫)直接控制。
裸設備的優點:
1. 具有更好的性能(屏蔽了文件系統緩沖區而進行直接讀寫)。對硬盤的直接讀寫意味著取消了硬盤與文件系統的同步需求。這一點對于純OLTP系統非常有用,因為這種系統的讀寫隨機性非常大,以至于一旦數據被讀寫之后,在今后較長一段時間內不會再次使用。改善決策支持系統(DSS)應用程序的性能:
2 排序:DSS環境存在大量排序需求,裸設備提供的直接讀寫功能非常有用,因為對臨時表空間的寫動作速度更快。
2 順序訪問:裸設備非常適合順序I/O動作。DSS中常見順序I/O(表/索引的全表掃描)
2. 直接讀寫,不需要經過操作系統級的緩存。
3. 避免了操作系統的cache預讀功能,減少了I/O。
4. 避免了文件系統的開銷,比如維護i-node、空閑塊等。
裸設備的缺點:
1. 裸設備的空間大小管理不靈活。需要預先規劃裸設備的空間使用,還應當保留一部分裸設備以應付突發情況。
2. 需要操作系統root用戶干預,因為裸設備的創建、更改權限、擴展大小等都需要由root用戶完成,這增加的了管理成本。
文件系統的優點:
易于管理和維護,比如文件的基本管理以及安全和備份等。
文件系統的缺點:
性能比不上裸設備
選擇表空間容器時,從性能上考慮盡量采用裸設備;如果使用自動存儲方式創建數據庫和表空間,則不支持裸設備。或者為了便于管理而采用文件系統方式,這時需要合理設置文件系統相關選項和表空間相關選項。
直接I/O(DIO)可以繞過在文件系統級別進行高速緩存,因此能改進內存性能。此過程可減少CPU開銷并使得更多的內存可用于數據庫實例。
并發I/O(CIO)具有DIO的優點,并且可消除串行化寫訪問。與使用文件系統緩沖I/O相比,在具有大量事務處理工作負載和回滾時,CIO/DIO機制可增大吞吐量。
注:DIO和CIO具體的支持列表查看最新的DB2信息中心。
關鍵字 NO FILE SYSTEM CACHING 和 FILE SYSTEM CACHING是CREATE 和 ALTER TABLEPACE 語句的一部分。
當 NO FILE SYSTEM CACHING有效時,只要可能,數據庫管理器會嘗試使用“并發I/O(CIO)”。在不支持CIO時,(例如使用了JFS)將取而代之使用DIO。
建議在表空間級別啟用或禁用操作系統中的非緩沖I/O。這將允許在特定表空間上啟用或禁用非緩沖I/O,同時可避免數據庫物理布局中的任何依賴性。另外還可允許數據庫管理器確定每個文件最適合使用哪種I/O,緩沖的還是非緩沖的。
NO FILE SYSTEM CACHING子句用于啟用非緩沖I/O,從而禁用特定表空間的文件高速緩存。一旦啟用非緩沖I/O,數據庫管理器會根據平臺自動確定將使用直接I/O還是并發I/O。使用CIO可提高性能,只要CIO受支持,數據庫管理器就會啟用。
FILE SYSTEM CACHING一般用于應用程序檢索LOB和LONG數據,這些大對象數據不能經過數據庫緩沖池。
查看是否啟用FILE SYSTEM CACHING屬性,可使用:
db2 get snapshot for tablespaces on <dbname>|more
db2pd -d <dbname> -tablespaces
db2look -d <dbname> l
建議創建表空間時,表空間的容器采用裸設備或支持并發I/O或直接I/O的文件系統。
這兩個參數用于確定查詢優化期間的I/O成本。這兩個值的測量單位都是毫秒,而且它們是所有容器開銷和傳送速率的平均值。開銷是與I/O控制器活動、磁盤尋道時間和旋轉延遲時間相關聯的時間。傳送速率是將一頁讀入內存所必須的時間量。它們的默認值分別是24.1和0.9。可根據硬件規格計算這些值:
Transrate = (1/傳送速率)*1000/1024000*4096(假設用4KB頁大小)
Overhead = 平均尋道時間+((1/磁盤轉速)*60*1000)/2)
平均尋道時間、磁盤旋轉速度和傳送速率是由硬盤本身決定(可通過操作系統命令或從硬盤廠商獲得底層硬盤的物理特性)
所以合理設置這兩個值,可讓優化器了解底層存儲的物理特性,從而制定最優的執行計劃。
現在很多應用系統吧數據庫存放在“獨立磁盤冗余陣列”(RAID)設備上,要優化存放在RAID設備上的表空間性能,可遵循以下準則:
1. 在一組RAID設備上創建表空間時,應該把表空間容器創建在多個RAID GROUP上。
2. 為表空間選擇適當的擴展數據塊(extent)大小。理想狀態下,擴展數據塊大小應該等于磁盤底層strip大小或其倍數,其中strip大小等于strip大小乘以活動磁盤數。Strip大小表示磁盤控制器在向一個物理磁盤寫入多少數據后才轉向下一個物理磁盤。
如果strip大小為64KB,頁大小為16KB,那適當的擴展數據塊大小可能是256KB(64KB*4)
3. 使用DB2_PARALLEL_IO注冊變量為所有表空間啟用并行I/O,并為每個容器指定物理磁盤數。
DB2_PARALLEL_IO注冊變量用來確定每個容器的底層物理硬盤數以及對表空間上并行I/O的影響。當為表空間設置多個容器或者設置DB2_PARALLEL_IO注冊變量時,會為表空間啟動并行預取。如未設置DB2_PARALLEL_IO,那表空間的并行度與容器數目相等。否則,表空間的并行度由表空間預取大小和EXTENT大小決定,建議將預取大小設置為AUTOMATIC,由DB2自動計算預取大小,讓DB2選擇最合適的并行度。
DB2_PARALLEL_IO = TablespaceID:[n],如果沒有指定n,那么使用默認值6(就是假設容器跨越6個RAID底層物理磁盤)。
DB2_PARALLEL_IO =* (*表示所有表空間均啟用并行I/O,沒有指定n,所以所有表空間使用容器磁盤數目等于6的默認值。將預取請求分解成“6x容器數目”個并行請求,每個請求的讀取大小為extent大小。
DB2_PARALLEL_IO =*:3 (*表示所有表空間均啟用并行I/O,3表示所有表空間使用容器磁盤數目等于3。將預取請求分解成“3x容器數目”個并行請求,每個請求的讀取大小為extent大小。)
DB2_PARALLEL_IO =*:3 1:1 (*表示所有表空間均啟用并行I/O,3表示所有表空間使用容器磁盤數目等于3。將預取請求分解成“3x容器數目”個并行請求,每個請求的讀取大小為extent大小。對于ID為1的表空間,將預取請求分解成“1x容器數目”個并行請求,每個請求的讀取大小為extent大小。)
如果將表空間的預取大小設置為AUTOMATIC, 那么數據庫管理器將使用為DB2_PARALLEL_IO 指定的物理磁盤數值來確定預取大小值。如果預取大小未設置為AUTOMATIC,可以手動設置,需考慮RAID條帶大小,它是strip大小乘以活動磁盤數產生的值:
l 等于RAID條帶大小乘以RAID并行設備數(或此乘積的整數表示)
l 是擴展數據塊的大小的整數表示。
不要設置DB2_USE_PAGE_CONTAINER_TAG注冊變量,如果設置為ON,將使用單頁容器標記,并且擴展數據塊不會與RAID條帶對其。 應使用等于RAID條帶大小或其倍數的擴展數據塊大小來創建表空間。
說了那么多建表空間的參數選擇,下面我們舉例子來實際操作,以下是創建表空間的完整語句:
創建單區的表空間
CREATE REGULAR TABLESPACE "TBS_BASS_WEB" IN DATABASE PARTITION GROUP IBMDEFAULTGROUP PAGESIZE 32768 MANAGED BY DATABASE
USING (FILE '/db2home/db2inst1/db2inst1/NODE0000/tbs_bass_web'655360,
FILE '/db2home/db2inst1/db2inst1/NODE0000/tbs_bass_web1'655360,
FILE '/db2data/tbs/tbs_bass_web7'655360,
FILE '/db2data/tbs/tbs_bass_web8'655360)
EXTENTSIZE 32
PREFETCHSIZE AUTOMATIC
BUFFERPOOL BASS_WEB
OVERHEAD 24.100000
TRANSFERRATE 0.900000
FILE SYSTEM CACHING
DROPPED TABLE RECOVERY ON;
創建多分區的表空間(指定了多個分區 “DBPARTITIONNUMS”)
CREATE LARGE TABLESPACE "TBS_DWD" IN DATABASE PARTITION GROUP NDGRP11 PAGESIZE 32768 MANAGED BY DATABASE
USING (DEVICE '/dev/md/vgmt01/rdsk/d503' 655360,
DEVICE '/dev/md/vgmt01/rdsk/d509'655360,
DEVICE '/dev/md/vgmt01/rdsk/d510'6553600) ON DBPARTITIONNUMS (1)
USING (DEVICE '/dev/md/vgmt02/rdsk/d503' 655360,
DEVICE '/dev/md/vgmt02/rdsk/d509'655360,
DEVICE '/dev/md/vgmt02/rdsk/d510'6553600) ON DBPARTITIONNUMS (2)
USING (DEVICE '/dev/md/vgmt03/rdsk/d503' 655360,
DEVICE '/dev/md/vgmt03/rdsk/d509'655360,
DEVICE '/dev/md/vgmt03/rdsk/d510'6553600) ON DBPARTITIONNUMS (3)
USING (DEVICE '/dev/md/vgmt04/rdsk/d503' 655360,
DEVICE '/dev/md/vgmt04/rdsk/d509'655360,
DEVICE '/dev/md/vgmt04/rdsk/d510'6553600) ON DBPARTITIONNUMS (4)
EXTENTSIZE 16
PREFETCHSIZE 32
BUFFERPOOL POOL_32K
OVERHEAD 7.500000
TRANSFERRATE 0.060000
FILE SYSTEM CACHING
DROPPED TABLE RECOVERY ON;
如果不通過詳細的參數設置,也可以使用以下簡單方式,其他參數則會默認設置
db2 create tablespace test managed by DATABASE;
db2 create tablespace test managed by SYSTEM;
db2 create tablespace test managed by AUTOMATIC STORAGE;(自動存儲,自動分配容器)
注:在創建DMS表空間時,表空間文件容器由DB2自動來創建,但裸設備容器無法自動創建,需要root用戶參與。
SMS和DMS表空間相比,SMS表空間特別適合一般用途。
SMS表空間能夠提供一定的性能,且管理成本很低。
如果需要達到最佳的性能,則應該選用DMS表空間。
因為使用文件容器或者SMS表空間移動數據時會發生雙重緩沖(在數據庫管理程序級首先緩沖一次數據,然后在文件系統再緩沖一次數據,這就是雙重緩沖),所以使用設備容器可能提供更好的性能。
至于如何取舍,還是要實事求是!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。