談論如何Oracle優(yōu)化
Oracle有很多值得學習的地方,這里我們主要介紹Oracle優(yōu)化,包括介紹可變參數的Oracle優(yōu)化等方面。數據庫系統(tǒng)和操作系統(tǒng)一樣,在計算機上安裝成功后,還需要進一步配置和優(yōu)化,從而使其具有更強大的功能和運行在最佳狀態(tài)。如果在設計階段因為各種因素沒有進行較為合理的配置和計劃,那么就需要在后期對數據庫系統(tǒng)進行優(yōu)化。
數據庫系統(tǒng)性能的優(yōu)化,除了在設計階段對其邏輯存儲結構和物理存儲結構設計進行優(yōu)化,使之在滿足需求條件下,時空開銷性能最佳外,還可在運行階段,采取一些優(yōu)化措施,使系統(tǒng)性能最佳。本專題所討論的性能優(yōu)化主要指運行階段的性能優(yōu)化,即討論如何使用Oracle所提供的優(yōu)化手段來提高系統(tǒng)性能。大多數性能問題并不是一種孤立的癥狀,而是系統(tǒng)設計的結果,因此性能優(yōu)化就集中在那些導致不可接受特征的同一的、固定的和潛在的問題上。優(yōu)化是數據庫設計中“計劃”、 “設計”、“監(jiān)視”和“優(yōu)化”四大步驟的最后一步。除了用Oracle優(yōu)化器來優(yōu)化數據庫的性能外,DBA還可通過Oracle優(yōu)化的參數設置等手段來優(yōu)化數據庫的性能,對參數的細微優(yōu)化便能影響系統(tǒng)整體性能。
為了有目的優(yōu)化系統(tǒng)性能,首先應明確優(yōu)化目標,然后再根據目標優(yōu)化各種初始參數的設置,以達到更好效果??捎腥缦聨讉€優(yōu)化目標:
◆ 應用程序設計的優(yōu)化
◆ 指定類型SQL語句的優(yōu)化
◆ 內存使用的優(yōu)化
◆ 數據存儲、物理存儲和邏輯存儲的優(yōu)化
◆ 網絡通信量的優(yōu)化
DBA可選定上述一個或多個目標來實施優(yōu)化。性能優(yōu)化主要是通過優(yōu)化初始化參數來實現。本專題從以下幾個方面來談談如何Oracle優(yōu)化數據庫,使其具有最佳性能。
(1)優(yōu)化初始參數
(2)優(yōu)化內存
(3)優(yōu)化I/O
(4)優(yōu)化資源爭用
(5)其它參數優(yōu)化
可變參數的Oracle優(yōu)化
在對Oracle數據庫進行優(yōu)化時,需要用到許多的參數,其中有一部分參數對系統(tǒng)性能影響較大,這部分參數叫可變參數??勺儏蛋雌渥饔每梢苑譃閮纱箢?,一大類是起限制作用的,如OPEN_CURSORS;另一大類是影響系統(tǒng)性能的,如DB_BLOCK_BUFFERS。在進行數據庫系統(tǒng)性能優(yōu)化時,需要熟練掌握和了解一些可變參數。本文討論了一些對系統(tǒng)性能有較大影響的參數。
限制類可變參數
(1)DML_LOCKS該參數表明多少個用戶,可同時能修改多少張表。例如:有三個用戶同時修改二張表,則要求表上的總數為6。若置為0,則組織隊列不起作用,其性能會稍有提高。使用該參數時不能用DROP TABLE、CREATE INDEX或顯式封鎖。
(2)LICENSE_MAX_SESSION該參數指出允許并發(fā)用戶會話的最大數。若此參數為0,則不能實施并發(fā)。若并發(fā)的用戶會話數已達到此極限,則只有具有RESTRICTED SESSION權限的用戶才能連接到服務器。
(3)LICENSE_MAX_USERS該參數指出在一個數據庫上可建立的最大用戶數。當達到最大值時,便不能再建新用戶,可改變此值以放松限制。在LICENSE_MAX_SESSION或 LICENSE_MAX_USER為0時,則并發(fā)會話或任何用戶都不能用。若對不同的實例,此參數不同時,則以第一個登錄的數據庫實例的參數為準。
(4)MAX_DUMP_FILE_SIZE該參數指定操作系統(tǒng)中寫跟蹤文件的塊的最大值??捎么酥祦硐拗聘櫸募目臻g。
(5)OPEN_CURSORS該參數指明一個用戶進程能同時打開光標的最大數,它能限制每個用戶進程占用的內存空間量。
(6)OPEN_LINKS該參數指定并發(fā)連接到遠程數據庫的最大用戶進程數。若同時引用多個數據庫,則應該增大該值。例如:同時交替訪問A、B和C三個數據庫時,若OPEN_LINKS設置為2,則需花費等待連接時間。此參數只用于分布事務。若該參數設置為0,則不允許進行分布事務處理。
(7)PROCESS該參數指定同時連接到Oracle服務器上的最大用戶進程數。該參數值包括6個后臺進程和一個登錄,因此,該參數值為20,則只能有13或14個并發(fā)用戶連接到服務器。
(8)ROW_LOCKING該參數指定行封鎖方式。若設置為“ALWAYS”,則在修改表時只實施行封鎖。若設置為“INTENT”時,則行封鎖只適用于SELECT FOR UPDATE,而在修改時實施表封鎖。
【編輯推薦】