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