學(xué)習(xí)筆記-DB2 UDB V8.1 管理 學(xué)習(xí)筆記(一)
2024-09-06 23:58:04
供稿:網(wǎng)友
,歡迎訪問網(wǎng)頁設(shè)計(jì)愛好者web開發(fā)。
版權(quán)聲明: 本文可以任意轉(zhuǎn)載,轉(zhuǎn)載時(shí)請(qǐng)務(wù)必以超鏈接形式標(biāo)明文章原始出處和作者信息。
原文出處: http://www.aiview.com/notes/db2_note.htm
作者: 張洋 alex_doesathotmail.com
最后更新: 2004-8-5
目錄 參考資源
在db2中有關(guān)實(shí)例(instance), 數(shù)據(jù)庫(database),表空間(tablespace),容器(container)等概念:
在一個(gè)操作系統(tǒng)中,db2數(shù)據(jù)服務(wù)可以同時(shí)運(yùn)行多個(gè)實(shí)例(有別于oracle在一個(gè)系統(tǒng)內(nèi)只能起一個(gè)實(shí)例),數(shù)據(jù)庫定義在實(shí)例中,一個(gè)實(shí)例可以包含多個(gè)數(shù)據(jù)庫。在同一個(gè)實(shí)例中的不同數(shù)據(jù)庫是完全獨(dú)立的,分別擁有自己獨(dú)立的系統(tǒng)編目表。
表空間分為dms方式和sms(system manegement space)方式,定義在數(shù)據(jù)庫中,一個(gè)數(shù)據(jù)庫中必須存在兩個(gè)系統(tǒng)基本的表空間,分別是系統(tǒng)編目表空間(syscatspace)與系統(tǒng)臨時(shí)表空間(systempspace)。在數(shù)據(jù)庫中創(chuàng)建的任何對(duì)象都以在系統(tǒng)編目表空間中增加記錄的方式體現(xiàn),對(duì)于臨時(shí)表空間,其占用磁盤大小是根據(jù)使用情況動(dòng)態(tài)伸縮的,即僅在需要時(shí)才分配磁盤空間,并在使用后進(jìn)行回收。此外,若用戶需要?jiǎng)?chuàng)建表,則需要?jiǎng)?chuàng)建用戶表空間(userspace),若需要使用臨時(shí)表,則需要?jiǎng)?chuàng)建用戶臨時(shí)表空間(usertempspace)。
dms與sms類型在表空間建立時(shí)指定,建好后不能轉(zhuǎn)換。對(duì)于dms方式,一個(gè)表空間對(duì)應(yīng)了一個(gè)或多個(gè)容器(container),容器指定了數(shù)據(jù)的物理存儲(chǔ)位置。對(duì)于sms方式,只能夠指定一個(gè)目錄,不能夠增加。
容器分為三種類型,前兩種是文件與設(shè)備,用于dms方式的表空間;還有一種是目錄,用于sms方式的表空間,此種方式不需要人工管理數(shù)據(jù)存儲(chǔ)文件,db2可根據(jù)情況在目錄中自動(dòng)增加存儲(chǔ)文件,只要磁盤空間允許。實(shí)質(zhì)上,表空間是數(shù)據(jù)存儲(chǔ)的邏輯位置定義,容器則是數(shù)據(jù)存儲(chǔ)的物理位置定義。
影響一個(gè)數(shù)據(jù)庫的性能主要有以下因素:磁盤(disk), 內(nèi)存(memory), 處理器(cpu), 網(wǎng)絡(luò)(network)。其中以磁盤最為顯著,90%的性能瓶頸可能來自于磁盤的io競(jìng)爭(zhēng);其次是內(nèi)存,一方面是指物理內(nèi)存的總量要滿足需求,另一方面是指與內(nèi)存相關(guān)的配置參數(shù)應(yīng)正確配置;當(dāng)然處理器的性能也很重要,多路cpu會(huì)對(duì)哪些依賴計(jì)算能力的復(fù)雜sql查詢起到顯著的效果;網(wǎng)絡(luò)不屬于主要因素,屬于客觀的環(huán)境因素,是指過慢的網(wǎng)速會(huì)對(duì)數(shù)據(jù)的傳輸造成影響。以下列出一些對(duì)于提高數(shù)據(jù)庫性能有效的方法:
對(duì)于運(yùn)行數(shù)據(jù)庫服務(wù)的服務(wù)器可以盡可能的配置多塊物理磁盤,每塊的容量不必太大,這樣可以有效的分擔(dān)數(shù)據(jù)存儲(chǔ)與讀取操作過程的磁盤io競(jìng)爭(zhēng)。即采用多塊小容量的磁盤在性能上要優(yōu)于僅采用一塊大容量的磁盤。
如果條件允許,盡量使數(shù)據(jù)存儲(chǔ)服務(wù)與操作系統(tǒng)分別運(yùn)行在物理分開的磁盤上。
采用dms(database management space)管理方式的表空間。
在物理不同的磁盤上創(chuàng)建多個(gè)表空間。然后可以將數(shù)據(jù)和索引分別存放在不同的表空間,這樣可以顯著的提高性能。還可以把一個(gè)使用頻繁的大表縱向拆成多個(gè)小表,分別存放在不同的表空間中,然后用一個(gè)視圖進(jìn)行聯(lián)合。
db2服務(wù)器可以管理裸設(shè)備,即除系統(tǒng)以及db2服務(wù)運(yùn)行磁盤以外,為db2數(shù)據(jù)存放單獨(dú)準(zhǔn)備磁盤,可以是多塊,分區(qū)后不需要格式化,創(chuàng)建裸設(shè)備后直接交給db2進(jìn)行管理,用于存儲(chǔ)數(shù)據(jù)。
系統(tǒng)的臨時(shí)表空間對(duì)數(shù)據(jù)庫性能影響很大,當(dāng)由管理的物理內(nèi)存不能滿足數(shù)據(jù)庫操作的需要時(shí),db2便會(huì)把臨時(shí)數(shù)據(jù)寫到磁盤上,這時(shí)便用到了系統(tǒng)臨時(shí)表空間,并且這種情況會(huì)經(jīng)常發(fā)生。
盡量在磁盤靠近最內(nèi)層磁道的位置安放數(shù)據(jù),因?yàn)榇颂幋疟P的訪問速度較快。
db2的參數(shù)配置分為兩個(gè)級(jí)別,一個(gè)是實(shí)例級(jí)別,另一個(gè)是數(shù)據(jù)庫級(jí)別。對(duì)數(shù)據(jù)服務(wù)性能影響較大的參數(shù)主要在數(shù)據(jù)庫級(jí)別配置。以下是三個(gè)比較重要的內(nèi)存配置參數(shù):
bufferpage: 由同一個(gè)數(shù)據(jù)庫中的所有對(duì)象共享。
sortheap: 用于排序的內(nèi)存交換區(qū),非共享,不宜設(shè)置太大,否則,很容易引起內(nèi)存耗盡,因?yàn)槊恳粋€(gè)事務(wù)都會(huì)申請(qǐng)獨(dú)立的內(nèi)存用于排序。
locklist: 共享內(nèi)存,用于記錄數(shù)據(jù)服務(wù)運(yùn)行中建立的鎖。建議設(shè)置20mb左右,需要時(shí)根據(jù)實(shí)際情況進(jìn)行調(diào)整。db2默認(rèn)使用行級(jí)鎖,如果設(shè)置太小,當(dāng)鎖的記錄太多時(shí),則會(huì)導(dǎo)致內(nèi)存不足,此時(shí)db2會(huì)把多個(gè)行鎖升級(jí)為一個(gè)表鎖,這樣就會(huì)大大降低應(yīng)用程序的并發(fā)性能。如果設(shè)置太大,則多分配的內(nèi)存很少會(huì)被用到,導(dǎo)致浪費(fèi)。
其他的一些配置參數(shù):
numdb: 同時(shí)可以啟動(dòng)的實(shí)例數(shù)目
db2的常用命令:
db2ilist 列出當(dāng)前系統(tǒng)中定義的db2實(shí)例
daslist 列出系統(tǒng)中的das
db2 list database directory 列出當(dāng)前實(shí)例中定義的數(shù)據(jù)庫
db2 list tablespaces 列出當(dāng)前數(shù)據(jù)庫中定義的表空間
db2 list tabses [for all] 列出當(dāng)前數(shù)據(jù)庫中的表
db2 list active db 列出活動(dòng)的數(shù)據(jù)庫
db2 get dbm config
get db cfg for databasename
db2 update db cfg for databasename using bufferpage 600m
db2 alter bufferpool iabmdefaultbp size =1
db2 list applications show detail
以上命令可以在后面加 " show detail" 參數(shù),顯示詳細(xì)信息。
db2數(shù)據(jù)存儲(chǔ)的頁大小只能在表空間級(jí)別統(tǒng)一指定(區(qū)別于oracle,可以定義在表級(jí)別), 并且建好后不能修改。
可以手工建立一個(gè)頁大小為4k的dms用戶臨時(shí)表空間,然后把系統(tǒng)默認(rèn)的sms系統(tǒng)臨時(shí)表空間刪除。為滿足應(yīng)用需求,一般還應(yīng)再建立一個(gè)頁大小在8k以上的用戶臨時(shí)表空間。
db2 udb v8.1 對(duì)redhat linux 9 的支持不好,默認(rèn)情況下無法啟動(dòng)gui安裝程序(可以通過設(shè)置環(huán)境ld_assume_kernel=2.2.5解決),并且不會(huì)安裝sample數(shù)據(jù)庫,控制中心也無法正常啟動(dòng)。
當(dāng)使用count()函數(shù)時(shí),如果表中的記錄數(shù) > 2 147 483 647行,則函數(shù)可能返回錯(cuò)誤的結(jié)果,這時(shí)可以使用返回類型為decimal(31, 0)的count_big()函數(shù)。
distinct 關(guān)鍵字可以用在count()函數(shù)中,如:select count(distinct id) from table,這代表將不對(duì)id列的重復(fù)值進(jìn)行計(jì)數(shù)。
order by子句后面如果寫了多個(gè)列名,需要分別指定升序或是降序。
可以在load大量數(shù)據(jù)時(shí),暫時(shí)關(guān)閉表的日志選項(xiàng)。使用:alter table ... activate not logged initially
db2的幾個(gè)特殊寄存器:current date, current time, current timestamp, user(用戶id).
有關(guān)日期的操作:current timestamp + 2 days(or hours, seconds, months, years, etc.)
case 語句的使用:case when 條件一 then 動(dòng)作一 else 動(dòng)作二 end; 可以欠套使用。
在視圖的創(chuàng)建語句中無法使用order by 子句與 fetch n rows 子句。但對(duì)于order by可以用如下方法替代實(shí)現(xiàn),不過會(huì)影響效率。
create view v_name1(c1, c2, c3) as
select * from (
select column1, column2, column3
from t1
order by column1 ) as t1;
參考資源
學(xué)習(xí)筆記-db2 udb v8.1 管理 學(xué)習(xí)筆記(二)
學(xué)習(xí)筆記-db2 udb v8.1 管理 學(xué)習(xí)筆記(三)
ibm db2 開發(fā)者園地
http://www-900.ibm.com/developerworks/cn/dmdd/certify/index.shtml
ibm db2 信息中心
http://publib.boulder.ibm.com/infocenter/db2help/index.jsp
dbforums 論壇
http://dbforums.com/
《db2 udb v8.1 for linux, unix, windows 數(shù)據(jù)庫管理》george baklarz, bill wong 合著,機(jī)械工業(yè)出版社出版
《db2數(shù)據(jù)庫管理與應(yīng)用教程》莊濟(jì)誠(chéng) 著,清華大學(xué)出版社出版