袁 勇,池興穎,孫小林
(遵義師范學(xué)院 網(wǎng)絡(luò)管理中心,貴州 遵義 563000)
在信息系統(tǒng)使用過程中,隨著用戶業(yè)務(wù)量的增加,必然會(huì)對(duì)底層的數(shù)據(jù)庫帶來更大的訪問壓力。提高信息系統(tǒng)的訪問速度,就要提升數(shù)據(jù)庫的訪問性能,才能為用戶帶來更好的訪問體驗(yàn)。本研究首先對(duì)Oracle數(shù)據(jù)庫性能調(diào)優(yōu)給出常見的調(diào)整步驟,其次對(duì)其自帶的3A工具進(jìn)行介紹說明,最后對(duì)3A工具進(jìn)行對(duì)比分析,指出他們?cè)趯?shí)際優(yōu)化過程中的使用關(guān)系,以供相關(guān)技術(shù)人員參考。
數(shù)據(jù)庫性能的提升是保障快速訪問應(yīng)用系統(tǒng)的根本,也是信息系統(tǒng)的主要瓶頸之一,設(shè)計(jì)優(yōu)良的數(shù)據(jù)庫和應(yīng)用系統(tǒng)語句能帶給使用者更好的訪問體驗(yàn)。一般來說,主要通過4種方式實(shí)現(xiàn)數(shù)據(jù)庫性能的調(diào)優(yōu)。
操作系統(tǒng)參數(shù)的設(shè)置,對(duì)于Oracle數(shù)據(jù)庫性能也會(huì)帶來一定的影響。在設(shè)置過程中,除了保障數(shù)據(jù)庫的內(nèi)存使用量,還應(yīng)當(dāng)預(yù)留適度的內(nèi)存給操作系統(tǒng),避免操作系統(tǒng)無資源可調(diào)度。另外還應(yīng)當(dāng)對(duì)內(nèi)核參數(shù)kernel.shmmax,kernel.shmall,kernel.shmmni,kernel.sem等進(jìn)行相應(yīng)設(shè)置及調(diào)整。
在應(yīng)用系統(tǒng)運(yùn)行過程中,對(duì)內(nèi)存配置參數(shù)進(jìn)行優(yōu)化。數(shù)據(jù)庫管理員可以對(duì)SGA中Buffer Cache,LogBuffer以及Shared Pool組件的大小進(jìn)行調(diào)整,另外,還能調(diào)整PGA設(shè)置的大小。
在一些具體的部署中,可以將系統(tǒng)中同一個(gè)表空間的不同數(shù)據(jù)文件存放在不同的硬盤中,增加硬盤的并行處理能力,減少硬盤間輸入輸出相應(yīng)時(shí)間。這樣,在業(yè)務(wù)量較大的系統(tǒng)中,也可以提升數(shù)據(jù)庫訪問的時(shí)間性能。
自動(dòng)工作負(fù)載信息庫(Automatic Workload Repository,AWR)、活動(dòng)會(huì)話歷史(Active Session History,ASH)、自動(dòng)數(shù)據(jù)庫診斷監(jiān)視器(Automatic Database Diagnostic Monitor,ADDM)是Oracle數(shù)據(jù)庫自帶的三大性能監(jiān)控調(diào)整工具,使用好這三大工具,可以在數(shù)據(jù)庫運(yùn)行過程中,生成相應(yīng)的報(bào)告,查看數(shù)據(jù)庫系統(tǒng)的瓶頸,有針對(duì)性地解決性能瓶頸問題[1]。
Oracle數(shù)據(jù)庫安裝完成后,會(huì)自行運(yùn)行AWR工具。此工具收集的數(shù)據(jù)庫信息存儲(chǔ)在SYSAUX表空間的SYS模式下,其命名格式為WRM$_*和WRH$_*。通過可管理性監(jiān)視器(Memory Monitor process,MMON)進(jìn)程,將收集到的統(tǒng)計(jì)信息導(dǎo)入數(shù)據(jù)庫,默認(rèn)每小時(shí)操作一次。用戶可以根據(jù)以下命令來生成AWR報(bào)告:SQLPLUS >@?/rdbms/admin/awrrpt//。
用戶根據(jù)自身Oracle數(shù)據(jù)庫安裝目錄對(duì)應(yīng)找到腳本并執(zhí)行,以下的ASH,ADDM報(bào)告生成也是如此。
根據(jù)對(duì)話框向?qū)葾WR報(bào)告。值得注意的是,在選擇時(shí)間范圍時(shí),中間數(shù)據(jù)庫的服務(wù)器不能停機(jī)。報(bào)告的生成類型,一般默認(rèn)使用超文本標(biāo)記語言(Hyper Text Markup Language,HTML)文檔,方便查看。
ASH以V$SESSION為基礎(chǔ),記錄活動(dòng)會(huì)話等待事件,每秒采樣一次。數(shù)據(jù)庫里不活動(dòng)的會(huì)話不采樣,這些操作由進(jìn)程內(nèi)存監(jiān)視器指示燈(Memory Monitor Light,MMNL)來完成。用戶可以根據(jù)以下的命令來生成AWR報(bào)告:SQLPLUS>@?/rdbms/ashrpt.sql。
ASH buffers最小值1 MB,最大不超過30 MB,使用內(nèi)存記錄數(shù)據(jù),ASH信息同樣是被采集并寫入AWR負(fù)載庫,操作由MMNL進(jìn)程來完成。由于ASH全部寫出量大,會(huì)占用很多資源,一般不被接受。因此,通常只將收集的約10%的數(shù)據(jù)量導(dǎo)入AWR庫,并使用direct-path insert完成操作,減少日志生成,將這一操作對(duì)數(shù)據(jù)庫性能的影響最小化。
ADDM是Oracle數(shù)據(jù)庫內(nèi)部的一個(gè)診斷監(jiān)視系統(tǒng)。其自動(dòng)給出數(shù)據(jù)庫系統(tǒng)性能優(yōu)化的建議,給出結(jié)構(gòu)化查詢語言(Structured Query Language,SQL)優(yōu)化、索引創(chuàng)建、統(tǒng)計(jì)量收集等業(yè)務(wù)建議。用戶可以根據(jù)以下的命令來生成AWR報(bào)告:SQLPLUS>@?/rdbms/addmrpt.sql。
Oracle性能優(yōu)化就是對(duì)最影響性能的SQL語句作調(diào)整。依靠修改系統(tǒng)參數(shù)、數(shù)據(jù)庫參數(shù)等來提高數(shù)據(jù)庫的性能,這只是輔助性的工作[2]。ASH,AWR,ADDM報(bào)告都能夠找出最影響性能的SQL語句。在分析ASH,AWR報(bào)告時(shí),最主要的是關(guān)注SQL Statistics,而SQL Statistics中更主要的是關(guān)注SQL ordered by Reads和SQL ordered by Gets兩個(gè)指標(biāo)。大量的Gets(邏輯讀)會(huì)占用大量的CPU時(shí)間,物理讀導(dǎo)致I/O的瓶頸出現(xiàn)。通常大量的Gets會(huì)伴隨著大量的Reads(物理讀)出現(xiàn)。
用數(shù)據(jù)庫自帶工具生成報(bào)告的唯一目的是要找出最影響系統(tǒng)性能的SQL語句。找到該SQL語句后,就對(duì)其進(jìn)行優(yōu)化調(diào)整。ADDM報(bào)告生成基于AWR庫,默認(rèn)可以保存一個(gè)月的ADDM報(bào)告。
(1)AWR和ASH的區(qū)別在于:AWR是全面性的生成報(bào)告,而ASH更側(cè)重于對(duì)Session的Event進(jìn)行跟蹤。當(dāng)Oracle數(shù)據(jù)庫業(yè)務(wù)量較大時(shí),Event wait隨時(shí)可能發(fā)生變化。在這種情況下,很可能造成AWR無法監(jiān)控到。因此,為了彌補(bǔ)AWR這個(gè)缺點(diǎn),利用ASH收集數(shù)據(jù)量并導(dǎo)入AWR,完成對(duì)Session的Event進(jìn)行跟蹤。
(2)ASH和ADDM的區(qū)別在于:ADDM基于對(duì)Oracle數(shù)據(jù)庫當(dāng)前運(yùn)行狀態(tài)進(jìn)行分析,對(duì)數(shù)據(jù)庫存在的問題提供指導(dǎo)性意見[3]。
(3)ASH,ADDM是對(duì)AWR的補(bǔ)充,為AWR提供協(xié)助。ASH和ADDM側(cè)重對(duì)收集的數(shù)據(jù)進(jìn)行分析,AWR才是全面收集數(shù)據(jù)庫運(yùn)行各方面的狀態(tài),如圖1所示。
圖1 3A工具關(guān)系
本文首先給出Oracle數(shù)據(jù)性能調(diào)整的常用方式,從操作系統(tǒng)參數(shù)調(diào)整、緩存設(shè)置、硬盤I/O、3A工具監(jiān)控調(diào)整性能進(jìn)行簡(jiǎn)單介紹。之后針對(duì)3A工具作出詳細(xì)的說明及報(bào)告生成方式,并進(jìn)行對(duì)比分析,以供Oracle 數(shù)據(jù)庫系統(tǒng)相關(guān)從業(yè)技術(shù)人員在進(jìn)行數(shù)據(jù)庫性能優(yōu)化時(shí)參考。