關(guān)鍵詞:ORACLE,系統(tǒng),性能調(diào)整
1 引 言
數(shù)據(jù)庫(kù)是現(xiàn)代計(jì)算機(jī)信息系統(tǒng)的基礎(chǔ)和核心,ORACLE是目前世界上使用最為廣泛的大型數(shù)據(jù)庫(kù)管理系統(tǒng),它幾乎可以運(yùn)行在各種類型的計(jì)算機(jī)平臺(tái)上,提高ORACLE數(shù)據(jù)庫(kù)系統(tǒng)的運(yùn)行效率,是整個(gè)計(jì)算機(jī)信息系統(tǒng)高效運(yùn)轉(zhuǎn)的前提和保證。
隨著計(jì)算機(jī)信息系統(tǒng)的數(shù)據(jù)量日益劇增,系統(tǒng)的管理者及開發(fā)者均碰到系統(tǒng)的性能隨著數(shù)據(jù)量的增加在逐漸下降的情況,筆者結(jié)合近幾年的系統(tǒng)開發(fā)管理經(jīng)驗(yàn),從以下幾個(gè)方面進(jìn)行系統(tǒng)調(diào)整,以提高ORACLE的整體效能,從而提高計(jì)算機(jī)信息系統(tǒng)的整體性能。
2 調(diào)整數(shù)據(jù)庫(kù)
2.1 將足夠的內(nèi)存資源分配給ORACLE系統(tǒng)
將足夠的內(nèi)存資源分配給ORACLE系統(tǒng),首先要有充足的內(nèi)存分配給關(guān)鍵的ORACLE參數(shù),如:DB_BLOCK_BUFFERS,SHARED_POOL_SIZE和SORT_AREA_SIZE。
有些計(jì)算機(jī)操作系統(tǒng)用虛擬內(nèi)存來(lái)模擬計(jì)算機(jī)更大的內(nèi)存,它們使用的是一定的磁盤空間,在內(nèi)存不能夠滿足系統(tǒng)使用時(shí),操作系統(tǒng)會(huì)使用這一部分磁盤空間,引發(fā)系統(tǒng)大量的I/O操作,從而降低系統(tǒng)的運(yùn)行性能。
Oracle系統(tǒng)有三個(gè)基本的內(nèi)存高速緩存:庫(kù)高速緩存,字典高速緩存和緩沖區(qū)高速緩存,分別對(duì)應(yīng)三種不同類型的數(shù)據(jù)。庫(kù)高速緩存和字典高速緩存一起構(gòu)成共享池,共享池再加上緩沖區(qū)高速緩存便構(gòu)成了系統(tǒng)全局區(qū)(SGA)。SGA是對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)進(jìn)行快速訪問的一個(gè)系統(tǒng)全局區(qū),若SGA本身需要頻繁地進(jìn)行釋放、分配,則不能達(dá)到快速訪問數(shù)據(jù)的目的,因此應(yīng)把SGA放在主存中,不要放在虛擬內(nèi)存中。內(nèi)存的調(diào)整主要是指調(diào)整組成SGA的內(nèi)存結(jié)構(gòu)的大小來(lái)提高系統(tǒng)性能,一般設(shè)定SGA的大小為內(nèi)存的50%。

或者也可以直接查看INITsid.ORA系統(tǒng)初始化設(shè)置文件。
2.1.1 緩沖區(qū)高速緩存
是SGA中數(shù)據(jù)的存儲(chǔ)和處理的緩沖區(qū),如果DB_BLOCK_BUFFERS參數(shù)被設(shè)定得太低,最近被使用的數(shù)據(jù)將不被保存,如果再次使用這部分?jǐn)?shù)據(jù),必須重新從磁盤讀入,從而加大系統(tǒng)I/O和中央處理器資源的使用;如果DB_BLOCK_BUFFERS參數(shù)被設(shè)定得太高,你的系統(tǒng)可能會(huì)宕機(jī)。

95.945401
查看系統(tǒng)的讀取命中率,一般來(lái)說(shuō),在OLTP環(huán)境下命中率大于90%,大量的批事物處理會(huì)影響本指標(biāo)值。
ORACLE缺省的DB BLOCK SIZE為2K,在系統(tǒng)環(huán)境允許的情況下,應(yīng)增加到4K、8K或更高,每個(gè)雙倍大小的數(shù)據(jù)塊會(huì)減少約40%的I/O密集的批處理操作所需要的時(shí)間。
2.1.2 庫(kù)高速緩存和字典高速緩存
我們可以通過V$LIBRARYCACHE庫(kù)動(dòng)態(tài)性能表查詢庫(kù)緩沖區(qū)的活動(dòng)信息。

Pins為SQL和PL/SQL及被訪問對(duì)象定義的總次數(shù),Reloads為SQL和PL/SQL及被訪問對(duì)象定義重裝載時(shí)在庫(kù)程序緩沖區(qū)發(fā)生的錯(cuò)誤,返回的值越小,說(shuō)明庫(kù)緩沖區(qū)命中率合適,否則要調(diào)整SHARED POOL SIZE重新分配共享池的內(nèi)存量。
數(shù)據(jù)字典緩沖區(qū)包含數(shù)據(jù)庫(kù)的結(jié)構(gòu)、用戶、實(shí)體信息,同樣可以通過V$LIBRARYCACHE庫(kù)動(dòng)態(tài)性能表查詢來(lái)了解它的命中率:

如果命中率低于85%,則需要調(diào)整SHARED POOL SIZE的大小。
當(dāng)系統(tǒng)需要執(zhí)行一個(gè)需要排序的查詢時(shí),ORACLE會(huì)對(duì)內(nèi)存中排序區(qū)內(nèi)所有行進(jìn)行排序,排序區(qū)的大小由INITsid.ORA中的SORT AREA SIZE大?。ㄒ宰止?jié)數(shù)表示)來(lái)確定,如果ORACLE排序區(qū)比內(nèi)存中存在的更多,就會(huì)分配一個(gè)臨時(shí)段來(lái)存放與排序相關(guān)的數(shù)據(jù),一旦臨時(shí)段被分配,ORACLE不使用一致讀取的機(jī)制來(lái)讀取數(shù)據(jù),并且沒有邏輯讀被記錄,結(jié)果出現(xiàn)負(fù)的命中率,從而影響數(shù)據(jù)的讀取命中率??梢酝ㄟ^檢測(cè)V$SYSTAT中的sorts(memory)(內(nèi)存排序)和sorts(disk)(磁盤排序)的統(tǒng)計(jì)值確定與排序有關(guān)的參數(shù)設(shè)置得是否足夠大,理想的情況是sorts(disk)的值為0,所有的排序均在內(nèi)存中進(jìn)行。


2.2 I/O的分配
磁盤的I/O速度對(duì)整個(gè)系統(tǒng)的性能有較大的影響,影響磁盤I/O性能的主要因素有磁盤競(jìng)爭(zhēng)、I/O操作和數(shù)據(jù)塊的分配管理。
在創(chuàng)建ORACLE的表空間數(shù)據(jù)文件和數(shù)據(jù)事務(wù)登錄所用的日志文件時(shí),首先要考慮數(shù)據(jù)庫(kù)服務(wù)器的可用磁盤資源。如果服務(wù)器上有多個(gè)磁盤,可以將文件分散存儲(chǔ)在不同的可用磁盤上,這樣事物處理所執(zhí)行的磁盤訪問不妨礙對(duì)相應(yīng)的事務(wù)日志登記的磁盤訪問,從而減少對(duì)數(shù)據(jù)文件和事務(wù)日志文件的競(jìng)爭(zhēng),有效改善服務(wù)器性能。
如果某一張表或幾張密切聯(lián)系的表,需要存放大量的數(shù)據(jù)且操作頻率高,可以為它們建立獨(dú)立的數(shù)據(jù)文件和索引文件存儲(chǔ)各自的應(yīng)用數(shù)據(jù),并且盡可能將這些數(shù)據(jù)文件分布在不同的磁盤上,從物理上消除系統(tǒng)表數(shù)據(jù)和索引數(shù)據(jù)競(jìng)爭(zhēng)磁盤的可能性。
適當(dāng)為大數(shù)據(jù)量的表建立分區(qū)(ORACLE中每一個(gè)分區(qū)是一個(gè)表),一般在跟蹤歷史數(shù)據(jù)的系統(tǒng)中,按照一個(gè)與時(shí)間相關(guān)的列對(duì)數(shù)據(jù)分區(qū),這樣在與時(shí)間相關(guān)的查詢中,也可以極大地減少系統(tǒng)的I/O操作,進(jìn)一步提高系統(tǒng)的性能。
數(shù)據(jù)字典中的統(tǒng)計(jì)表記錄了每一個(gè)數(shù)據(jù)文件的I/O量,可以通過查詢這些內(nèi)部統(tǒng)計(jì)表來(lái)查看I/O量。


2.3 回滾段的管理
數(shù)據(jù)庫(kù)數(shù)據(jù)表的事務(wù)(DELETE、INSERT、UPDATE)在回滾段產(chǎn)生登記項(xiàng),它保持?jǐn)?shù)據(jù)塊在事務(wù)開始以前的狀態(tài),主要是為用戶提供一個(gè)數(shù)據(jù)的讀一致視圖或者在事務(wù)沒有提交的事件中回滾,改變?yōu)樗鼈冊(cè)瓉?lái)的狀態(tài)。回滾段控制著數(shù)據(jù)庫(kù)處理事務(wù)的能力,因而即使數(shù)據(jù)庫(kù)其它部分設(shè)計(jì)得再好,回滾段設(shè)計(jì)得不合理,仍將會(huì)嚴(yán)重影響系統(tǒng)的性能。
為回滾段建立一個(gè)獨(dú)立的表空間數(shù)據(jù),可以包括在不同驅(qū)動(dòng)器上的多個(gè)文件,使回滾段與數(shù)據(jù)字典、用戶數(shù)據(jù)、索引等分離開來(lái),減少I/O的競(jìng)爭(zhēng)。同時(shí)獨(dú)立使用回滾段,可以減少用戶數(shù)據(jù)表空間的碎片產(chǎn)生。
數(shù)據(jù)庫(kù)回滾段的當(dāng)前空間分配可以通過查詢DBA_SEGMENTS字典來(lái)確定。

另外,借助DBA ROLLBACK SEGS,用戶可以訪問有關(guān)回滾段狀態(tài)信息。
3 調(diào)整應(yīng)用程序
在OLTP環(huán)境中,一般采用CLIENT/SERVER方式,如何減少CLIENT與SERVER之間的網(wǎng)絡(luò)I/O,是整個(gè)系統(tǒng)性能提高的重要環(huán)節(jié)。減少網(wǎng)絡(luò)I/O的重要原則是:將應(yīng)用邏輯集中在數(shù)據(jù)庫(kù)服務(wù)器中。
?。?)建立與客戶端無(wú)關(guān)的數(shù)據(jù)庫(kù)的完整性約束,只在服務(wù)器中運(yùn)行,從而有效減少網(wǎng)絡(luò)的I/O;
?。?)對(duì)于表與表之間較為復(fù)雜的事務(wù)處理,采用觸發(fā)器;
?。?)為經(jīng)常使用到的查詢列建立索引,提高系統(tǒng)的查詢性能,減少磁盤的I/O操作;
(4)復(fù)雜的查詢建立視圖,使CLIENT端的程序開發(fā)應(yīng)用簡(jiǎn)潔;
?。?)多表的連接操作應(yīng)該從返回較少行上驅(qū)動(dòng);
?。?)充分利用ORACLE的PROCEDURE和PACKAGE,把有關(guān)的過程、函數(shù)或過程函數(shù)的程序包放在SERVER端,應(yīng)用程序只是簡(jiǎn)單調(diào)用存儲(chǔ)過程和函數(shù),這樣可以減少大量的網(wǎng)絡(luò)I/O,同時(shí)對(duì)應(yīng)用程序的維護(hù)提供方便。
4 結(jié)束語(yǔ)
我們?cè)趯?shí)際開發(fā)應(yīng)用中,遵循上述方法,收到了較好的效果。如何產(chǎn)生最佳性能,還應(yīng)根據(jù)系統(tǒng)的具體情況進(jìn)行具體分析和調(diào)整。
評(píng)論