2008/5/28

學習筆記-DB2UDBV8.1管理學習筆記(一)

轉載自http://www.wgjz.com/database/other/20070515/89189.html

學習筆記-DB2UDBV8.1管理學習筆記(一)

目錄參考資源
在DB2中有關實例(Instance),數據庫(Database),表空間(TableSpace),容器(Container)等概念:

在一個操作系統中,DB2數據服務可以同時運行多個實例(有別於Oracle在一個系統內只能起一個實例),數據庫定義在實例中,一個實例可以包含多個數據庫。在同一個實例中的不同數據庫是完全獨立的,分別擁有自己獨立的系統編目表。

表 空間分為DMS方式和SMS(SystemmanegementSpace)方式,定義在數據庫中,一個數據庫中必須存在兩個系統基本的表空間,分別是系 統編目表空間(SysCatSpace)與系統臨時表空間(SysTempSpace)。在數據庫中創建的任何對象都以在系統編目表空間中增加記錄的方式 體現,對於臨時表空間,其佔用磁盤大小是根據使用情況動態伸縮的,即僅在需要時才分配磁盤空間,並在使用後進行回收。此外,若用戶需要創建表,則需要創建 用戶表空間(UserSpace),若需要使用臨時表,則需要創建用戶臨時表空間(UserTempSpace)。

DMS與SMS類型在表空間建立時指定,建好後不能轉換。對於DMS方式,一個表空間對應了一個或多個容器(Container),容器指定了數據的物理存儲位置。對於SMS方式,只能夠指定一個目錄,不能夠增加。

容 器分為三種類型,前兩種是文件與設備,用於DMS方式的表空間;還有一種是目錄,用於SMS方式的表空間,此種方式不需要人工管理數據存儲文件,DB2可 根據情況在目錄中自動增加存儲文件,只要磁盤空間允許。實質上,表空間是數據存儲的邏輯位置定義,容器則是數據存儲的物理位置定義。


影 響一個數據庫的性能主要有以下因素:磁盤(Disk),內存(Memory),處理器(CPU),網絡(Network)。其中以磁盤最為顯著,90%的 性能瓶頸可能來自於磁盤的IO競爭;其次是內存,一方面是指物理內存的總量要滿足需求,另一方面是指與內存相關的配置參數應正確配置;當然處理器的性能也 很重要,多路CPU會對哪些依賴計算能力的複雜SQL查詢起到顯著的效果;網絡不屬於主要因素,屬於客觀的環境因素,是指過慢的網速會對數據的傳輸造成影 響。以下列出一些對於提高數據庫性能有效的方法:

對於運行數據庫服務的服務器可以儘可能的配置多塊物理磁盤,每塊的容量不必太大,這樣可以有效的分擔數據存儲與讀取操作過程的磁盤IO競爭。即採用多塊小容量的磁盤在性能上要優於僅採用一塊大容量的磁盤。

如果條件允許,儘量使數據存儲服務與操作系統分別運行在物理分開的磁盤上。

採用DMS(DatabaseManagementSpace)管理方式的表空間。

在物理不同的磁盤上創建多個表空間。然後可以將數據和索引分別存放在不同的表空間,這樣可以顯著的提高性能。還可以把一個使用頻繁的大表縱向拆成多個小表,分別存放在不同的表空間中,然後用一個視圖進行聯合。

DB2服務器可以管理裸設備,即除系統以及DB2服務運行磁盤以外,為DB2數據存放單獨準備磁盤,可以是多塊,分區後不需要格式化,創建裸設備後直接交給DB2進行管理,用於存儲數據。

系統的臨時表空間對數據庫性能影響很大,當由管理的物理內存不能滿足數據庫操作的需要時,DB2便會把臨時數據寫到磁盤上,這時便用到了系統臨時表空間,並且這種情況會經常發生。

儘量在磁盤靠近最內層磁道的位置安放數據,因為此處磁盤的訪問速度較快。


DB2的參數配置分為兩個級別,一個是實例級別,另一個是數據庫級別。對數據服務性能影響較大的參數主要在數據庫級別配置。以下是三個比較重要的內存配置參數:

bufferpage:由同一個數據庫中的所有對象共享。

sortheap:用於排序的內存交換區,非共享,不宜設置太大,否則,很容易引起內存耗盡,因為每一個事務都會申請獨立的內存用於排序。

locklist: 共享內存,用於記錄數據服務運行中建立的鎖。建議設置20Mb左右,需要時根據實際情況進行調整。DB2默認使用行級鎖,如果設置太小,當鎖的記錄太多 時,則會導致內存不足,此時DB2會把多個行鎖升級為一個表鎖,這樣就會大大降低應用程序的並發性能。如果設置太大,則多分配的內存很少會被用到,導致浪 費。

其他的一些配置參數:

numdb:同時可以啟動的實例數目


DB2的常用命令:

db2ilist列出當前系統中定義的DB2實例
daslist列出系統中的DAS
db2listdatabasedirectory列出當前實例中定義的數據庫
db2listtablespaces列出當前數據庫中定義的表空間
db2listtabses[forall]列出當前數據庫中的表
db2listactivedb列出活動的數據庫

db2getdbmconfig
getdbcfgfordatabasename
db2updatedbcfgfordatabasenameusingbufferpage600M
db2alterbufferpoolIABMDEFAULTBPsize=1
db2listapplicationsshowdetail

以上命令可以在後面加"showdetail"參數,顯示詳細信息。


DB2數據存儲的頁大小只能在表空間級別統一指定(區別於Oracle,可以定義在表級別),並且建好後不能修改。

可以手工建立一個頁大小為4K的DMS用戶臨時表空間,然後把系統默認的SMS系統臨時表空間刪除。為滿足應用需求,一般還應再建立一個頁大小在8K以上的用戶臨時表空間。

DB2UDBV8.1對RedHatLinux9的支持不好,默認情況下無法啟動GUI安裝程序(可以通過設置環境LD_ASSUME_KERNEL=2.2.5解決),並且不會安裝Sample數據庫,控制中心也無法正常啟動。


當使用COUNT()函數時,如果表中的記錄數>2147483647行,則函數可能返回錯誤的結果,這時可以使用返回類型為DECIMAL(31,0)的COUNT_BIG()函數。

DISTINCT關鍵字可以用在COUNT()函數中,如:SELECTCOUNT(DISTINCTid)FROMTABLE,這代表將不對id列的重複值進行計數。

ORDERBY子句後面如果寫了多個列名,需要分別指定升序或是降序。

可以在load大量數據時,暫時關閉表的日誌選項。使用:ALTERTABLE...ACTIVATENOTLOGGEDINITIALLY

DB2的幾個特殊寄存器:CURRENTDATE,CURRENTTIME,CURRENTTIMESTAMP,USER(用戶ID).

有關日期的操作:CURRENTTIMESTAMP+2DAYS(orHOURS,SECONDS,MONTHS,YEARS,etc.)

case語句的使用:casewhen條件一then動作一else動作二end;可以欠套使用。

在視圖的創建語句中無法使用orderby子句與fetchnrows子句。但對於orderby可以用如下方法替代實現,不過會影響效率。
createviewv_name1(c1,c2,c3)as
select*from(
selectcolumn1,column2,column3
fromt1
orderbycolumn1)ast1;



參考資源
學習筆記-DB2UDBV8.1管理學習筆記(二)
學習筆記-DB2UDBV8.1管理學習筆記(三)
IBMDB2開發者園地
http://www-900.ibm.com/developerWorks/cn/dmdd/certify/index.shtml
IBMDB2信息中心
http://publib.boulder.ibm.com/infocenter/db2help/index.jsp
dbforums論壇
http://dbforums.com/
《DB2UDBv8.1forLinux,UNIX,Windows數據庫管理》GeorgeBaklarz,BillWong合著,機械工業出版社出版
《DB2數據庫管理與應用教程》莊濟誠著,清華大學出版社出版

沒有留言:

JPA+complex key+custom Query

  來源: https://www.cnblogs.com/520playboy/p/6512592.html   整個來說,就是有複合主鍵 然後要使用  public interface XxXXxx DAO extends CrudRepository<Tc...