Oracle自带的网络工具(计算传输redo需要的带宽,使用STATSPACK,计算redo压缩率,db_ultra_safe)

时间:2024-03-04 12:06:39

oracle自带的网络工具


--根据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.4以上版本,可以采用MOS提供的 oratcptest 工具测量网络能力,10g版本可采用可靠的第三方软件计算实际的带宽。
oracle 11.1.0.4以上版本,可以采用MOS提供的 oratcptest 工具测量网络能力,10g版本可采用可靠的第三方软件计算实际的带宽。
oracle 11.1.0.4以上版本,可以采用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压缩传输,有以下的益处:
1).减少redo传输延迟。
2).减少网络利用率。
3).提供更快的redo gap解决方案。
4).减少redo传输时间。

=========================================================================
--redo压缩最大的益处是低网络带宽环境archeving recovery point ojectives(PRO),适用场景:
1).primary redo产生的速率大于可用的网络带宽。
2).执行压缩需要足够的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实例