qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          db2 基礎

          第一篇基礎理論
          1DB2數據庫基本概念
          1.1數據庫對象
          關鍵的數據庫對象包括:實例、數據庫、節點組、表、視圖、索引、模式、
          系統目錄表。圖1顯示了一些數據庫對象之間的關系。它也顯示了表、索引和長
          整型數據存儲在表空間中的情況。

          圖1  系統 》實例》數據庫》節點組》表空間,索引長整數數據

          圖1.一些數據庫對象之間的關系
          1.1.1 1.1.1 實例
          實例(有時稱為數據庫管理程序)是管理數據的DB2代碼。它控制可對數
          據執行的操作,并管理分配給它的系統資源。每一個實例都是一個完整的環境。
          一個實例有它自己的數據庫(其他的實例不能存取它)。它還有獨立的安全性,
          不受同一機器(系統)上其他實例的影響。
          1.1.2 數據庫
          關系數據庫將數據表示成表的集合。表由數目已定的列和任意數目的行組
          成。每個數據庫都包括一組描述數據的邏輯和物理結構的系統目錄表,一個包含
          為該數據庫分配的參數值的配置文件以及一個帶有正在進行的事務和可歸檔事
          務的恢復日志。
          1.1.3 節點組
          節點組是一個或多個數據庫分區組成的集合。當您想為數據庫創建表時,首
          先創建節點組以存儲表空間,然后創建表空間以存儲表。
          1.1.4 表
          關系數據庫將數據表示成表的集合。表由邏輯排列的行和列數據組成。所有
          數據庫的表數據都被存儲在表空間中。
          1.1.5 視圖
          視圖是高效率的數據呈現方法(無需維護數據)。視圖不是實際的表,不需
          要永久性存儲器。創建并使用一個“虛擬表”。
          視圖可以包括它所基于的表中的所有或某些列或行。例如,可以在視圖中連
          接一個部門表和一個員工表,以便可以列出特定部門中的所有雇員。圖2顯示了
          表和視圖的關系。
          1.1.6 索引
          索引是一組關鍵字,其每一個都指向一些行。例如,圖3中,表A的一個
          索引基于表中的員工號碼。此關鍵字提供指向表行的指針:員工號碼19指向員
          工KMP。通過使用指針創建指向數據的直接路徑,索引是更有效的存取表行成
          為可能。
          SQL優化器自動選擇最有效率的存取表中數據的方法。當確定最快速的數
          據存取路徑時,優化器會將索引考慮在內。
          可創建唯一索引以確保索引關鍵字的唯一性。索引關鍵字是定義了索引的一
          個列或一些列的有序集合。使用唯一索引將確保在編入的索引的列中,每個索引
          關鍵字的值都是唯一的。圖3顯示了索引與表之間的關系。
          1.1.7 1.1.7 模式
          模式是一個標識符,如用戶ID,它幫助分組表和其他數據庫對象。模式可
          以歸個人擁有,擁有者可以控制對數據以及其中的對象的存取。
          模式也可以是數據庫中的對象。它可以在創建模式中的第一個對象時自動創
          建。這樣的對象可以是任何可以由模式名限定的對象,如表、索引、視圖、程序
          包、單值類型、函數或觸發器。
          1.1.8 系統目錄表
          每個數據庫都包括一組描述數據的邏輯和物理結構的系統目錄表。DB2為
          每個數據庫維護一大組系統目錄表。這些表包含有關數據庫對象(例如,用戶表、
          視圖和索引)的定義信息,以及用戶對這些對象所擁有的權限的安全性信息。它
          們在數據庫創建時被創建,并在常規操作期間得到更新。不能顯示的創建或卸載
          下它們,但是可以使用目錄視圖查詢和查看它們的內容。
          1.2存儲器對象
          下列數據庫對象用來定義在系統上存儲數據的方式以及改進(與存取數據相
          關的)性能的方法:表空間、容器和緩沖池。
          1.2.1 表空間
          數據庫由稱為表空間的部件組成。表空間是用來存儲表的位置。當創建表時,
          您可以決定將特定對象(如索引和大對象)數據與其余表數據分開存放。表空間
          也可以分布在一個或多個物理存儲設備上。圖4顯示了在表空間之間分布數據時
          具有的一些靈活性。
          將容器分配給表空間。容器是分配的物理存儲器(如文件和設備)。
          表空間可以使系統管理空間(SMS)或數據庫管理空間(DMS)。對于SMS
          表空間,每個容器都是操作系統的文件空間中的一個目錄,由操作系統的文件管
          理器控制存儲空間。對于DMS表空間,每個容器或者是固定大小的預分配文件,
          或者是物理設備如磁盤,由數據庫管理程序控制存儲空間。
          表空間有三種類型:規則、臨時和長整數。
          包 含 用 戶 數 據 的 表 存 放 在 規 則 表 空 間 中 。 缺 省 用 戶 表 空 間 名為
          USERSPACE1。索引也存儲在規則表空間中。系統目錄表存放在規則表空間中。
          缺省系統目錄表空間名為SYSCATSAPCE。
          包含長整數字段數據或長整數對象數據(如多媒體對象)的表存放在長整數
          表空間中。
          臨時表空間分為系統臨時表空間或用戶臨時表空間。系統臨時表空間用來存
          儲SQL操作(如排序、重組表、創建索引和連接表)期間所需的內部臨時數據。
          雖然可以創建任意數目個系統臨時表空間,但建議您只適用大多數表所使用的頁
          大小創建一個。缺省系統臨時表空間名為TEMPSPACE1。用戶臨時表空間用來
          存儲已說明全局臨時表(已說明全局臨時表存儲的是應用程序臨時數據)。用戶
          臨時表空間不是在數據庫創建時缺省創建的。
          1.2.2 1.2.2 容器
          容器是物理存儲設備。它可以由目錄名、設備名或文件名標識。
          將為表空間分配容器。單個表空間可以橫跨多個容器,但每個容器只能屬于
          一個表空間。
          圖5舉例說明了表與數據庫中的表空間、相關聯的容器和磁盤之間的關系。
          圖5.表空間、相關聯的容器和磁盤之間的關系
          EMPLOYEE、DEPARTMENT和PROJECT表在HUMANRES表空間中,該
          表空間橫跨容器0、1、2、3和4。此示例顯示每個容器存在于不同的磁盤上。
          任何表的數據都以循環方式存儲在表空間中的所有容器中。這能在屬于給定
          表空間容器之間平衡數據。數據庫管理程序在使用另一個容器之前寫入一個容器
          的頁數稱為數據塊大小。
          圖5.表空間、相關聯的容器和磁盤之間的關系
          EMPLOYEE、DEPARTMENT和PROJECT表在HUMANRES表空間中,該
          表空間橫跨容器0、1、2、3和4。此示例顯示每個容器存在于不同的磁盤上。
          任何表的數據都以循環方式存儲在表空間中的所有容器中。這能在屬于給定
          表空間容器之間平衡數據。數據庫管理程序在使用另一個容器之前寫入一個容器
          的頁數稱為數據塊大小。
          1.2.3 緩沖池
          緩沖池指的是從磁盤讀去高速緩存表和索引數據頁時或修改它們時分配給
          它們的主存儲器。緩沖池的目的是改進系統性能。從內存存取數據要比從磁盤存
          取數據塊的多;因此,數據庫管理程序需要讀寫(I/O)的次數越少,性能也越
          好。(可以創建多個緩沖池,雖然在大多數情況下只需要一個。)
          因為可以縮短慢速I/O所造成的延遲,所以緩沖池的配置是最重要的調整項
          目。
          1.2.3 緩沖池
          緩沖池指的是從磁盤讀去高速緩存表和索引數據頁時或修改它們時分配給
          它們的主存儲器。緩沖池的目的是改進系統性能。從內存存取數據要比從磁盤存
          取數據塊的多;因此,數據庫管理程序需要讀寫(I/O)的次數越少,性能也越
          好。(可以創建多個緩沖池,雖然在大多數情況下只需要一個。)
          因為可以縮短慢速I/O所造成的延遲,所以緩沖池的配置是最重要的調整項
          目。
          2.1AIX系統存儲管理簡介
          在AIX系統中,文件系統是建立在邏輯卷上的,邏輯卷是屬于一個卷組的,
          卷組是由實際的物理磁盤組成,邏輯卷在實際物理硬盤中可以不連續,它可以跨
          越多個物理硬盤而存在。AIX系統中物理與邏輯區段的映射如圖6所示
          在邏輯上,邏輯卷存在于卷組中,而在物理上,它存在于物理卷上,物理卷
          是硬盤。硬盤的界面分為5個同心區域:外邊緣(Outer-Edge)、外中間
          (Outer-Middle)、中央(Center)、內中間(Inner-Middle)和內邊緣(Inner-Edge),
          如圖7所示。
          由于磁盤機械裝置的物理移動,邊緣(Edge)區域的搜索時間最長。邏輯卷
          位于哪個區域上,對于邏輯卷的讀寫效率影響很大。
          其中,中央(Center)區域是磁盤搜索時間最短和訪問速度最快的。通常,
          把經常要訪問的邏輯卷放在磁盤的中央區域,把很少訪問的邏輯卷放在磁盤的邊
          緣(Edge)區域,其它邏輯卷放在磁盤的中間(Middle)區域。
          2.2裸設備和文件系統
          數據庫的物理實現對數據庫的運行時性能至關重要,物理實現更多的需要考
          慮硬件和系統平臺。
          數據庫服務器的性能通常是通過事務吞吐量和應用程序響應時間來測量的,
          該性能主要取決于I/O子系統的性能。為了獲得最大可能的I/O吞吐量,數據庫
          管理員和系統管理員需要特別注意數據庫表數據的布局。在AIX系統中通常有
          兩種數據存儲形式:裸設備、文件系統。裸設備,也叫裸分區(原始分區),是
          一種沒有經過格式化,不被Unix通過文件系統來讀取的特殊字符設備。它由應
          用程序負責對它進行讀寫操作。不經過文件系統的緩沖。因為使用裸設備避免了
          再經過AIX操作系統這一層,數據庫管理系統直接讀寫硬盤,所以使用裸設備
          對于讀寫頻繁的數據庫應用來說,可以提高數據庫系統的性能。當然,這是以磁
          盤的I/O非常大,磁盤I/O已經成為系統瓶頸的情況下才成立。如果磁盤讀寫確
          實非常頻繁,以至于磁盤讀寫成為系統瓶頸的情況成立,那么采用裸設備確實可
          以提高性能。
          DB2數據庫有三種表空間:目錄表空間、數據表空間和日志表空間。目錄
          表空間和日志表空間均存儲在文件系統中,而數據表空間的存儲類型是基于實際
          情況和以往的開發經驗來決定。在數據倉庫系統中,在ETL的任何一個階段都
          要求高速的磁盤I/O,需要大批量的數據讀取或寫入,磁盤I/O是數據倉庫系統
          性能的瓶頸。根據經驗,數據表空間可以采用裸設備的存儲方式。
          以下是一個例子。
          邏輯結構 DB2表空間 邏輯設備/文件系統 空間大小 備注
          目錄表空間 SYSCATSPACE /db2_tag 3GB 文件系統
          數據處理區 TBSPTEMP
          /dev/rdb2tbsptemplv
          /dev/rdb2tbsptemp2lv
          10GB
          10GB
          裸設備
          代碼對應區
          TBSPINTE /dev/rdb2tbspintelv 20GB 裸設備
          整合區
          日志表空間 - /intedb_log 20GB 文件系統
          2.4 2.4如何合理創建表空間設備
          2.4.1 原則
          1. 一個表空間跨多個物理磁盤,以獲得更好的I/O并行性
          2. 根據重要性不同,讓表空間分布于磁盤的不同位置
          ? 索引、重要數據位于中心
          ? 將次重要數據、文件系統放在中間和邊緣
          3. 將日志存放在獨立于數據表空間的磁盤上,以獲得更好的性能
          注:如果數據位于“獨立磁盤冗余陣列”(RAID),那么就不需要考慮數據以上的第1和第2

          2.4.2 表空間容器的創建方法
          按以下說明創建邏輯卷,并根據設備的重要性依次創建(首先創建最重要
          的),可以保證最重要的位于中央,按重要性依次往外排列,可以做到讀寫性能
          最優。
          1. smitlv
          2. 選擇多個物理盤(PHYSICALVOLUMEnames),界面如圖9所示。移動光
          標,用ESC+7選擇多塊物理磁盤PV。3. 在LogicalvolumeTYPE中輸入raw,即裸設備類型。
          4. 物理盤區域(POSITIONonphysicalvolume)選擇center,將范圍(RANGEof
          physicalvolumes)選擇最大(maximum)。如圖10所示。
          2.4.3 某數據庫表空間設備情況
          數據庫在創建表空間設備時完全遵循了2.4.1節中的原則。
          在創建邏輯卷時按照圖9所示創建,保證了一個設備跨越多個物理磁盤(盡
          可能多),以獲得更好的I/O并行性。
          并且,嚴格按照重要性降低的次序作為創建邏輯卷的順序。圖11顯示的是
          整合數據庫在磁盤hdiskpower8上的設備創建情況。由圖中看出,整合數據庫嚴
          格遵循了設備按照重要性分布的原則:
          ? 索引、重要數據位于中心
          ? 將次重要數據、文件系統放在中間和邊緣
          2.5 2.5建庫語句參考
          某個數據庫部分建庫語句:
          ---創建數據庫在一個2G的文件系統/anly_tag
          db2 create database anly on /anly_tag alias anly using codeset gbk territory cn collate using
          system
          ---創建bufferpool
          db2connecttoanlyuserdb2admin
          db2createbufferpoolTMPBF32Kimmediate size32000pagesize32k
          ---創建數據表空間(8G*4)并指定相應的bufferpool
          db2 create tablespace TBSPANLY pagesize 32 k managed by database using (device
          '/dev/ranlytbsplv' 262144)bufferpoolTMPBF32K
          db2altertablespaceTBSPANLYadd(device'/dev/ranlytbsplv2' 262144)
          db2altertablespaceTBSPANLYadd(device'/dev/ranlytbsplv3' 262144)
          db2altertablespaceTBSPANLYadd(device'/dev/ranlytbsplv4' 262144)
          ---創建系統臨時表空間(2G的文件系統/anly_tmp/tmp)并指定相應的bufferpool
          db2createsystem temporary tablespace TBSPTMP32Kpagesize32kmanagedbysystem using
          ('/anly_tmp/tmp')extentsize 8prefetchsize16bufferpoolTMPBF32K
          ----修改日志文件大小為25000*4K
          db2updatedbcfgforanlyusingLOGFILSIZ25000
          db2updatedbcfgforanlyusingLOGPRIMARY20
          db2updatedbcfgforanlyusingLOGSECOND50
          db2updatedbcfgforanlyusingNEWLOGPATH/anly_log
          ----修改表空間大小
          db2altertablespace tbsptempdrop(device'/dev/rdb2tbsptemp2lv')
          db2altertablespace tbsptempresize(device'/dev/rdb2tbsptemp3lv' 327680)
          33緩沖池和表空間
          3.1緩沖池
          通常,為每一頁面大小的系統臨時表空間建立一個緩沖池就足夠了。因為在緩沖池管理
          方面,我們完全可以信任DB2。如果想在這方面繼續提高性能,則可以參考本節的文字。
          DB2在其緩沖池的自我調優方面十分擅長,并且會將經常被訪問的行放入
          內存,因此一個緩沖池就足夠了。(這一選擇也避免了管理多個緩沖池的復雜性。)
          如果時間允許,并且需要進行改進,那么可能需要使用多個緩沖池。其思想
          是將訪問最頻繁的行放入一個緩沖池中。在那些隨機訪問或者很少訪問的表之間
          共享一個緩沖池可能會給緩沖池帶來“污染”,因為有時候要為一個本來可能不
          會再去訪問的行消耗空間,甚至可能將經常訪問的行擠出到磁盤上。如果將索引
          保留在它們自己的緩沖池中,那么在索引使用頻繁的時候(例如,索引掃描)還
          可以顯著地提高性能。
          這與我們對表空間的討論是緊密聯系的,因為要根據表空間中表的行為來分
          配緩沖池。如果采用多緩沖池的方法,采用4個緩沖池比較合適:
          1. 一個中等大小的緩沖池,用于臨時表空間。
          2. 一個大型的緩沖池,用于索引表空間。
          3. 一個大型的緩沖池,用于那些包含經常要訪問的表的表空間。
          4. 一個小型的緩沖池,用于那些包含訪問不多的表、隨機訪問的表或順序訪問的表的表空

          間。
          3.2緩沖池大小
          緩沖池大小需要綜合考慮系統內存和服務器工作負載情況而定。通常,OLTP類型分配
          75%的可用內存;OLAP類型分配50%的可用內存,將剩下的50%分配給SORTHEAP。
          緩沖池對應于系統的內存空間,所以千萬不要為緩沖池分配多于所能提供的
          內存,否則就會招致代價不菲的OS內存分頁。通常來講,如果沒有進行監控,
          要想知道一開始為每個緩沖池分配多少內存是十分困難的。對于OLTP類型的工
          作負載,一開始將75%的可用內存分配給緩沖池比較合適。對于OLAP/DSS,經
          驗法則告訴我們,應該將50%的可用內存分配給一個緩沖池(假設只有一種頁面
          大小),而將剩下的50%分配給SORTHEAP。
          3.3表空間頁大小
          在頁大小足以容納一條記錄的前提下,隨機更新操作,傾向于用較小的頁大小;而對于
          一次訪問大量行的操作,較大的頁大小可以提供更好的性能。
          為了創建一個表,必須有一個表空間,其頁面大小應足以容納一行。您可以
          選擇使用4、8、16或32KB這幾種頁面大小。有時候必須使用較大的頁面大小,
          以回避某些數據庫管理器的限制。例如,表空間的最大尺寸與表空間的頁面大小
          成比例。如果使用4K的頁面大小,那么表空間的大小(每個分區)最大是64GB,
          如果使用32K的頁面大小,那么最大是512GB。
          對于執行隨機更新操作的OLTP應用程序,采用較小的頁面大小更為可取,
          因為這樣消耗的緩沖池中的空間更少。
          對于要一次訪問大量連續行的OLAP應用程序,通常使用較大頁面大小效
          果會更好些,因為這樣可以減少在讀取特定數量的行時發出的I/O請求的數量。
          較大的頁面大小還允許您減少索引中的層數,因為在一頁中可以保留更多的行指
          針。然而,也有例外情況。如果行長度小于頁面大小的255分之1,則每一頁中
          都將存在浪費的空間,因為每頁最多只能有255行(對于索引數據頁不適用)。
          在這種情況下,采用較小的頁面大小或許更合適一些。
          3.4系統臨時表空間
          為每種頁面大小的表空間,建立一個系統臨時表空間,通常使用文件系統,大小根據排
          序和重組事物的大小確定。
          對于所使用的每種頁面大小,必須存在一個具有匹配頁面大小的系統臨時表
          空間(以支持排序和重組)。然后將所有享用匹配頁面大小的表空間指派給具有
          相同頁面大小的緩沖池。
          如果對性能還有更苛刻的要求,并且有時間投入,那么可以使用DMS表空
          間,并且根據使用情況來組織表。另外,還要遵循前面給出的關于使用多個緩沖
          池的建議。對于每種頁面大小,創建一個:
          1. 系統臨時表空間。
          2. 用于索引的常規表空間。
          3. 用于頻繁訪問的表的常規表空間。
          4. 用于訪問不多的表、隨機訪問的表以及順序訪問的表的常規表空間。
          5. 用于LOB數據的大型表空間。
          3.5區段大小和預取大小
          區段大小(extentsize)和預取大小(prefetchsize)是表空間的參數,對于數據存
          取性能至關重要。
          區段大小跟表空間中表的平均大小有一定的比例關系,通常表越大,區段大小也越大。
          如果表空間駐留在磁盤陣列上,則區段大小應設置成條紋大小。
          預取大小通過公式確定:prefetch size = (# containers of the table space on
          differentphysicaldisks)* extentsize。
          磁盤陣列的情況:prefetchsize=extentsize*(#ofnon-paritydisksinarray)。
          3.5.1 3.5.1 區段大小
          extent size 指 定 在 跳到 下 一 個 容 器之 前 , 可 以 寫入 到 一 個 容 器中的
          PAGESIZE頁面的數量,這個參數是在創建表空間時定義的(之后不能輕易修
          改)。處理較小的表時,使用較小的區段效率會更高一些。
          下面的經驗法則是建立在表空間中每個表的平均大小的基礎上的:
          1. 如果小于25MB,extentsize為8
          2. 如果介于25到250MB之間,則extentsize為16
          3. 如果介于250MB到2GB之間,則extentsize為32
          4. 如果大于2GB,則extentsize為64
          對于OLAP數據庫和大部分都要掃描(僅限于查詢)的表,或者增長速度
          很快的表,應使用較大的值。
          如果表空間駐留在一個磁盤陣列上,則應將區段大小設置成條紋大小(也就
          是說,寫入到陣列中一個磁盤上的數據)。
          3.5.2 預取大小
          對于預取大小,可以通過使用ALTERTABLESPACE輕易地修改。最優設置
          差不多是這樣的:prefetchsize=(#containersofthe table spaceondifferentphysical
          disks)*extentsize。
          如果表空間駐留在一個磁盤陣列上,則設置如下:prefetchsize=extentsize*
          (#ofnon-paritydisksinarray)。

          posted on 2014-01-30 00:48 順其自然EVO 閱讀(259) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2025年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 华亭县| 双鸭山市| 丹凤县| 安图县| 桂林市| 和林格尔县| 临邑县| 常宁市| 拜城县| 田林县| 双牌县| 新郑市| 海口市| 上饶市| 阿拉尔市| 福海县| 婺源县| 灵寿县| 古蔺县| 金寨县| 阜康市| 泰和县| 台中市| 山东省| 西安市| 朝阳县| 增城市| 平南县| 台安县| 新沂市| 盐津县| 广河县| 天津市| 霍州市| 如皋市| 平谷区| 同德县| 万盛区| 京山县| 星子县| 闸北区|