外文資料譯文及原文.doc

外文資料譯文及原文.doc

ID:50279783

大?。?8.00 KB

頁(yè)數(shù):18頁(yè)

時(shí)間:2020-03-07

外文資料譯文及原文.doc_第1頁(yè)
外文資料譯文及原文.doc_第2頁(yè)
外文資料譯文及原文.doc_第3頁(yè)
外文資料譯文及原文.doc_第4頁(yè)
外文資料譯文及原文.doc_第5頁(yè)
資源描述:

《外文資料譯文及原文.doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。

1、外文資料譯文及原文簡(jiǎn)介有關(guān)如何調(diào)優(yōu)數(shù)據(jù)庫(kù)系統(tǒng)和應(yīng)用程序的好的建議的來(lái)源有很多。比如OLTP應(yīng)用程序的DB2調(diào)優(yōu)技巧(以前在IBM?DB2?開(kāi)發(fā)者園地上發(fā)表)之類(lèi)的文章通過(guò)使用事務(wù)和數(shù)據(jù)并行性以及分析查詢方案,給出了從表空間和索引設(shè)計(jì)到緩沖池的內(nèi)存分配等方面的建議。這些方面的內(nèi)容是性能調(diào)優(yōu)的基礎(chǔ)知識(shí)。但是,有關(guān)如何組織存儲(chǔ)過(guò)程自身中的邏輯并著眼于其性能的專(zhuān)門(mén)建議卻并不多見(jiàn)。本文就提供了這樣一種建議。盡管本文著重于介紹SQL過(guò)程,但是這里所提供的大多數(shù)信息同樣適用于用其它語(yǔ)言編寫(xiě)的在應(yīng)用程序中或存儲(chǔ)過(guò)程中嵌入的SQL邏輯。背景知識(shí)和術(shù)語(yǔ)

2、在深入研究詳細(xì)問(wèn)題之前,讓我們先想想DB2中有關(guān)過(guò)程化SQL的一些基本術(shù)語(yǔ)和概念。過(guò)程化SQL構(gòu)造(例如標(biāo)量變量、IF語(yǔ)句和WHILE循環(huán))是在DB2UniversalDatabase?(UDB)V7發(fā)行版中引入DB2的。以前的DB2發(fā)行版支持C和Java?作為存儲(chǔ)過(guò)程的語(yǔ)言。V7引入了SQL存儲(chǔ)過(guò)程,以及其它許多可以促進(jìn)OLTP應(yīng)用程序開(kāi)發(fā)的特性(例如臨時(shí)表、應(yīng)用程序保存點(diǎn)和標(biāo)識(shí)列)。當(dāng)創(chuàng)建SQL過(guò)程時(shí),DB2將過(guò)程主體中的SQL查詢與過(guò)程邏輯區(qū)分開(kāi)來(lái)。為了使性能最優(yōu),SQL查詢被靜態(tài)地編譯成包中的節(jié)。(對(duì)于靜態(tài)編譯的查詢而言,節(jié)

3、主要是由DB2優(yōu)化器為該查詢選擇的存取方案構(gòu)成的。包是節(jié)的集合。在過(guò)程的執(zhí)行期間,每當(dāng)控制從過(guò)程邏輯流向SQL語(yǔ)句時(shí),在DLL和DB2引擎之間就存在“上下文切換”。(在DB2V8中,SQL過(guò)程是在“不受保護(hù)的方式”下運(yùn)行的,即與DB2引擎在相同的尋址空間中。因此我們這里談及的上下文切換并不是操作系統(tǒng)級(jí)別上的完全的上下文切換,而是指DB2中層的更換。)減少頻繁調(diào)用的過(guò)程(例如OLTP應(yīng)用程序中的過(guò)程)或者處理大量行的過(guò)程(例如執(zhí)行數(shù)據(jù)清理的過(guò)程)中的上下文切換次數(shù),對(duì)它們的性能有顯著的影響。本文中的幾個(gè)技巧恰好旨在減少這些上下文切換。

4、剛開(kāi)始的時(shí)候(DB2通用數(shù)據(jù)庫(kù)V7GA),只允許在SQL過(guò)程中使用SQL過(guò)程語(yǔ)言(通常稱(chēng)為SQLPL)。后來(lái)(在DB2UDBV7.2中),在SQL函數(shù)和觸發(fā)器主體中開(kāi)始支持該語(yǔ)言的子集。SQLPL的這個(gè)子集即所謂的內(nèi)聯(lián)(inline)SQLPL?!皟?nèi)聯(lián)”一詞突出顯示了它與完整語(yǔ)言的重要區(qū)別。SQLPL-10-過(guò)程是通過(guò)將其單獨(dú)的SQL查詢靜態(tài)地編譯成包中的節(jié)實(shí)現(xiàn)的,而內(nèi)聯(lián)SQLPL函數(shù)就象其名稱(chēng)所展示的,是通過(guò)將函數(shù)主體內(nèi)聯(lián)到使用它的查詢中實(shí)現(xiàn)的。稍后我們將再看一下內(nèi)聯(lián)SQLPL及其用法的一些示例。從多個(gè)SQL語(yǔ)句到一個(gè)SQL表達(dá)式

5、跟其它編程語(yǔ)言一樣,SQL語(yǔ)言提供了兩類(lèi)條件構(gòu)造:過(guò)程型(IF和CASE語(yǔ)句)和函數(shù)型(CASE表達(dá)式)。在大多數(shù)環(huán)境中,可使用任何一種構(gòu)造來(lái)表達(dá)計(jì)算,到底使用哪一種只是喜好問(wèn)題。但是,使用CASE表達(dá)式編寫(xiě)的邏輯不但比使用CASE或IF語(yǔ)句編寫(xiě)的邏輯更緊湊,而且更有效。使用SQL的一次處理一個(gè)集合語(yǔ)義,諸如循環(huán)、賦值和游標(biāo)之類(lèi)的過(guò)程化構(gòu)造允許我們表達(dá)那些只使用SQLDML語(yǔ)句是不可能表達(dá)的計(jì)算。但是,當(dāng)我們擁有一些可以隨意使用的過(guò)程語(yǔ)句時(shí),即使我們手頭的計(jì)算實(shí)際上僅使用SQLDML語(yǔ)句就可表達(dá),但轉(zhuǎn)換成過(guò)程語(yǔ)句還是有風(fēng)險(xiǎn)的。正如我

6、們以前提到的,過(guò)程計(jì)算的性能與使用DML語(yǔ)句表達(dá)的同一個(gè)計(jì)算的性能相比會(huì)慢幾個(gè)數(shù)量級(jí)。在研究改進(jìn)現(xiàn)有過(guò)程邏輯的性能時(shí),為消除游標(biāo)循環(huán)而花費(fèi)的任何時(shí)間都可能是值得的。改進(jìn)游標(biāo)性能如果存儲(chǔ)過(guò)程中的邏輯確實(shí)需要游標(biāo),那么要使性能最優(yōu),請(qǐng)牢記下面這些內(nèi)容。首先,請(qǐng)確保不使用高于您所需的隔離級(jí)別。隔離級(jí)別決定了DB2對(duì)過(guò)程讀取或更新的行應(yīng)用的鎖定的數(shù)量。隔離級(jí)別越高,DB2將執(zhí)行的鎖定越多,因此為同一資源而競(jìng)爭(zhēng)的應(yīng)用程序之間的并發(fā)就越少。例如,使用可重復(fù)讀(RepeatableRead,RR)隔離級(jí)別的過(guò)程將形成對(duì)其讀取的任何行的共享鎖,而使

7、用游標(biāo)穩(wěn)定性(CursorStability,CS)的過(guò)程只會(huì)鎖定任何可更新游標(biāo)的當(dāng)前行??梢允褂肈B2_SQLROUTINE_PREPOPTS注冊(cè)表變量來(lái)指定SQL過(guò)程的隔離級(jí)別。DB2中缺省的隔離級(jí)別是游標(biāo)穩(wěn)定性。但是,當(dāng)然了,為了保持應(yīng)用程序的正確性,有時(shí)需要使用可重復(fù)讀。還需記住一件重要的事情,一旦創(chuàng)建了需要可重復(fù)讀的過(guò)程,必須將DB2_SQLROUTINE_PREPOPTS重新設(shè)置回較低的隔離級(jí)別。-10-在嘗試改進(jìn)游標(biāo)性能時(shí)需要牢記的一個(gè)相關(guān)問(wèn)題是游標(biāo)的可更新能力。如果游標(biāo)涉及的行是可以使用INSERT或DELETE語(yǔ)句

8、中的WHERECURRENTOF子句進(jìn)行更新或刪除,那么它就是可刪除的。當(dāng)游標(biāo)可刪除時(shí),DB2必須獲取行上的互斥鎖(與共享鎖相對(duì)),并且不能執(zhí)行行分塊。行上的互斥鎖甚至可以防止其它應(yīng)用程序讀取該行(在互斥鎖被釋放之前,這些應(yīng)用程序必須

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫(huà)的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。