Oracle數(shù)據(jù)庫11gR1提供一套新工具集—SQL計(jì)劃管理(SPM),它讓每個(gè)Oracle DBA都可以為任何SQL語句捕獲并保存最有效的執(zhí)行計(jì)劃。本文是本系列中的最后一篇,主要講述如何使用SPM限制現(xiàn)有SQL語句第一次遇到Oracle11g的基本成本的優(yōu)化器(CBO)時(shí)性能突然倒退,同時(shí),也一并介紹一下幾個(gè)允許非常細(xì)粒度的SQL管理庫(SMB)的管理的SQL計(jì)劃管理特色。
本系列前面的文章探討了Oracle數(shù)據(jù)庫11g新的SQL計(jì)劃管理(SPM)特色,它可以用于Oracle10g升級(jí)到Oracle11g時(shí)捕獲和載入SQL計(jì)劃基線,以便在數(shù)據(jù)庫升級(jí)過程中消除SQL語句性能倒退,前面的文章也講述了如何保證新應(yīng)用程序代碼在部署到生產(chǎn)環(huán)境之前,為SQL語句選擇最有效的執(zhí)行計(jì)劃。
本文將講述如何使用SPM:
◆當(dāng)它們嘗試?yán)肙racle11g新的優(yōu)化器特色時(shí),限制SQL語句性能不必要的倒退。
◆通過手工方法捕獲特定SQL語句的SQL計(jì)劃基線。
◆控制現(xiàn)有SQL計(jì)劃基線的演變。
◆管理SQL計(jì)劃管理基線(SMB)的內(nèi)容,包括如何清除過時(shí)的或不希望有的SQL計(jì)劃基線。
SPM情景#3:依靠前面的優(yōu)化器版本使用SQL性能分析器(SPA)
在前面文章中的第一個(gè)情景講述了如何使用SPM為SQL語句捕獲SQL計(jì)劃基線,該SQL語句的性能在實(shí)施Oracle10g升級(jí)到Oracle11g的過程中可能倒退。那個(gè)情景實(shí)際上涉及到在一個(gè)現(xiàn)有的Oracle10g數(shù)據(jù)庫中執(zhí)行該SQL語句組成的SQL工作負(fù)載。解決這個(gè)問題的一個(gè)可選的方法是在一個(gè)現(xiàn)有的Oracle11g數(shù)據(jù)庫環(huán)境中通過控制初始化參數(shù)OPTIMIZER_FEATURES_ENABLE的值模擬一個(gè)Oracle10g環(huán)境。
模擬準(zhǔn)備
要說明這個(gè)情景,我將利用前面文章中SPM情景#2中SQL調(diào)整集STS_SPM_200中捕獲的相同的SQL語句,在我執(zhí)行任何新的分析之前,我將從SQL管理庫(SMB)中移除早先創(chuàng)建的所有SQL計(jì)劃基線,我將使用函數(shù)DBMS_SPM.DROP_SQL_PLAN_BASELINE移除那些標(biāo)記有注釋字符串“SPM_2”的語句(查看列表3.1),然后,我會(huì)準(zhǔn)備一個(gè)新的名叫SPA_SPM_300的SQL性能分析器(SPA)任務(wù),它將分析STS_SPM_200 SQL調(diào)整集中的SQL工作負(fù)載的性能(查看列表3.2)。
分析SQL工作負(fù)載
接下來,我將瞄準(zhǔn)SPA任務(wù)SPA_SPM_300,評(píng)估在Oracle10gR2和Oracle11gR1數(shù)據(jù)庫環(huán)境之間模擬的工作負(fù)載性能,首先我會(huì)清除我的Oracle11g的庫緩存和數(shù)據(jù)庫緩存,確保提供一個(gè)干凈的性能評(píng)估起點(diǎn)。然后,我會(huì)設(shè)置初始化參數(shù)OPTIMIZER_FEATURES_ENABLE的值為10.0.0.0,欺騙優(yōu)化器相信它是一個(gè)Oracle10g數(shù)據(jù)庫,最后,我會(huì)通過執(zhí)行SPA_SPM_300一次測(cè)試分析那個(gè)模式下的性能,一旦這個(gè)順序完成了,我將設(shè)置OPTIMIZER_FEATURES_ENABLE的值為11.1.0.6,然后重復(fù)相同的分析,SPA將在Oracle11g環(huán)境下評(píng)估工作負(fù)載,這里用到的代碼在列表3.3中。
比較相關(guān)的工作負(fù)載性能
一旦這兩個(gè)工作負(fù)載執(zhí)行測(cè)試完成,我下一個(gè)任務(wù)是判斷是否有SQL語句因?yàn)閮?yōu)化器設(shè)置改變而性能倒退了,我使用的代碼在列表3.4中,它們比較兩個(gè)工作負(fù)載模擬情況,然后生成一個(gè)關(guān)于哪些SQL語句性能下降了的報(bào)告。為了在這里展示SQL性能分析器的靈活性,我避開使用一個(gè)相對(duì)變化的優(yōu)化成本作為我的度量值,相反,我選擇基于估計(jì)執(zhí)行時(shí)間進(jìn)行SQL語句比較。
為性能倒退的SQL語句捕獲SQL計(jì)劃基線
與分析報(bào)告顯示的結(jié)果一樣,在模擬從10.2.0.1升級(jí)到11.1.0.6時(shí),有兩條SQL語句產(chǎn)生了負(fù)面的影響(性能降低了),我將捕獲這些語句的執(zhí)行計(jì)劃到SQL計(jì)劃基線中,這將防止CBO使用11g優(yōu)化器設(shè)置運(yùn)行這些SQL語句,它會(huì)因這些語句引起有害的性能,列表3.5中的代碼說明了如何實(shí)現(xiàn)這個(gè)。
更多信息請(qǐng)查看IT技術(shù)專欄