關(guān)鍵詞:ORACLE,系統(tǒng),性能調(diào)整
1 引 言
數(shù)據(jù)庫是現(xiàn)代計算機信息系統(tǒng)的基礎(chǔ)和核心,ORACLE是目前世界上使用最為廣泛的大型數(shù)據(jù)庫管理系統(tǒng),它幾乎可以運行在各種類型的計算機平臺上,提高ORACLE數(shù)據(jù)庫系統(tǒng)的運行效率,是整個計算機信息系統(tǒng)高效運轉(zhuǎn)的前提和保證。
隨著計算機信息系統(tǒng)的數(shù)據(jù)量日益劇增,系統(tǒng)的管理者及開發(fā)者均碰到系統(tǒng)的性能隨著數(shù)據(jù)量的增加在逐漸下降的情況,筆者結(jié)合近幾年的系統(tǒng)開發(fā)管理經(jīng)驗,從以下幾個方面進行系統(tǒng)調(diào)整,以提高ORACLE的整體效能,從而提高計算機信息系統(tǒng)的整體性能。
2 調(diào)整數(shù)據(jù)庫
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。
有些計算機操作系統(tǒng)用虛擬內(nèi)存來模擬計算機更大的內(nèi)存,它們使用的是一定的磁盤空間,在內(nèi)存不能夠滿足系統(tǒng)使用時,操作系統(tǒng)會使用這一部分磁盤空間,引發(fā)系統(tǒng)大量的I/O操作,從而降低系統(tǒng)的運行性能。
Oracle系統(tǒng)有三個基本的內(nèi)存高速緩存:庫高速緩存,字典高速緩存和緩沖區(qū)高速緩存,分別對應(yīng)三種不同類型的數(shù)據(jù)。庫高速緩存和字典高速緩存一起構(gòu)成共享池,共享池再加上緩沖區(qū)高速緩存便構(gòu)成了系統(tǒng)全局區(qū)(SGA)。SGA是對數(shù)據(jù)庫數(shù)據(jù)進行快速訪問的一個系統(tǒng)全局區(qū),若SGA本身需要頻繁地進行釋放、分配,則不能達到快速訪問數(shù)據(jù)的目的,因此應(yīng)把SGA放在主存中,不要放在虛擬內(nèi)存中。內(nèi)存的調(diào)整主要是指調(diào)整組成SGA的內(nèi)存結(jié)構(gòu)的大小來提高系統(tǒng)性能,一般設(shè)定SGA的大小為內(nèi)存的50%。
或者也可以直接查看INITsid.ORA系統(tǒng)初始化設(shè)置文件。
2.1.1 緩沖區(qū)高速緩存
是SGA中數(shù)據(jù)的存儲和處理的緩沖區(qū),如果DB_BLOCK_BUFFERS參數(shù)被設(shè)定得太低,最近被使用的數(shù)據(jù)將不被保存,如果再次使用這部分?jǐn)?shù)據(jù),必須重新從磁盤讀入,從而加大系統(tǒng)I/O和中央處理器資源的使用;如果DB_BLOCK_BUFFERS參數(shù)被設(shè)定得太高,你的系統(tǒng)可能會宕機。
95.945401
查看系統(tǒng)的讀取命中率,一般來說,在OLTP環(huán)境下命中率大于90%,大量的批事物處理會影響本指標(biāo)值。
ORACLE缺省的DB BLOCK SIZE為2K,在系統(tǒng)環(huán)境允許的情況下,應(yīng)增加到4K、8K或更高,每個雙倍大小的數(shù)據(jù)塊會減少約40%的I/O密集的批處理操作所需要的時間。
2.1.2 庫高速緩存和字典高速緩存
我們可以通過V$LIBRARYCACHE庫動態(tài)性能表查詢庫緩沖區(qū)的活動信息。
Pins為SQL和PL/SQL及被訪問對象定義的總次數(shù),Reloads為SQL和PL/SQL及被訪問對象定義重裝載時在庫程序緩沖區(qū)發(fā)生的錯誤,返回的值越小,說明庫緩沖區(qū)命中率合適,否則要調(diào)整SHARED POOL SIZE重新分配共享池的內(nèi)存量。
數(shù)據(jù)字典緩沖區(qū)包含數(shù)據(jù)庫的結(jié)構(gòu)、用戶、實體信息,同樣可以通過V$LIBRARYCACHE庫動態(tài)性能表查詢來了解它的命中率:
如果命中率低于85%,則需要調(diào)整SHARED POOL SIZE的大小。
當(dāng)系統(tǒng)需要執(zhí)行一個需要排序的查詢時,ORACLE會對內(nèi)存中排序區(qū)內(nèi)所有行進行排序,排序區(qū)的大小由INITsid.ORA中的SORT AREA SIZE大小(以字節(jié)數(shù)表示)來確定,如果ORACLE排序區(qū)比內(nèi)存中存在的更多,就會分配一個臨時段來存放與排序相關(guān)的數(shù)據(jù),一旦臨時段被分配,ORACLE不使用一致讀取的機制來讀取數(shù)據(jù),并且沒有邏輯讀被記錄,結(jié)果出現(xiàn)負的命中率,從而影響數(shù)據(jù)的讀取命中率??梢酝ㄟ^檢測V$SYSTAT中的sorts(memory)(內(nèi)存排序)和sorts(disk)(磁盤排序)的統(tǒng)計值確定與排序有關(guān)的參數(shù)設(shè)置得是否足夠大,理想的情況是sorts(disk)的值為0,所有的排序均在內(nèi)存中進行。
2.2 I/O的分配
磁盤的I/O速度對整個系統(tǒng)的性能有較大的影響,影響磁盤I/O性能的主要因素有磁盤競爭、I/O操作和數(shù)據(jù)塊的分配管理。
在創(chuàng)建ORACLE的表空間數(shù)據(jù)文件和數(shù)據(jù)事務(wù)登錄所用的日志文件時,首先要考慮數(shù)據(jù)庫服務(wù)器的可用磁盤資源。如果服務(wù)器上有多個磁盤,可以將文件分散存儲在不同的可用磁盤上,這樣事物處理所執(zhí)行的磁盤訪問不妨礙對相應(yīng)的事務(wù)日志登記的磁盤訪問,從而減少對數(shù)據(jù)文件和事務(wù)日志文件的競爭,有效改善服務(wù)器性能。
如果某一張表或幾張密切聯(lián)系的表,需要存放大量的數(shù)據(jù)且操作頻率高,可以為它們建立獨立的數(shù)據(jù)文件和索引文件存儲各自的應(yīng)用數(shù)據(jù),并且盡可能將這些數(shù)據(jù)文件分布在不同的磁盤上,從物理上消除系統(tǒng)表數(shù)據(jù)和索引數(shù)據(jù)競爭磁盤的可能性。
適當(dāng)為大數(shù)據(jù)量的表建立分區(qū)(ORACLE中每一個分區(qū)是一個表),一般在跟蹤歷史數(shù)據(jù)的系統(tǒng)中,按照一個與時間相關(guān)的列對數(shù)據(jù)分區(qū),這樣在與時間相關(guān)的查詢中,也可以極大地減少系統(tǒng)的I/O操作,進一步提高系統(tǒng)的性能。
數(shù)據(jù)字典中的統(tǒng)計表記錄了每一個數(shù)據(jù)文件的I/O量,可以通過查詢這些內(nèi)部統(tǒng)計表來查看I/O量。
2.3 回滾段的管理
數(shù)據(jù)庫數(shù)據(jù)表的事務(wù)(DELETE、INSERT、UPDATE)在回滾段產(chǎn)生登記項,它保持?jǐn)?shù)據(jù)塊在事務(wù)開始以前的狀態(tài),主要是為用戶提供一個數(shù)據(jù)的讀一致視圖或者在事務(wù)沒有提交的事件中回滾,改變?yōu)樗鼈冊瓉淼臓顟B(tài)?;貪L段控制著數(shù)據(jù)庫處理事務(wù)的能力,因而即使數(shù)據(jù)庫其它部分設(shè)計得再好,回滾段設(shè)計得不合理,仍將會嚴(yán)重影響系統(tǒng)的性能。
為回滾段建立一個獨立的表空間數(shù)據(jù),可以包括在不同驅(qū)動器上的多個文件,使回滾段與數(shù)據(jù)字典、用戶數(shù)據(jù)、索引等分離開來,減少I/O的競爭。同時獨立使用回滾段,可以減少用戶數(shù)據(jù)表空間的碎片產(chǎn)生。
數(shù)據(jù)庫回滾段的當(dāng)前空間分配可以通過查詢DBA_SEGMENTS字典來確定。
另外,借助DBA ROLLBACK SEGS,用戶可以訪問有關(guān)回滾段狀態(tài)信息。
3 調(diào)整應(yīng)用程序
在OLTP環(huán)境中,一般采用CLIENT/SERVER方式,如何減少CLIENT與SERVER之間的網(wǎng)絡(luò)I/O,是整個系統(tǒng)性能提高的重要環(huán)節(jié)。減少網(wǎng)絡(luò)I/O的重要原則是:將應(yīng)用邏輯集中在數(shù)據(jù)庫服務(wù)器中。
?。?)建立與客戶端無關(guān)的數(shù)據(jù)庫的完整性約束,只在服務(wù)器中運行,從而有效減少網(wǎng)絡(luò)的I/O;
?。?)對于表與表之間較為復(fù)雜的事務(wù)處理,采用觸發(fā)器;
?。?)為經(jīng)常使用到的查詢列建立索引,提高系統(tǒng)的查詢性能,減少磁盤的I/O操作;
?。?)復(fù)雜的查詢建立視圖,使CLIENT端的程序開發(fā)應(yīng)用簡潔;
?。?)多表的連接操作應(yīng)該從返回較少行上驅(qū)動;
?。?)充分利用ORACLE的PROCEDURE和PACKAGE,把有關(guān)的過程、函數(shù)或過程函數(shù)的程序包放在SERVER端,應(yīng)用程序只是簡單調(diào)用存儲過程和函數(shù),這樣可以減少大量的網(wǎng)絡(luò)I/O,同時對應(yīng)用程序的維護提供方便。
4 結(jié)束語
我們在實際開發(fā)應(yīng)用中,遵循上述方法,收到了較好的效果。如何產(chǎn)生最佳性能,還應(yīng)根據(jù)系統(tǒng)的具體情況進行具體分析和調(diào)整。
評論
查看更多