--根據primary database redo產生的速率,計算傳輸redo需要的帶寬.
除去tcp/ip網絡其余30%的開銷,計算需要的帶寬公式:
需求帶寬=((每秒產生redo的速率峰值/0.75)*8)/1,000,000=帶寬(Mbps)
--可以通過去多次業務高峰期的Statspack/AWR獲取每秒產生redo的速率峰值,也可以通過查詢視圖:
SQL> select * from v$sysmetric_history where metric_name = 'Redo Generated Per Sec';
oracle 11.1.0.6以上版本,可以采用MOS提供的oratcptest工具測量網絡能力.10g版本可采用可靠的第三方軟件計算實際的帶寬.
oracle 11.1.0.6以上版本,可以采用MOS提供的oratcptest工具測量網絡能力.10g版本可采用可靠的第三方軟件計算實際的帶寬.
oracle 11.1.0.6以上版本,可以采用MOS提供的oratcptest工具測量網絡能力.10g版本可采用可靠的第三方軟件計算實際的帶寬.
--參考MOS文檔:
Note:2064368.1 - ?Measuring Network Capacity using oratcptest
然后通過與傳輸redo需求的帶寬值作比較,如果帶寬不足,則需要擴容.
--Redo壓縮傳輸
Oracle Data Guard從11g開始,增加了redo壓縮傳輸的特性,redo壓縮傳輸是Oracle高級壓縮選項的一個特性,需要額外的license支持.在Oracle11g之前的版本中,壓縮傳輸redo可以通過第三方的WAN加速器實現,如Cisco,Riverbed,F5等
--redo壓縮傳輸,有以下的益處:
-減少redo傳輸延遲
-減少網絡利用率
-提供更快的redo gap解決方案
-減少redo傳輸時間
--redo壓縮最大的益處是低網絡帶寬環境archeving recovery point ojectives(PRO),適用場景:
- primary redo產生的速率大于可用的網絡帶寬
- 執行壓縮需要足夠的CPU資源
在高網絡帶寬環境中,可能由于壓縮傳輸redo,CPU消耗將增加.如,gap解決測試顯示,在OC1(51.8Mbits/sec)和T3(44.7Mits/sec)網絡環境中,50%的CPU消耗在ARCH進程壓縮操作上,而在100Mbits的網絡環境中,每個ARCH進程均消耗全部的CPU.
在高于100Mbits的網絡中,不建議使用redo壓縮.如果需要優先采用PRO減少網絡使用率,則一定要評估測試.
從oracle11.2開始,設置log_archive_dest_n參數的compression=enable屬性啟用redo壓縮傳輸,包括sync,async,arch傳輸模式,gap解決,所有的dg保護模式均會采用壓縮.
Oracle11.1中,設定log_archive_dest_n參數的compression屬性,僅適用于解決gap時的redo壓縮傳輸,設定隱含參數(_redo_transport_compress_all)啟用最大性能模式下的async和arch傳輸模式的redo壓縮傳輸.
--啟用redo壓縮傳輸:
Oracle11.1:
alter system set "_redo_transport_compress_all"=true scope=spfile sid='*';
log_archive_dest_2='service=standby async compression=enable ...'
Oracle 11.2:
log_archive_dest_2='service=standby async compression=enable ...'
--計算redo壓縮率:
redo壓縮類似于gzip -1.手工壓縮歸檔日志,通過gzip --list命令查看壓縮率.
gzip工具使用1.3.3之后版本.
gzip -1 <archivelog>.arc
gzip --list <archivelog.arc>.gz
--壞塊保護與性能影響
具體需要設定什么級別的壞塊保護,需要在測試環境進行詳細的測試,根據需求設定.
DB_BLOCK_CHECKSUM
參數決定DBWn和直接加載在寫磁盤時根據存儲在快中的所有字節計算一個checksum并存儲到每個數據塊和redo log 的cache層頭部.Checksum用來校驗塊是否是底層disk,存儲系統或I/O子系統引起的物理損壞.當DB_BLOCK_CHECKSUM=FULL時,如果checksum校驗失敗,Oracle從磁盤(或其他實例)讀該塊時將應用需要的redo嘗試對它進行修復.如果塊損壞,將拋出ORA-600,ORA-01578錯誤并記錄到數據庫或ASM的alert log中.
Checksum不校驗塊內容的邏輯一致性.Checksum校驗發生在內存中當一個進程讀取數據或redo塊到SGA/PGA時,在寫更新的、新的數據或redo塊前,計算一個新的checksum.
DB_BLOCK_CHECKSUM潛在的客戶端包括:所有的foregrounds,DBWR,LGWR,LNS,RFS,ARCH,MRP和recovery slaves.
--參數設定:
- OFF/FALSE:當設置為OFF時,DBWn僅對SYSTEM表空間計算checksums,不對用戶表空間計算checksum,也不會記錄checksum.
- TYPICAL/TRUE:默認值,讀塊時計算checksum并和塊頭存儲之進行比較,塊被讀入內存修改后,checksum=0,在修改結束后,DBWn計算一個新的checksum并存儲到塊頭,然后寫緩存到磁盤中.
- FULL:TYPICAL增強,Oracle在update/delete語句執行前校驗checksum,在LGWR執行剩余的工作時重新計算一個新值.在Oracle11g之前,LGWR僅執行log block checksum,在寫磁盤前校驗每一個前臺進程產生的log塊.
- 最佳實踐中,在primary和standby中設置DB_BLOCK_CHECKSUM=ALL,需要4%--5%的系統開銷;OLTP中設定為TYPICAL需要1%--2%的額外開銷,對Redo Apply性能影響最小,但也帶來更少的塊保護.測試顯示在primary設置DB_BLOCK_CHECKSUM=FULL會帶來不可接受的性能影響,考慮性能與保護,在primary設定DB_BLOCK_CHECKSUM=TYPICAL,在standby設置DB_BLOCK_CHECKSUM=FULL(在主備角色轉換后,設定也會改變)
--db_block_checking
參數指定Oracle是否對塊執行logical intra-block檢查(內存中語義檢查).檢查塊內容,包括塊頭和用戶數據,預防在內存中發生損壞的改變塊寫入磁盤.通過塊上的數據做塊的完整性邏輯校驗,確保塊自身的一致性.當DB_BLOCK_CHECKING=MEDIUM/FULL時,在內存中檢測到壞塊時將會通過讀取磁盤上好的塊副本或者應用需要的redo自動修復壞塊.如果壞塊不能修復,將拋出ORA-600/ORA-01578并阻止寫數據塊.
--參數設定:
- OFF/FALSE:默認值,僅對SYSTEM表空間塊做語義檢查,對用戶表空間不做塊檢查.
- LOW:塊內容在內存中被修改后(如UPDATE/INSERT,on-disk讀,RAC inter-instance塊轉移),做基本的塊頭檢查.LOW級別不執行任何數據層的檢查,對保護塊損壞檢查作用有限.
- MEDIUM:除索引外的所有對象做LOW級別的檢查和全部的語義檢查,索引可以通過重建減少索引塊損壞.
- FULL/TRUE:對所有對象做LOW和MEDIUM級別的檢查和語義檢查,包括索引.
Oracle建議在primary和standby均設定DB_BLOCK_CHECKING=FULL.需要測試能否接受FULL級別帶來的性能影響,如果不能,設定DB_BLOCK_CHECKING=MEDIUM.系統需要在每次塊改變花費額外的開銷,一般需要1%--10%的額外開銷,在UPDATE和INSERT頻繁的應用場景中(如Standby Redo Apply)開銷更大.OLTP中的頻繁的更新壓縮表也需要額外的開銷.
基于對性能和數據保護的考慮,可以在primary設定DB_BLOCK_CHECKING=MEDIUM,當primary設定此參數后,primary引入塊首尾校驗,在standby端便沒有必要設定DB_BLOCK_CHECKING來檢測primary數據庫的訛誤,但Oracle仍然建議啟用該參數,原因:
·確保standby轉換為primary角色后有正確的設定.
·啟用參數開啟standby不依賴于primary的再次邏輯損壞校驗
DB_LOST_WRITE_PROTECT
檢測丟失寫,丟失寫發生在I/O子系統確認塊寫的完整性或舊的塊版本的覆蓋寫時,發現丟失寫時,寫操作不會持續到存儲.
--參數設定:
- NONE:默認值,不啟用丟失寫保護.
- TYPICAL:Primary端設定DB_LOST_WRITE_PROTECT=TYPICAL時,在執行介質恢復時讀取redo log中的read-write表空間到log buffer cache,檢測寫丟失.在物理standby中設定DB_LOST_WRITE_PROTECT=TYPIAL,DG的MRP進程將會持續檢查出現在primary數據庫read-write表空間的丟失寫,檢測到丟失寫時,將立即阻止應用損壞的redo log塊,也做不依賴于primary的丟失寫保護檢測.
-FULL:TYPICAL增強,對read-write,read-only表空間均啟用丟失寫保護檢測.
當DG MRP進程檢測到primary的丟失寫損壞,MRP進程將會停止,standby跑出ORA-752錯誤.DG物理standby檢測到其他類型的損壞時也會停止redo應用,跑出ORA-600[3020]錯誤.更多關于物理standby ORA-752和ORA-600[3020]錯誤及修復參考MOS文檔1265884.1.
啟用DB_LOST_WRITE_PROTECT參數將帶來額外的開銷,在更新頻繁的環境中,redo增加,standby應用redo時,需要額外的IO開銷檢測寫丟失.在大多數的場景中,寫保護帶來的影響可以忽略,最好的方法就是在生產環境啟用該參數時先經過測試環境的測試.
11.2.0.4開始,DG Broker配置丟失寫保護允許用戶選擇primary繼續或者關閉.
--db_ultra_safe
11.2新增參數.
參數設定:
- OFF: 不影響DB_BLOCK_CHECKING, DB_BLOCK_CHECKSUM, DB_LOST_WRITE_PROTECT參數單獨的設定.
- DATA_ONLY:將做以下設定:
DB_BLOCK_CHECKSUM=FULL
DB_BLOCK_CHECKING=MEDIUM
DB_LOST_WRITE_PROTECT=TYPICAL
- DATA_AND_INDEX:將做以下設定:
DB_BLOCK_CHECKSUM=FULL
DB_BLOCK_CHECKING=FULL
DB_LOST_WRITE_PROTECT=TYPICAL
根據DG壞塊保護章節Oracle建議的設定,也可僅設定DB_ULTRA_SAFE參數.
等待事件
ARCH屬性等待事件
ARCH wait on ATTACH
監控ARCH進程生成RFS連接花費的總時間
ARCH wait on SENDREQ
監控遠程已接收到的redo被ARCH進程從打開到關閉磁盤寫花費的總時間
ARCH wait on DETACH
監控ARCH進程刪除RFS連接花費的總時間
LGWR SYNC屬性等待事件
LGWR wait on ATTACH
監控LGWR進程生成RFS連接花費的總時間
LGWR wait on SENDREQ
監控遠程已接收到的redo被LGWR進程從打開到關閉磁盤寫花費的總時間
LGWR wait on DETACH
監控LGWR進程刪除RFS連接花費的總時間
LGWR ASYNC屬性等待事件
LNS wait on ATTACH
監控LNS進程生成RFS連接花費的總時間
LNS wait on SENDREQ
監控遠程已接收到的redo被LNS進程從打開到關閉磁盤寫花費的總時間
LNS wait on DETACH
監控LNS進程刪除RFS連接花費的總
LGWR wait on full LNS buffer
監控LGWR進程等待LNS釋放ASYNC buffer空間花費的總時間.如果buffer空間在合理的時間內沒有被釋放,最高可用primary將不允許ARCn進程傳輸redo log data.等待事件與LGWR SYNC=PARALLEL屬性無關.
LGWR ASYNC/LGWR SYNC=PARALLEL屬性等待事件
LGWR wait on LNS
監控LGWR進程等待接受network server KSR通道信息花費的總時間.
LNS wait on LGWR
監控network server等待接受LGWR進程KSR通道信息花費的總時間.
LGWR-LNS wait on channel
監控LGWR進程或者network server 進程等待接受KSR通道信息花費的總時間.
ACTIVE DATA GUATD使用STATSPACK
從Oracle11.1開始,使用Active Data Guard,在主庫可以使用statspack收集處于read-only和恢復中的standby database性能數據.
--使用STATSPACK
1.安裝Statspack
在安裝standby statspack之前,perfstat schema和statspack相關對象必須存在于primary和standby.如果沒有,則在primary執行以下腳本創建perfstat schema:
SQL> conn /as sysdba
SQL> @?/rdbms/admin/spcreate.sql
Choose the PERFSTAT user''s password
-----------------------------------
Not specifying a password will result in the installation FAILING
Enter value for perfstat_password: oracle ?<====輸入密碼
oracle
Choose the Default tablespace for the PERFSTAT user
---------------------------------------------------
Below is the list of online tablespaces in this database which can
store user data. ?Specifying the SYSTEM tablespace for the user's
default tablespace will result in the installation FAILING, as
using SYSTEM for performance data is not supported.
Choose the PERFSTAT users's default tablespace.This is the tablespace
in which the STATSPACK tables and indexes will be created.
TABLESPACE_NAME ? ? ? ? ? ? ? ?CONTENTS ?STATSPACK DEFAULT TABLESPACE
------------------------------ --------- ----------------------------
SYSAUX ? ? ? ? ? ? ? ? ? ? ? ? PERMANENT *
USERS ? ? ? ? ? ? ? ? ? ? ? ? ?PERMANENT
Pressing will result in STATSPACK''s recommended default
tablespace (identified by *) being used.
Enter value for default_tablespace: ? <====使用SYSAUX作為perfstat的默認表空間
Using tablespace SYSAUX as PERFSTAT default tablespace.
Choose the Temporary tablespace for the PERFSTAT user
-----------------------------------------------------
Below is the list of online tablespaces in this database which can
store temporary data (e.g. for sort workareas).Specifying the SYSTEM
tablespace for the user's temporary tablespace will result in the
installation FAILING, as using SYSTEM for workareas is not supported.
Choose the PERFSTAT user's Temporary tablespace.
TABLESPACE_NAME ? ? ? ? ? ? ? ?CONTENTS ?DB DEFAULT TEMP TABLESPACE
------------------------------ --------- --------------------------
TEMP ? ? ? ? ? ? ? ? ? ? ? ? ? TEMPORARY *
Pressing will result in the database''s default Temporary
tablespace (identified by *) being used.
Enter value for temporary_tablespace: ? <====使用TEMP作為perfstat的臨時表空間
Using tablespace TEMP as PERFSTAT temporary tablespace.
... Creating PERFSTAT user
... Installing required packages
... Creating views
... Granting privileges
NOTE:
SPCUSR complete. Please check spcusr.lis for any errors.
SQL>
SQL> --
SQL> -- ?Build the tables and synonyms
SQL> connect perfstat/&&perfstat_password
Connected.
SQL> @@spctab ?<====調用spctab腳本創建一系列表和同義詞
...
NOTE:
SPCTAB complete. Please check spctab.lis for any errors.
SQL> -- ?Create the statistics Package
SQL> @@spcpkg ?<====調用spcpkg腳本創建統計包
...
NOTE:
SPCPKG complete. Please check spcpkg.lis for any errors.
在primary執行sbcreate.sql腳本創建standby statspack schema用來保留standby snapshots,創建stdbyperf用戶,調用sbaddins.sql添加第一個standby實例到配置中:
SQL> conn /as sysdba
SQL> @?/rdbms/admin/sbcreate.sql
...
SQL> -- ?Create user and required privileges
SQL> @@sbcusr ?<====調用sbuser腳本創建用戶并賦予權限
Choose the STDBYPERF user''s password
-----------------------------------
Not specifying a password will result in the installation FAILING
Enter value for stdbyuser_password: oracle ?<====輸入stdbyuser用戶密碼
oracle
Choose the Default tablespace for the STDBYPERF user
---------------------------------------------------
Below is the list of online tablespaces in this database which can
store user data. ?Specifying the SYSTEM tablespace for the user''s
default tablespace will result in the installation FAILING, as
using SYSTEM for performance data is not supported.
Choose the STDBYPERF users''s default tablespace.This is the tablespace
in which the STATSPACK tables and indexes will be created.
TABLESPACE_NAME ? ? ? ? ? ? ? ?CONTENTS ?STATSPACK DEFAULT TABLESPACE
------------------------------ --------- ----------------------------
SYSAUX ? ? ? ? ? ? ? ? ? ? ? ? PERMANENT *
USERS ? ? ? ? ? ? ? ? ? ? ? ? ?PERMANENT
Pressing will result in STATSPACK''s recommended default
tablespace (identified by *) being used.
Enter value for default_tablespace: ? <====使用SYSAUX作為stdbyuser的默認表空間
Using tablespace SYSAUX as STDBYPERF default tablespace.
Choose the Temporary tablespace for the STDBYPERF user
-----------------------------------------------------
Below is the list of online tablespaces in this database which can
store temporary data (e.g. for sort workareas). ?Specifying the SYSTEM
tablespace for the user''s temporary tablespace will result in the
installation FAILING, as using SYSTEM for workareas is not supported.
Choose the STDBYPERF user''s Temporary tablespace.
TABLESPACE_NAME ? ? ? ? ? ? ? ?CONTENTS ?DB DEFAULT TEMP TABLESPACE
------------------------------ --------- --------------------------
TEMP ? ? ? ? ? ? ? ? ? ? ? ? ? TEMPORARY *
Pressing will result in the database''s default Temporary
tablespace (identified by *) being used.
Enter value for temporary_tablespace: ? <====使用TEMP作為stdbyuser的默認表空間
Using tablespace TEMP as STDBYPERF temporary tablespace.
... Creating STDBYPERF user
... Installing required packages
... Granting privileges
NOTE:
SBCUSR complete. Please check sbcusr.lis for any errors.
SQL>
SQL> connect stdbyperf/&&stdbyuser_password
Connected.
SQL>
SQL> --
SQL> -- ?Build the tables
SQL> @@sbctab ? ? ?<====調用sbctab腳本創建一些列的表
...
NOTE:
SBCTAB complete. Please check sbctab.lis for any errors.
SQL> -- ?Add a standby database instance to the configuration
SQL> @@sbaddins ?<====調用sbaddins腳本添加第一個實例到配置中
...
THE INSTANCE YOU ARE GOING TO ADD MUST BE ACCESSIBLE AND OPEN READ ONLY
Do you want to continue (y/n) ?
Enter value for key: y ?<====輸入y開始添加
You entered: y
Enter the TNS ALIAS that connects to the standby database instance
-----------------------------------------------------------------
Make sure the alias connects to only one instance (without load balancing).
Enter value for tns_alias: STANDBY ? <====輸入一個standby database的TNS-Alias
You entered: STANDBY
Enter the PERFSTAT user''s password of the standby database
---------------------------------------------------------
Performance data will be fetched from the standby database via
database link. We will connect to user PERFSTAT.
Enter value for perfstat_password: oracle ?<====輸入perfstat用戶密碼
You entered: oracle
... Creating database link
... Selecting database unique name
Database
------------------------------
standby
... Selecting instance name
Instance
------------
standby
... Creating package
Creating Package STATSPACK_standby_standby.. ?<====創建STATSPACK_standby_standby包
No errors.
Creating Package Body STATSPACK_standby_standby..
No errors.
NOTE:
SBCPKG complete. Please check sbcpkg.lis for any errors.
2.添加實例到Statspack配置中
用stdbyperf用戶登陸primary 數據庫并執行sbaddins.sql添加standby 實例到statspack配置中.
SQL> conn stdbyperf/oracle
SQL> @?/rdbms/admin/sbaddins.sql
過程類似于第一步調用sbaddins.sql.
3.收集standby實例的性能數據
用stdbyperf用戶登錄primary數據庫創建snapshot并收集standby性能數據.
SQL> conn stdbyperf/oracle
SQL> exec statspack_standby_standby.snap;
4.生成standby統計報告
SQL> @?/rdbms/admin/sbreport.sql
5.清除standby snapshot集
SQL> @?/rdbms/admin/sbpurge.sql
6.從statspack配置中刪除standby實例
SQL> @?/rdbms/admin/sbdelins.sql
7.刪除Statspack Schema
SQL> conn /as sysdba
SQL> @?/rdbms/admin/sbdrop.sql
--standby statspack相關腳本簡短說明
--以下腳本位于$ORACLE_HOME/rdbms/admin目錄下:
sbcreate.sql : 安裝standby statspack
sbcuser.sql : 被sbcreate.sql調用創建schema
sbctab.sql : 被sbcreate.sql調用創建保留snapshots的表
sbaddins.sql : 被sbcreate.sql調用添加standby實例到statspack配置中或直接執行用來添加standby實例到statspack配置中
sbcpkg.sql : 被sbaddins.sql調用創建實例指定的statspack包
sblisins.sql : 列出statspack配置中的standby實例
sbreport.sql : 創建standby統計報告
sbrepcon.sql : 被sbreport.sql調用獲得報告配置
sbrepins.sql : 被sbreport.sql調用創建真實的報告
sbpurge.sql : 清除指定ID范圍的snapshot集
sbdelins.sql : 從statspack配置中刪除standby實例
?