Oracle資料庫系統調優方法

來源:互聯網
上載者:User
    Oracle 資料庫廣泛應用在社會的各個領域,特別是在Client/Server模式的應用,但是應用開發人員往往碰到整個系統的效能隨著資料量的增大顯著下降的問題,為瞭解決這個問題,從以下幾個方面:資料庫伺服器、網路I/O、應用程式等對整個系統加以調整,充分發揮Oracle的效能,提高整個系統的效能。
    1 調整資料庫伺服器的效能
    Oracle資料庫伺服器是整個系統的核心,它的效能高低直接影響整個系統的效能,為了調整Oracle資料庫伺服器的效能,主要從以下幾個方面考慮:
    1.1 調整
    作業系統以適合Oracle資料庫伺服器運行
    Oracle資料庫伺服器很大程度上依賴於運行伺服器的作業系統,如果作業系統不能提供最好效能,那麼無論如何調整,Oracle資料庫伺服器也無法發揮其應有的效能。
    1.1.1 為Oracle資料庫伺服器規劃系統資源
    據已有電腦可用資源, 規劃分配給Oracle伺服器資源原則是:儘可能使Oracle伺服器使用資源極大化,特別在Client/Server中盡量讓伺服器上所有資源都來運行Oracle服務。
    1.1.2 調整電腦系統中的記憶體配置
    多數作業系統都用虛存來類比電腦上更大的記憶體,它實際上是硬碟上的一定的磁碟空間。當實際的記憶體空間不能滿足應用軟體的要求時,作業系統就將用這部分的磁碟空間對記憶體中的資訊進行頁面替換,這將引起大量的磁碟I/O操作,使整個伺服器的效能下降。為了避免過多地使用虛存,應加大電腦的記憶體。
    1.1.3 為Oracle資料庫伺服器設定作業系統進程優先順序
    不要在作業系統中調整Oracle進程的優先順序,因為在Oracle資料庫系統中,所有的後台和前台資料庫伺服器進程執行的是同等重要的工作,需要同等的優先順序。所以在安裝時,讓所有的資料庫伺服器進程都使用預設的優先順序運行。
    1.2 調整記憶體配置
    Oracle資料庫伺服器保留3個基本的記憶體快取,分別對應3種不同類型的資料:庫快取,字典快取和緩衝區快取。庫快取和字典快取一起構成共用池,共用池再加上緩衝區快取便構成了系統全程區(SGA)。SGA是對資料庫資料進行快速存取的一個系統全程區,若SGA本身需要頻繁地進行釋放、分配,則不能達到快速存取資料的目的,因此應把SGA放在主存中,不要放在虛擬記憶體中。記憶體的調整主要是指調整組成SGA的記憶體結構的大小來提高系統效能,由於Oracle資料庫伺服器的記憶體結構需求與應用密切相關,所以記憶體結構的調整應在磁碟I/O調整之前進行。
    1.2.1 庫緩衝區的調整
    庫緩衝區中包含私用和共用SQL和PL/SQL區,通過比較庫緩衝區的命中率決定它的大小。要調整庫緩衝區,必須首先瞭解該庫緩衝區的活動情況,庫緩衝區的活動統計資訊保留在動態效能表v$librarycache資料字典中,可通過查詢該表來瞭解其活動情況,以決定如何調整。
    1.2.2 資料字典緩衝區的調整
    資料字典緩衝區包含了有關資料庫的結構、使用者、實體資訊。資料字典的命中率,對系統效能影響極大。資料字典緩衝區的使用方式記錄在動態效能表v$librarycache中,可通過查詢該表來瞭解其活動情況,以決定如何調整。
    1.2.3 緩衝區快取的調整
    使用者進程所存取的所有資料都是經過緩衝區快取來存取,所以該部分的命中率,對效能至關重要。緩衝區快取的使用方式記錄在動態效能表v$sysstat中,可通過查詢該表來瞭解其活動情況,以決定如何調整。
    2 調整 Client/Server 模式下的網路 I/O
    Client/Server環境中的應用處理是分布在客戶應用程式和資料庫服務程式之間的。在 Client/Server環境中Client與Server之間的網路I/O是整個系統效能提高的瓶頸,一個客戶應用程式引起的網路I/O越少,應用及整個系統的效能越好。減少網路I/O的最重要的一條原則:將應用邏輯集中在資料庫伺服器中。
    2.1 使用Oracle資料庫的完整約束性
    當為應用建表時,應當為一些有特殊要求的資料加上適當的完整性條件約束,這樣就能實現由資料庫本身而不是應用程式來約束資料符合一定的條件。資料庫伺服器端的完整約束的執行操作是在比SQL語句層級更低的系統機制上最佳化,它與用戶端無關,只在伺服器中運行,不需在Client 端和Server端之間傳遞SQL語句,有效地減輕網路I/O負擔。
    2.2 使用資料庫觸發器
    完整約束性只能實現一些較簡單的資料約束條件,對一些較複雜的事物處理規則就無能為力,這時最好不要在應用程式中實施複雜的程式控制,而是應當採用資料庫觸發器來實施複雜的事物規則。資料庫觸發器能實現由資料庫本身,而不是應用程式,來約束資料符合複雜的事物處理規則,並且容易建立,便於管理,避免大量的網路I/O。
    2.3 使用預存程序、儲存函數和包
    Oracle的預存程序和儲存函數是命名的能完成一定功能並且儲存在Server端的PL/SQL的集合。包是一種把有關的過程和函數組織封裝成一個資料庫程式單元的方法。它們相對於應用程式的過程、函數而言,把SQL命令儲存在Server端。使用預存程序和儲存函數,應用程式不必再包含多個網路操作的SQL語句去執行資料庫伺服器操作,而是簡單調用預存程序和儲存函數,在網路上傳輸的只是調用過程的名字和輸出結果,這樣就可減少大量的網路I/O。
    3 應用程式的調整
    3.1 SQL語句的最佳化
    SQL語句的執行速度,可以受很多因素的影響而變化。但主要的影響因素是:驅動表、執行操作的先後順序和索引的運用。可以由很多不同的方法間接地改變這些因素,以達到最優的執行速度。這裡主要探討當對多個表進行串連查詢時應遵循的最佳化原則:
    3.2 建立和使用視圖、索引
    利用視圖可以將基表中的列或行進行裁減、隱藏一部分資料,並且能夠將涉及到多個表的複雜查詢以視圖的方式給出,使應用程式開發簡潔快速。利用索引可以提高查詢效能,減少磁碟 I/O,最佳化對資料表的查詢,加速SQL語句的執行。但任何時候建立索引都能提高效能,何時建立索引應當遵循以下原則:該表常用來在索引列上查詢,該表不常更新、插入、刪除等操作,查詢出來的結果記錄數應控制在原表的2%~4%。
    3.3 使用 Oracle 的數組介面
    當一個客戶應用程式插入一行或用一個查詢來向伺服器請求某行時,不是發送具有單個行的網路包,而是採用數組處理,即把要插入的多個行或檢索出的多個行緩衝在數組中,然後通過很少的幾個包就可在網上傳送這些數組。例如,一個給定的Select語句返回2000行資料,每行平均大小為40個位元組,資料包的大小為4kB,而數組大小參數(arraysize)設定為20 ,則需從伺服器發送100個資料包到客戶機。如果簡單地把(arraysize)設定為2000,那麼同樣的操作只需要傳送 20個資料包。這樣就減少了網路的傳輸量,提高了所有應用的效能。
    4 總結
    我們在開發應用程式時,遵循上述的方法和原則,對系統進行調整,收到了令人滿意的效果。但是應當指出,由於客戶機、網路、伺服器這3個相互依存的組成部分都必須調整和同步才能產生最佳的效能,因此還應根據系統的具體情況,具體分析和調整。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.