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的專業人員來說,他們必須完全明白其效能和最佳化這些重要的參數。