最佳化Oracle網路設定的方案(轉)

ba發表於2007-08-12
最佳化Oracle網路設定的方案(轉)[@more@]Oracle資料庫在不同的地域被人們廣泛使用,所以就必須要有專業的Oracle人員懂得網路連線是怎麼樣影響資料庫效能的。Oracle提供的TNS允許在每個資料庫中進行分配通訊。

  TNS伺服器被看作Oracle的邏輯資料請求中的絕緣體和遠端伺服器間的伺服器。同樣的,網路管理員有能力控制網路效能調諧性,但是Oracle管理員沒有控制影響資料庫效能的網路設定的權利。

  可以利用下面我所說的重要的設定來改變分散式事物元的效能。其中包括了sqlnet.ora, tnsnames.ora, 和 protocol.ora檔案中的引數,這些引數可以被用做改變設定和TCP包的大小,並且調整這些引數可以影響根本的網路傳輸層以便改變Oracle事物元的吞吐量。

  正如剛才所說,Oracle網不允許Oracle專業人員調整根本的網路傳輸層,並且大多數的網路流量不能在Oracle環境中被改變。記住,Oracle網路是一個在OSI模型中的網路層,這個網路層存在於網路協議棧上。

  但是,網路資訊包的頻率和大小可以被Oracle DBA來控制。Oracle有大量的工具來改變資訊包的頻率和大小。

  在伺服器間的Oracle網路連線可以用幾個引數來調諧。但是,你一定要記住,網路的調諧一定要在Oracle的外面並且一個有資格的網路管理員必須有在被商議後才可以調諧網路。資訊包的頻率和大小可以受到下面引數檔案的設定的影響。

  •sqlnet.ora伺服器檔案——automatic_ipc引數

  •sqlnet.ora 客戶檔案—break_poll_skip 引數

  •tnsnames.ora 和 listener.ora 檔案—SDU 和 TDU 引數

  •protocol.ora 檔案—tcp.nodelay 引數

  這些調諧引數僅僅影響Oracle網路層的效能。讓我們來詳細的解釋一下它們並看看它們怎麼被調整用來改變Oracle網路吞吐量。

  在傳輸資料之前Oracle網路預設等待直到緩衝器被填滿。因此,需求不能被立即送到它們的目的地。當大量的資料從一個地方送到另外一個地方的時候這個是最普通的了。Oracle網路不能傳送資訊包直到緩衝器滿了。新增一個protocol.ora 檔案和指定一個tcp.nodelay 停止緩衝器的延遲可以修補這個缺陷。

  protocol.ora檔案可以被指定用來說明所有TCP/IP實現的無資料緩衝。這個引數可以被用在客戶和伺服器端。protocol.ora語句是這樣的:

  tcp.nodelay = yes
指定這個引數可以使TCP緩衝器被跳過這樣每個請求就可以很快的被送到。但是請記住,由於更小和更頻繁的資訊包的傳送導致網路流量的增加,這樣就會降低網路的速度。

  tcp.nodelay

  tcp.nodelay引數僅僅在TCP遭遇超時設定的時候被使用。當在資料庫伺服器之間有大量的流量時設定tcp.nodelay可以導致在效能上巨大的改變。

  sqlnet.ora檔案中的automatic_ip引數

  automatic_ipc引數迂迴於網路層,所以它可以給本地連線到資料庫加速。當automatic_ipc=on的時候,Oracle網路會檢查本地資料庫是否被定義成相同的別,如果有,當連線被直接轉化成本地ICP連線的時候網路層被迴避。這個在資料庫伺服器上是非常有用的,但是對於Oracle網路使用者來說這個一點用都沒有。

  當Oracle網路連線必須被當作本地資料庫時,automatic_ipc引數僅僅應該被用在資料庫伺服器上。如果不需要本地連線的時候,將這個引數設定成off,透過利用這個設定,所有的Oracle網路可以可以改善其效能。

  tnsnames.ora檔案中的SDU和TDU

  SDU和TDU引數位於tnsnames.ora 和 listener.ora檔案中。SDU指定送入網路的資訊包的大小,理論上,SDU不應該超過MTU最大值的大小。MTU依賴一個現實的網路實現上,它是一個不變值。SDU在Oracle中的地位和MTU一樣。

  在Oracle的網路中,TDU的資訊包的大小是一個預設值。理想狀態下,TDU引數應該被定義為SDU引數的一倍。SDU和TDU預設的值的大小是2048,最大值是32767位元組。

  下面是使用SDU和TDU的方針:

  •SDU永遠不要設定的比TDU大,因為你將浪費掉網路資源空間。

  •如果你的使用者是透過調製調解器來上網,你應該將SDU和TDU的值設定的小一點,因為頻繁的再傳送會經常發生在調製調解器的線路上。

  •在寬頻連線中,你應該將你的網路SDU和TDU的值和MTU的值設定得大小一樣。在標準的乙太網路中,預設的MTU大小是1514位元組,在標準的令牌環形網中,MTU預設值大小是4202。

  •如果MTS被使用,你必須利用適當的MTU,TDU設定來設定mts_dispatchers。

  在主機之間,SDU和TDU設定是連線速度的直接函式。例如T1,設定SDU=TDU=MTU。對於速度慢的調製調解器來說,最好使用值較小的SDU和TDU。

  listener.ora檔案中的Queuesize引數

當Oracle正在建立的連線的時候,這個連線由queuesize引數來確定。這個引數僅僅被大容量的資料庫使用。人們期待同時發生的連線的大小必須和queuesize引數的大小相等。這裡是一個listener.org檔案中的關於使用這個引數的例子:

LISTENER =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = marvin)(PORT = 1521)(QUEUESIZE = 32)))


  這個引數的一個缺點就是它會為預計的請求分配引數,因此,會使用更多的記憶體和資源。如果你需要使用大容量連線你就要考慮使用MTS。同時,注意一些UNIX的版本不允許使用的佇列超過5,並且還有關於MTS佇列大小的限制。

  效能

  儘管大多數資訊包的流量都被調諧好了,但是正確的Oracle網路引數設定將給分散式系統的效能帶來巨大影響。對於使用Oracle的專業人員來說,他們必須完全明白其效能和最佳化這些重要的引數。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617731/viewspace-950063/,如需轉載,請註明出處,否則將追究法律責任。

相關文章