蔡建華,張凌立
(華東師范大學(xué)計(jì)算機(jī)科學(xué)與軟件工程學(xué)院,上海,200062)
關(guān)鍵字:Oracle數(shù)據(jù)庫(kù);應(yīng)用系統(tǒng);性能優(yōu)化;評(píng)價(jià)指標(biāo)
隨著信息技術(shù)的不斷發(fā)展,Oracle數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)在人們的實(shí)際生產(chǎn)生活中得到了廣泛應(yīng)用。Oracle數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)具有較強(qiáng)的事務(wù)處理能力,不但事務(wù)處理質(zhì)量高,而且效率也有極大提升。根據(jù)相關(guān)統(tǒng)計(jì)顯示,Oracle數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)在實(shí)際的應(yīng)用過(guò)程中,仍存在影響系統(tǒng)性能的諸多因素,由此對(duì)Oracle數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的性能欠缺進(jìn)行分析,并針對(duì)其出現(xiàn)的問(wèn)題采取相關(guān)的應(yīng)用對(duì)策,加強(qiáng)對(duì)Oracle數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的性能優(yōu)化,對(duì)提高系統(tǒng)的運(yùn)行效率具有重要意義。
20世紀(jì)70年代Oracle數(shù)據(jù)庫(kù)作為一種完善的數(shù)據(jù)處理系統(tǒng)誕生,能夠有效地梳理數(shù)據(jù)之間的關(guān)聯(lián)性,不但具備完善的關(guān)系結(jié)構(gòu),而且還具備分布式的部署功能,適合海量關(guān)系數(shù)據(jù)的存儲(chǔ)。在Oracle數(shù)據(jù)庫(kù)實(shí)際的應(yīng)用過(guò)程當(dāng)中,憑借其強(qiáng)大的優(yōu)勢(shì),可以便捷地管理不同業(yè)務(wù)的數(shù)據(jù)關(guān)系,但是影響其性能發(fā)揮的問(wèn)題在實(shí)際應(yīng)用中不可避免,因此技術(shù)人員要從應(yīng)用實(shí)施出發(fā)對(duì)數(shù)據(jù)庫(kù)系統(tǒng)分析研究,依據(jù)評(píng)價(jià)指標(biāo)使系統(tǒng)性能最優(yōu)化,充分發(fā)揮Oracle數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的優(yōu)勢(shì)。
通常情況下,提高Oracle數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的吞吐量主要包括兩方面內(nèi)容。其一,盡最大程度化減少服務(wù)時(shí)間,促使服務(wù)質(zhì)量與服務(wù)效率的提升。充分保障在有限的時(shí)間內(nèi)及同等資源條件下,完成更多的任務(wù)量。其二,降低總體響應(yīng)時(shí)間。通過(guò)對(duì)響應(yīng)時(shí)間進(jìn)行整體調(diào)整,從而提高Oracle數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的實(shí)際運(yùn)行效率,發(fā)揮系統(tǒng)的作用,提高事務(wù)處理效率。
所謂的用戶響應(yīng)時(shí)間,總體上來(lái)講就是系統(tǒng)對(duì)事務(wù)處理的總用時(shí),并且當(dāng)前這種用時(shí)單位主要以秒或者毫秒為主。而系統(tǒng)響應(yīng)時(shí)間與用戶等待時(shí)間是用戶響應(yīng)時(shí)間的主要組成部分。基于此,要想實(shí)現(xiàn)客戶接受響應(yīng)時(shí)間,有效的提高服務(wù)質(zhì)量與服務(wù)效率,則需要做好以下方面:其一,減少用戶等待時(shí)間,盡可能降低用戶的沖突率,避免用戶在同一時(shí)間內(nèi),對(duì)同一系統(tǒng)的使用。其二,減少服務(wù)時(shí)間,不斷增強(qiáng)Oracle數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的吞吐量。
Oracle數(shù)據(jù)庫(kù)在實(shí)際的應(yīng)用過(guò)程當(dāng)中,用戶處理事務(wù)時(shí),其所需要的數(shù)據(jù)信息,完全是由緩存區(qū)高速緩存實(shí)現(xiàn)的。并且高速緩存命中率=命中總數(shù)÷查找總數(shù)。緩存區(qū)數(shù)據(jù)讀取與磁盤(pán)數(shù)據(jù)讀取相比較而言,前者更能夠降低數(shù)據(jù)讀取的開(kāi)銷(xiāo),并且緩存區(qū)數(shù)據(jù)命中率相對(duì)較高。
要想實(shí)現(xiàn)對(duì)內(nèi)存使用情況的調(diào)整,主要加強(qiáng)對(duì)運(yùn)營(yíng)時(shí)內(nèi)存、可共享內(nèi)存、及永久性內(nèi)存進(jìn)行分配。在判斷內(nèi)存是否存在合理化的使用時(shí),需要結(jié)合兩個(gè)重要的標(biāo)準(zhǔn)對(duì)其內(nèi)存使用情況作出判斷。首先,最大程度化降低能源的爭(zhēng)用率,由于等待與延遲會(huì)導(dǎo)致運(yùn)行出現(xiàn)瓶頸。因此,要想避免出現(xiàn)瓶頸,則需要盡最大可能降低資源的爭(zhēng)用率。其次,實(shí)現(xiàn)投資數(shù)值的最大值。
在Oracle數(shù)據(jù)庫(kù)實(shí)際的使用當(dāng)中,事務(wù)處理過(guò)程當(dāng)中會(huì)隨之產(chǎn)生相應(yīng)的I/O活動(dòng)。并且這種活動(dòng)同時(shí)可以囊括物理與邏輯兩種類(lèi)型。其中,在衡量Oracle數(shù)據(jù)庫(kù)實(shí)際的運(yùn)行性能時(shí),磁盤(pán)的I/O活動(dòng)發(fā)揮其不可替代的作用。與此同時(shí),磁盤(pán)的I/O活動(dòng)也是計(jì)算機(jī)開(kāi)銷(xiāo)最大的地方。如果能夠在Oracle數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)實(shí)際的運(yùn)行當(dāng)中,有效的降低I/O活動(dòng),則可以在一定程度上增加Oracle數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的吞吐量,極大的降低了用戶的響應(yīng)時(shí)間,進(jìn)而實(shí)現(xiàn)Oracle數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的實(shí)際運(yùn)行效率。
Oracle數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)當(dāng)中,數(shù)據(jù)庫(kù)服務(wù)器是整個(gè)系統(tǒng)的核心部分,其性能的高低,對(duì)Oracle數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的運(yùn)行具有重要的影響。并且,其操作系統(tǒng)與服務(wù)設(shè)備的硬件兩部分內(nèi)容,嚴(yán)重制約著數(shù)據(jù)庫(kù)服務(wù)器的性能。
在數(shù)據(jù)庫(kù)的實(shí)際運(yùn)行當(dāng)中,數(shù)據(jù)庫(kù)配置的情況,在很大程度上影響著數(shù)據(jù)庫(kù)的性能。與此同時(shí),數(shù)據(jù)庫(kù)配置是強(qiáng)化數(shù)據(jù)庫(kù)性能的重要保障。而數(shù)據(jù)庫(kù)配置主要由以下幾點(diǎn)內(nèi)容組成,例如參數(shù)配置、I/O配置、碎片整集、CPU調(diào)整、內(nèi)存區(qū)域配置、回滾段配置。數(shù)據(jù)庫(kù)配置將會(huì)貫穿于整個(gè)數(shù)據(jù)庫(kù)的整個(gè)運(yùn)行當(dāng)中。
在數(shù)據(jù)庫(kù)性能的提高過(guò)程當(dāng)中,應(yīng)用程序發(fā)揮著重要的作用。此外,選擇良好的數(shù)據(jù)庫(kù)銜接方案,設(shè)置數(shù)據(jù)庫(kù)程序等,對(duì)于提升SQL語(yǔ)言的運(yùn)用能發(fā)揮其重要的作用。并且對(duì)于提升數(shù)據(jù)庫(kù)程序的運(yùn)行效率,發(fā)揮其舉足輕重的作用。
內(nèi)存優(yōu)化主要是通過(guò)優(yōu)化內(nèi)存結(jié)構(gòu)來(lái)提高系統(tǒng)性能,一直都是數(shù)據(jù)庫(kù)優(yōu)化的工作重點(diǎn)。Oracle的內(nèi)存分為系統(tǒng)全局區(qū)(SGA)和進(jìn)程全局區(qū)(PGA),對(duì)內(nèi)存進(jìn)行有效配置調(diào)控的關(guān)鍵是在查詢時(shí)盡可能防止邏輯I/O變?yōu)槲锢鞩/O,也就是盡可能從緩存區(qū)訪問(wèn)所需數(shù)據(jù)。數(shù)據(jù)文件的訪問(wèn)可以通過(guò)調(diào)優(yōu)合適的SGA高速緩沖區(qū)來(lái)被最小化,而臨時(shí)表空間的訪問(wèn)可以通過(guò)優(yōu)化PGA來(lái)被最小化。針對(duì)生產(chǎn)環(huán)境的實(shí)際情況,是否有系統(tǒng)突發(fā)工作量,是否存在要大量排序的定期批處理作業(yè)等情況來(lái)調(diào)整SGA和PGA的設(shè)置,制定相關(guān)優(yōu)化策略以最小化處理時(shí)間。
4.1.1 優(yōu)化共享環(huán)節(jié)
系統(tǒng)通過(guò)SGA對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)進(jìn)行快速訪問(wèn),它是一組可被多個(gè)進(jìn)程使用的共享內(nèi)存緩沖區(qū)。首先要保證SGA被鎖定在物理內(nèi)存中,避免頁(yè)入或頁(yè)出。其次要調(diào)優(yōu)各共享區(qū)域的空間大小,其中優(yōu)化庫(kù)高速緩沖區(qū)和共享池是提升數(shù)據(jù)庫(kù)訪問(wèn)性能的關(guān)鍵。通過(guò)利用Oracle緩沖咨詢視圖,可準(zhǔn)確地確定緩沖區(qū)高速緩存大小,減少執(zhí)行物理讀寫(xiě)請(qǐng)求的次數(shù),提高緩沖區(qū)的數(shù)據(jù)命中率。共享池保存SQL語(yǔ)句的語(yǔ)法分析,當(dāng)用戶執(zhí)行SQL時(shí),無(wú)需進(jìn)行再次分析,直接從共享池取用已分析好的語(yǔ)句執(zhí)行,提高其實(shí)際的落實(shí)效率。對(duì)這些共享緩沖區(qū)的合理設(shè)置,可以大大加快數(shù)據(jù)查詢速度,有效緩解資源被惡意消耗的情況?;诖耍粩鄡?yōu)化共享環(huán)節(jié),能夠有效的提高數(shù)據(jù)的命中率。
4.1.2 優(yōu)化日志緩沖區(qū)
重做日志緩沖區(qū)是臨時(shí)存儲(chǔ)數(shù)據(jù)的內(nèi)存區(qū),用戶所有修改前后的數(shù)據(jù)都被保存在緩沖區(qū)中,在空閑等待過(guò)程中,log buffer數(shù)據(jù)會(huì)被LGWR進(jìn)程寫(xiě)入磁盤(pán)的重做日志文件之中,為緩沖區(qū)釋放更多可用空間,這在很大程度上提升了執(zhí)行效率。如果日志緩沖區(qū)空間過(guò)小,會(huì)導(dǎo)致Oracle數(shù)據(jù)庫(kù)無(wú)法為日志重做提供存儲(chǔ)空間?;蛘邤?shù)據(jù)寫(xiě)入緩沖區(qū)的速度超過(guò)LGWR進(jìn)程的寫(xiě)出速度,會(huì)造成資源爭(zhēng)用或日志瓶頸。在DML操作頻繁或經(jīng)常發(fā)生日志寫(xiě)入等待事件的生產(chǎn)數(shù)據(jù)庫(kù)中,要詳細(xì)分析引發(fā)重做日志緩沖區(qū)產(chǎn)生等待事件的原因,調(diào)整合適的重做日志緩沖區(qū)尺寸,使數(shù)據(jù)庫(kù)的運(yùn)轉(zhuǎn)性能最大化。
CPU的實(shí)際運(yùn)行情況,對(duì)Oracle數(shù)據(jù)庫(kù)性能產(chǎn)生重要的影響。因此,不斷的優(yōu)化CPU性能,不但有助于提升各項(xiàng)資源的應(yīng)用效率,而且還能夠提高數(shù)據(jù)庫(kù)運(yùn)行質(zhì)量。首先,在數(shù)據(jù)庫(kù)的查詢及處理過(guò)程當(dāng)中,需要采用兩個(gè)以上CPU。由于CPU技術(shù)不斷的進(jìn)步,及其CPU并行技術(shù)應(yīng)用的日漸成熟,Oracle可以很好地支持部署分布式數(shù)據(jù)庫(kù),平衡海量數(shù)據(jù)的查詢及處理。此外,在進(jìn)行數(shù)據(jù)查詢的時(shí),可以利用PQO(Parallel Query Option)方法實(shí)現(xiàn)。使用PQO方式不僅可以在多個(gè)CPU配置間分配SQL語(yǔ)句的處理請(qǐng)求,而且,當(dāng)所查詢的數(shù)據(jù)處于不同的磁盤(pán)時(shí),PQO能夠使用多個(gè)獨(dú)立進(jìn)程同時(shí)讀取不在同一個(gè)磁盤(pán)當(dāng)中的數(shù)據(jù)。
優(yōu)化Oracle數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)性能,不但難度系數(shù)相對(duì)較大,并且是一項(xiàng)較為復(fù)雜的工程。因此,技術(shù)人員要結(jié)合Oracle數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的實(shí)際運(yùn)行狀況,對(duì)其存在的問(wèn)題進(jìn)行全面分析。結(jié)合實(shí)際環(huán)境,優(yōu)化除了針對(duì)文中討論的實(shí)施階段,有時(shí)需要回溯到數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的設(shè)計(jì)階段或開(kāi)發(fā)階段,對(duì)程序結(jié)構(gòu)或SQL語(yǔ)句進(jìn)行調(diào)整,才能達(dá)到優(yōu)化系統(tǒng)性能的目的??傊?,優(yōu)化要考慮應(yīng)用程序在數(shù)據(jù)庫(kù)中涉及到的各個(gè)環(huán)節(jié),才能全面提升Oracle數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的性能。