1. 程式人生 > >oracle dataguard網絡最佳實踐一

oracle dataguard網絡最佳實踐一

oracle dataguard best practices

oracle dataguard redo 網絡最佳實踐(簡譯)

oracle dataguard好處:

1 對系統性能影響最小

這裏有兩個最高可用架構(MAA)場景配置,在有足夠帶寬的情況下,得出如下結論:

1 DG在紐約和蒙特利爾(300英裏的距離,10MS的往返延遲),使用實時模式,在redo 4MB/s生成速率下,可以做到對生產系統5%的性能影響和零數據丟失;

2 在波士頓和倫敦之間(3300英裏,100MS往返延遲),使用異步模式,在20MB/s的日誌生成速率下,可以做到對系統5%以下的影響;

2 最高級別數據保護模式:

1 同步模式,0數據丟失,兩者的距離建議在百公裏左右;

2 異步傳輸模式,適用遠距離,高延遲的環境,例如:從香港到新加坡,超過1600英裏,有50MS的延遲,2MB/s的日誌生成速率,可以接受3s內的數據失失環境。

3 增強的歸檔日誌傳輸:在發生網絡或standby系統故障時,需要重同步時可以被加速。例如:1GB的日誌文件需要用歸檔進程傳輸,可以減少至55%的傳輸時間,在快速重同步的過程中,關鍵數據是處於一種保護模式的;

3 快速的switchover/failover,秒級切換

REDO傳送最佳實踐

DG提供了三種傳輸方式:arch,lgwr async,lgwr sync,下面描述這幾種方式對網絡需求和最佳配置。

1 帶寬選擇

 根據awr reports:3MB/s的在高峰期,需要3*8*1024*1024/1000/1000=25.2Mbps,通常來說53KM增加1ms的延遲,同時還得考慮網絡中繼器,系統性能,網絡自有的包流量。為了測試RTT的延遲,可以用traceroute跟蹤一下;

2 DATAGuard的保護模式設置

如果用LGWR SYNC同步模式,如果網絡不足以處理redo的生成量,將會影響生產機的性能;相反,用LGWR ASYNC模式,還是使用online redolog傳輸,在redo生成高峰期超過了網絡流量卻不會對生產系統造成影響。使用ARCH傳輸本地歸檔文件,也不會對生產系統產生影響(但是和lgwr async比,丟失數據的風險的可能性將大大增加)所以一旦網絡間的傳輸方式確定,自行選擇下面的最佳實踐方式:

2.1 ARCH傳輸模式

 增加ARCN的進程數量,初始數量為2;log_archive_max_processes控制最大歸檔進程數;在oracle 10.2以後的版本中,這個值最大為30,以前的版本最大為10;ARCn進程可以加快處理archive gap。當主機端設置了MAX_CONNECTIONS參數,大量的ARCn進程可以加快並行處理,

註意:

a) log_archive_max_Processes會和其它程序爭奪相同的網絡資源,建議根據實際網絡和ARCHIVE GAP場景設置最優的log_archive_max_processes;

b)

源端max_connections設置大於等於2,這樣可以減少archive log的傳輸時間,此值最大為5;

2.2 lgwr async傳輸模式

從oracle 10.2開始,生產庫需保證有足夠的I/O帶寬用於LNS處理在線事務日誌。在性能測試中測出額外的讀取量;

2.3 LGWR SYNC Redo傳輸

設置NET_TIMEOUT屬性(生產庫的網絡服務對LGWR請求的響應時間等待多少秒,以減少網絡丟包對生產庫的影響;

在oracle 10.2裏NET_TIMEOUT值為180秒;官方推薦此值的最低值為10秒,當然你可以設成最小值1秒,但是如果網絡不穩定延遲會導致數據保護模式的不停切換;

使用lgwr sync方式,事務提交時會確認本地和遠端的數據庫;針對兩種提交方式:commit wait&commit nowait :commit nowait方式可以只返回給應用程序結果而不用去確認redo是否寫到磁盤了;因此commit nowait和默認的wait值相比可以改善應用或事務的響應時間。

除此之外還註意:

1 配置單次1MB 的I/O寫滿寫入請求,詳細在見Best practices for creating a low Cost Storage Grid for oracle Databases;

2 standby redlog在快速磁盤上;

3 不要一組多個standby redolog,如果多個的話,會增加額外的寫請求;


網絡最佳實踐

說明:以下所有設置針對Linux,其他平臺設置自行參考

1 主備之間的帶寬一定要足夠

2 配置RECV_BUF_SIZE,SEND_BUF_SIZE等於3倍的BDP(bandwidth delay product,傳播時延*網絡帶寬),這個可以增加網絡的帶寬流量;

譯者註:

RECV_BUF_SIZE:在TCP/IP/SSL協議裏,以字節方式指定會話的接受緩沖區

配置:sqlnet.ora

net_service_name= 
 (DESCRIPTION= 
   (ADDRESS_LIST=
     (ADDRESS=(PROTOCOL=tcp)(HOST=sales1-server)(PORT=1521)
        (RECV_BUF_SIZE=11784))
     (ADDRESS=(PROTOCOL=tcp)(HOST=sales2-server)(PORT=1521)
        (RECV_BUF_SIZE=11784))
   (CONNECT_DATA=
     (SERVICE_NAME=sales.us.example.com)))

SEND_BUF_SIZE類似;

參考:http://docs.oracle.com/cd/E11882_01/network.112/e10835/tnsnames.htm#NETRF274

3 配置SDU(Session data unit)=32767

4 增加網絡設備的隊列大小。如linux增加TXQUEUELENGTH,NET_DEV_MAX_BACKLOG

TXQUEUELENGTH在linux用ifconfig配置網卡時可配:ifconfig eth1 TXQUEUELENGTH 5000,

啟動時就設置

vi /etc/rc.local
/sbin/ifconfig eth0 txqueuelen 5000

NET_DEV_MAX_BACKLOG屬於內核參數,

vi /etc/sysctl.conf
net.core.netdev_max_backlog = 32768

5 配置orcle Net TCP_NODELAY=yes

oracle SDU(session data unit)大小說明

通過網絡傳送數據時,oracle的網絡組件會緩沖SDU。當大量的或者連續的數據需要傳送時,增加SDU緩沖區可以提高網絡的利用率。

SDU的配置

vi sqlnet.ora
default_sdu_size=32767
在配置tnsnames.ora也可以:
sales.us.acme.com= 
(DESCRIPTION=  
    (SDU=32767)  
      (ADDRESS=(PROTOCOL=tcp) 
      (HOST=sales-server) 
      (PORT=1521)) 
    (CONNECT_DATA= 
     (SID=sales.us.acme.com)) 
)

配置listener.ora

SID_LIST_listener_name= 
 (SID_LIST=  
   (SID_DESC= 
    (SDU=32767) 
    (GLOBAL_DBNAME=sales.us.acme.com) 
    (SID_NAME=sales) 
    (ORACLE_HOME=/usr/oracle)))

TCP套接字緩沖區大小

TCP套接字區緩沖區控制網絡帶寬的可用量,其並不考慮網絡中可使用的實際帶寬。當網絡延遲比較高時,較大的套接字緩沖區可更有效的利用網絡帶寬;

BDP大小測算:

BDP= 1,000 Mbps * 25msec (.025 sec)

1,000,000,000 * .025

25,000,000 Megabits / 8 = 3,125,000 bytes

套接字區緩沖區=3*BDP

socket buffer size = 3 * bandwidth * delay

= 3,125,000 * 3

= 9,375,000 bytes

套接字區緩沖區由應用程序控制,這裏是oracle 的網絡服務控制;編輯sqlnet.ora

RECV_BUF_SIZE=9375000

SEND_BUF_SIZE=9375000

或者配置服務名:

vi tnsnames.ora
standby = 
 (DESCRIPTION=  
   (SEND_BUF_SIZE=9375000) 
   (RECV_BUF_SIZE=9375000) 
     (ADDRESS=(PROTOCOL=tcp) 
     (HOST=hr1-server)(PORT=1521)) 
   (CONNECT_DATA= 
     (SERVICE_NAME=standby)))

配置監聽文件listener.ora

 LISTENER= 
  (DESCRIPTION= 
    (ADDRESS=(PROTOCOL=tcp) 
    (HOST=sales-server)(PORT=1521
    (SEND_BUF_SIZE=9375000) 
    (RECV_BUF_SIZE=9375000)))

未完......



本文出自 “snowhill” 博客,轉載請與作者聯系!

oracle dataguard網絡最佳實踐一