學習DB2筆記_Admin_Administration Guide Planning
1,配置引數
相比Oracle使用一個引數檔案,DB2配置檔案包括2個:
資料庫管理器配置檔案(database manager configuration file):db2systm。在分割槽資料庫下,所有分割槽使用儲存在共享檔案系統下的同一個檔案。
資料庫配置檔案(database configuration file)。SQLDBCON。在分割槽資料庫下,每個資料庫使用獨立的配置檔案,其中引數可能不同。
2,環境變數和概要登錄檔(profile registry)
在引入概要登錄檔前,修改環境變數需要重起(服務)。
存在4類概要登錄檔:
*DB2 Instance Level Profile Registry
*DB2 Global Level Profile Registry
*DB2 Instance Node Level Profile Registry
*DB2 Instance Profile Registry,db2ilist
DB2獲取引數順序如下:
*作業系統環境變數(使用set,export設定)
*Instance Node Level(使用db2set -i
*Instance Level Profile Registry(使用db2set -i 方式設定)
*Global Level Profile Registry(使用db2set -g方式設定)
3,資料安全
包括2部分:
*認證,由作業系統或其他產品支援。作業系統認證,或者使用者id與密碼組合,這兩者都支援本地或遠端認證(前者需要伺服器端支援客戶端認證)。
*授權,由資料庫管理器實現,包括特權(privilege)、許可權(authority)和LBAC。特權控制資料庫資源的訪問;許可權對一組特權進行控制,實現對例項、資料庫、資料庫物件的訪問。作業系統使用者所屬組提供了一種方便的許可權控制。
4,HADR(High availability disaster recovery)
*類似於Oracle的dataguard,使用日誌同步資料,支援3種保護級別:同步(SYNC), 近似同步(NEARSYNC),非同步(ASYNC)。
*HADR中,在初始化備庫資料後(主庫備份或主庫分裂映象split-mirror copy),初期備庫處於追趕狀態;在備庫追趕上主庫後,即處於PEER狀態,主庫寫日誌是就會同時發到備庫和磁碟。
*HADR針對資料庫,而不是例項。同一個例項支援主庫A、備庫B、非HADR庫C;但同一個資料庫的主備庫不能存在於同一個例項(因為HADR要求主備庫同名)。
*HADR要求主備庫有相同的硬體、軟體;資料庫版本、表空間等。---這些要求類似於Oracle 物理 Dataguard的要求。
4,自動維護
DB2支援自動維護操作包括:
*備份(auto_db_backup,auto_maint)
*重組(REORG),(auto_reorg, auto_tbl_maint, and auto_maint)DB2不支援表線上重組(支援索引的allow write access重組)!
*資料訪問最佳化(RUNSTATS):(auto_runstats 預設ON, auto_tbl_maint, and auto_maint)
*統計資料概要(Statistics profiling)
*自動記憶體調整(僅支援非分割槽資料庫,SELF_TUNING_MEM,預設ON)
5,邏輯設計
設計正規化:
正規化有助於消除冗餘和資料的不一致。規範化是一個減少表中列的數量,直至所有非主鍵列依賴於主鍵列的過程。
第一正規化:表中每個列僅包含單值(不包含值的集合)。
第二正規化:非主鍵列依賴於主鍵(不存在非主鍵列對主鍵的部分依賴)。
第三正規化:非主鍵列列不依賴於其他非主鍵列,僅依賴於主鍵。
第四正規化:不包含多個獨立的多值屬性列(如EMPNO-SKILL-LANGUAGE,應拆分為EMPNO-SKILL,EMPNO-LANGUAGE,必須確保多個屬性互相獨立,否則不應拆分)。
DB2中唯一約束要求非空+唯一。
資訊性約束(Informational constraints):可以被最佳化器用於改善訪問路徑,但資料庫管理器並不強制實施驗證的約束。在create table/alter table語句中,透過設定引用、檢查約束的屬性設定該類約束。
類似於Oracle中約束的RELY屬性。
觸發器
*不同於Oracle,觸發器在觸發事件設定之外,可以設定搜尋條件;只有在該條件成立的情況下,後續操作才繼續進行。
*不同於Oracle,觸發器支援的操作有要求。before,select, set transition variables, or signal SQLstates;after,select, insert, update, delete, or signal SQLstates。
*不同於Oracle,同一個表上多個觸發器觸發順序是確定的(按觸發器建立時間順序)。
*不同於Oracle,不但支援中間變數(old.column_name..),而且支援中間表。
另外,DB2支援全域性變數,作用範圍在會話內,類似於臨時表。
6,物理設計
DB2資料庫目錄結構:
SAMPLE庫:
/例項/NODE0000/SQL00001/
50,203 db2rhist.asc --history information about backups, restores, loading of tables, reorganization of tables, altering of a table space, and other changes to a database
50,203 db2rhist.bak
512 SQLBP.1 --buffer pool
512 SQLBP.2
4,096 SQLDBCON --database configuration information
16,384 SQLDBCONF
9 SQLINSLK --ensure that a database is used by only one instance of the database manager.
24,576 SQLOGCTL.LFH.1 --information about the active logs
24,576 SQLOGCTL.LFH.2
8,192 SQLOGMIR.LFH
135,168 SQLSGF.1 --storage path information
135,168 SQLSGF.2
1,835,008 SQLSPCS.1 --tablespace
1,835,008 SQLSPCS.2
/例項/NODE0000/Sample/
0 SQLCRT.FLG
/例項/NODE0000/Sqldbdir/
2,812 SQLDBBAK
2,812 SQLDBDIR
540 SQLDBINS
DB2資料庫頁
*行不會跨多頁(A row will not span multiple pages,不會出現行連結,在建表時限制所有列可能插入的最大長度之和;但無法避免更新導致的行遷移)。
*不同頁大小支援最大行長度不同,支援的最大列個數不同(4kb表空間支援4005bytes行長度,500列)。
*在常規表空間,每頁不超過255行。
*表資料頁不包括LONG VARCHAR, LONG VARGRAPHIC, BLOB, CLOB, DBCLOB型別資料,但包含相關描述符。
*LONG VARCHAR/LONG VARGRAPHIC,LOB分別採用不同的空間管理方式,不支援較小的列行記憶體儲(inline)。
*表有append屬性(alter table append on),所有插入採用附加方式,不會使用空閒頁。
*建有叢集索引的表,會使資料按指定索引順序存放
*多維叢集表MDC使用塊索引定位資料
臨時表空間
*系統臨時表空間在建立資料庫時自動建立,支援排序、建索引等操作
*使用者臨時表空間用於支援宣告式臨時表
資料庫分割槽
*資料庫分割槽組,同一個資料庫分割槽可以在多個資料庫分割槽組中;
*在建立分割槽組時,就建立了分佈影射表(distribution map,包含4096個有分割槽號迴圈排列的陣列);分割槽鍵透過hash影射到0-4096,這樣就實現了資料的均勻分佈(要求資料本身分佈均勻,且不同值較多).
*表同置(collocated)是指兩個表所處表空間為相同的分割槽組(不要求在同一表空間),分割槽鍵個數相同,型別相容
*分割槽鍵除了要力求資料均勻分佈外,還應該:所有分割槽鍵列被頻繁作為查詢條件或連線條件,參與group by,必須是唯一鍵或主鍵的一部分。
表分割槽
*表被儲存在多個儲存物件中(一個或多個表空間)
*一個表不同分割槽儲存在多個表空間時,要求這些表空間:相同的pagesize,extentsize,storage mechanism(SMS,DMS),type(REGULAR,LARGE),而且必須在同一個資料庫分割槽。
DB2支援資料組織方式(下面任何一種或任意組合)
*資料庫分割槽-DISTRIBUTE BY HASH
*表分割槽-PARTITION BY
*多維叢集表-ORGANIZE BY
系統管理表空間(SMS)
*空間管理按需分配,不保證一個extent在磁碟物理上連續
*可以利用檔案系統的預取和快取
*每個表至少有一個檔案與之對應
*一旦建立,不支援增加容器,不能改變extentsize
*容器指向一個目錄,該目錄內不能包含其他檔案或目錄
*空間分配時嘗試在每個容器均勻分佈extent,只要一個容器沒有空閒空間,該表空間就被認為full
資料庫管理表空間(DMS)
*空間在建立表空間時分配。使用裝置時保證一個extent在磁碟物理上連續;使用檔案時,一般情況下連續。
*檔案或裝置,從效能角度考慮,推薦裝置;如果有LOB或long varchar,可以使用檔案,以利用檔案系統快取
*嘗試在多個容器內平均分佈,某個容器滿時,在其他容器內分配
*表空間第一個extent用於表空間頭,包含控制資訊
*表空間第二個extent為SMP,SMP(SpaceMapPage)在表空間中均勻分佈,包含兩個SMP之間extent的點陣圖資訊,用於跟蹤extent的使用情況
*表空間第三個extent為Object table,描述表空間內表的第一個EMP(ExtentMapPage)
*表空間第四個extent為第一個表的EMP
*表空間第五個extent為第一個表的data page
*後續extent。。。
SMS .vs DMS
*總體而言,適當調優的DMS在效能上由於SMS。
*對於小的資料庫,可以使用SMS
*對於大的資料庫,編目表空間和臨時表空間使用SMS,表使用DMS,long varchar,LOB,index可以放置在單獨的表空間。
DISK IO
*理想情況下,表空間分佈在多個物理磁碟上,而且磁碟有足夠頻寬,有足夠的cleaner及時提供空閒空間,則:
在sql查詢時,利用prefetch並行獲取多個容器的資料,放置在buffer pool的塊內(而不是空閒頁)。
表空間-緩衝池關係
DB2支援對每個表空間指定緩衝池,這樣就可以根據表空間內資料的訪問特徵設定不同的緩衝池,以最佳化快取利用率。
臨時表空間
基於以下考慮,建議使用SMS表空間:
*建立臨時表時,DMS與SMS相比成本較高
*SMS表空間按需分配,DMS需預分配
*臨時表一般僅存在於快取中,不需要寫回磁碟,DMS的效能優勢較小。
編目表空間(catalog table space)
基於以下考慮,建議使用SMS表空間:
*編目表數量多,行數較少。DMS中每個表至少包含2個extent,如果使用DMS則應extentsize設定為2或4;建議使用SMS。
*編目表包含LOB欄位,資料庫不快取LOB欄位;使用SMS可以利用檔案系統的快取。
注:即使建立資料庫時所選pagesize大於4k,編目表空間也以4k的pagesize對行長度進行限制。
最佳化使用RAID的表空間
*每個表空間使用一個容器
*表空間extentsize是RAID條帶大小(stripe size)的整數倍
*表空間prefetchsize是extentsize的整數倍,同時是RAID條帶大小(stripe size)與RAID並行裝置乘積的整數倍
*使用DB2_PARALLEL_IO登錄檔變數啟動並行IO(雖然只有一個容器,並行度=prefetchsize/extentsize)
範圍叢集表(Range Cluster Table)
*使用特定演算法實現記錄鍵值與rid之間的關係(非hash演算法,以保持排序),以便快速檢索
*用於叢集的鍵應該整型、非空、唯一、單調增長
*由於RCT鍵已實現非空、唯一,無需建立單獨的主鍵、唯一鍵
*對於非稀疏鍵值,且指定DISALLOW OVERFLOW,不需要索引支援
*所需空間在建立表時分配(最大行長度*記錄範圍確定的行數)
*RCT索引只存在於系統編目內,實際上並不維護
*與普通表需要key、nextkey鎖不同,RCT使用“discrete locking”
*不支援表分割槽、資料庫分割槽、索引叢集(clustering index)、MDC、壓縮、反向掃描(reverse scan)、load、reorg、AST(Automatic Summary Table)、DGTT(Declared Global Temporary Table)
多維叢集表
*主要優勢在提高查詢效能,減少維護操作(相對叢集索引可能因DML操作需要reorg,MDC不需要reorg)
*主要應用於資料倉儲和超大資料庫環境
*相對叢集索引(clustering index)只支援一維叢集,且不保證資料的嚴格叢集分佈,索引基於記錄導致較大空間消耗;MDC支援多維,且嚴格保證叢集分佈,索引基於塊所需空間較小
6資料庫分割槽設計
分散式事務管理,一個事務需要更新多個資料庫,可以選擇DB2事務管理器或XA相容事務管理器(IBM WebSphere or BEA Tuxedo)。
DB2事務管理器使用事務管理器資料庫(transaction manager database)跟蹤事務狀態。客戶端使用tm_database配置引數指定事務管理器為DB2資料庫。
配置事務管理器引數:
*資料庫管理器配置引數:tm_database,spm_name,resync_interval,spm_log_file_sz,spm_max_resync,spm_log_path
*資料庫配置引數:maxappls,autorestart
7 XA相容事務管理器(IBM WebSphere or BEA Tuxedo)
如果要支援非DB2資源參與事務,需要選擇XA相容事務管理器。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/18922393/viewspace-703262/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- db2學習筆記DB2筆記
- DB2學習筆記 - 表空間DB2筆記
- MoveIt! 學習筆記10- Planning with Approximated Constraint Manifolds筆記APPAI
- numpy的學習筆記\pandas學習筆記筆記
- IT學習筆記筆記
- 學習筆記筆記
- 【學習筆記】數學筆記
- 《JAVA學習指南》學習筆記Java筆記
- Elasticsearch學習筆記Elasticsearch筆記
- Scala學習筆記筆記
- MySql學習筆記MySql筆記
- jQuery 學習筆記jQuery筆記
- react學習筆記React筆記
- 學習筆記(4.3)筆記
- 學習筆記(4.4)筆記
- 學習筆記(3.29)筆記
- 學習筆記(4.1)筆記
- AOP學習筆記筆記
- AspectJ學習筆記筆記
- 學習筆記(3.27)筆記
- 學習筆記(4.2)筆記
- golang 學習筆記Golang筆記
- Zookeeper學習筆記筆記
- 學習筆記(3.24)筆記
- 學習筆記(3.25)筆記
- 學習筆記(3.21)筆記
- GitHub學習筆記Github筆記
- jest 學習筆記筆記
- typescript 學習筆記TypeScript筆記
- Echarts學習筆記Echarts筆記
- js學習筆記JS筆記
- shell學習筆記筆記
- Dubbo 學習筆記筆記
- SVN 學習筆記筆記
- 笨笨學習筆記筆記
- vue學習筆記Vue筆記
- wepack學習筆記筆記
- redis學習筆記Redis筆記