第五章


第五章 自动性能数据收集
数据收集
自动负载报告
管理自动负载报告

一.数据收集
oracle为系统、会话、单个的sql语句都生成了很多累积数据,以便有效地进行性能问题的诊断。oracle还手机了段、服务器的累积数据。
在awr报告中调用的数据就是一段时间内的这些统计数据。
通过v$sesstat和v$sysstat视图可以获取部分统计数据。当数据库重启时,这些数据会重新收集。

metric是另外一种统计数据。含义是一些累积数据的变化率。以时间、会话、数据库调用等作为单位。

还有一种是样本数据。active session history(ASH)样本是当前会话的状态,作为sampling。

解决性能问题的一个非常有效的方法就是将当前收集的数据与基准的统计数据进行对比。
两者的不同作为引起问题的原因或结果。
对于基准的周期需要认真选择,以便充分代表系统的负载情况。


1.数据库的统计数据
等待事件
Wait events are statistics that are incremented by a server process or thread to indicate that it had to wait for an event to complete before being able to continue

processing.
等待事件分为以下类型:
Administrative, Application, Cluster, Commit, Concurrency, Configuration, Idle, Network, Other, Scheduler, System I/O, and User I/O.
等待的类型一般提示了解决的方法,如 TX锁一般是应用层面的问题,而HW锁一般是配置问题。
application:由于行级锁或排它锁导致的锁等待
commit:提交后等待重做日志写完成
idle:由于会话是非活跃状态而等待。例如sql*net message from client
network:等待数据通过网络传输
user i/o:等待块被读入磁盘

v$system_event视图中包含了前台活动实例的等待事件统计数据及实例中所有的等待时间统计数据
v$system_wait_class视图中是这些前台的和等待事件实例按等待类型的统计数据。
v$session_event和v$session_wait_class中是会话级的等待事件和等待类型统计数据

2.时间方面的统计数据
调优数据库时,为了对所有的数据有一个统一的统计标准,一般选择时间作为依据。
v$sess_time_model和v$sys_time_model中提供了基于时间的统计数据。

最重要的时间模型统计数据时db time。代表了花费在数据库调用上的时间,不包括在idle等待事件上的时间。
db time可以超过实例启动后的实际运行时间,如:实例运行了三十分钟,有四个活动会话,db time 是120分钟。

数据库调优的一个方向是减少db time。

活动会话历史
v$active_session_history提供了实例中采集到的活动会话信息历史。
活动会话每秒采集并在sga中循环存储。连接到数据库、以非idle类型等待其他事件的会话被认为是活动的会话。

3.操作系统的统计数据
操作系统统计数据提供了主要硬件组件的性能情况及系统本身的性能。对于检测潜在的资源争用(如cpu周期、内存以及磁盘等外部设备的性能问题)非常重要。
操作系统的统计数据包括cpu、虚拟内存、磁盘i/o、网络

(1)CPU
在一个只运行oracle数据库的系统中,在user space上运行数据库活动。对数据库的请求在kernel模式下运行。
在正常运行的系统中,若CPU充分利用,oracle占到user space的65%至95%。
v$osstat视图存储了服务器层面的数据库信息,帮助我们确定硬件层面的资源是否有问题。
v$sysmetric_history中是前一个小时内主机的CPU使用情况。
通过以上两个视图都可以确定是数据库还是其他系统活动造成了cpu问题

(2)virtual memory statistic
虚拟内存主要需要确认是否有很少的paging、swapping活动。
当发生不可预知的pagging和swapping时,系统性能迅速下降。

(3)磁盘i/o
由于数据库安装在磁盘上,磁盘的性能决定了数据库的性能。通常有很多参数来统计磁盘性能,主要是current response time和磁盘队列的长度。
一般来说一个数据块的读花费时间在5~20毫秒,由硬件决定。如果超过这个时间,就是瓶颈了。

磁盘还提供了多块同时写的功能。对于单块或多块的读和写操作,有如下的维度:

v$iostat_consumer_group视图提供了所有consumer groups的i/o数据。
v$iostat_file提供各个数据库文件为维度的i/o统计信息
v$iostat_function提供对各个数据库函数的i/o统计信息

(4)网络数据
当前环境下,网络占了实际用户响应时间的很大一部分。
在v$iostat_network中存储了一系列网络i/o统计数据

常用的操作系统查看命令(LINUX)
CPU:sar, vmstat, mpstat, iostat
Memory:sar, vmstat
Disk:sar, iostat
Network:netstat

4.统计数据解析
刚开始调优时,可以通过统计数据来验证自己的调优思路。
由于前台活动也能调优,可以在分析后台活动前,先对前台活动进行调整

命中率可以帮助确认问题的所在。不要将命中率作为性能瓶颈存在的依据,而是作为一个提示,来找到证据。

将实例的timed_statistics设置为true,能为事件收集等待事件。对于等待事件,需要与统计周期相比较才有意义。如 两个小时的统计周期内,等待事件为30s,可以忽略。而如果45分钟的

周期内,等待事件花费了30分钟,就非常差了。

还需要将数据库的统计信息与其他数据比较。如 45分钟内等待事件为30分钟,如果你发现是对于一个64节点的服务器、有2000个用户在使用,也是没问题的。


二、自动负载报告AWR
收集的数据存储在内存和数据库中,在报告或视图中都可以看到。
收集的数据包括:
■Object statistics that determine both access and usage statistics of database segments
■Time model statistics based on time usage for activities, displayed in the V$SYS_TIME_MODEL and V$SESS_TIME_MODEL views
■Some of the system and session statistics collected in the V$SYSSTAT and V$SESSTAT views
■SQL statements that are producing the highest load on the system, based on criteria such as elapsed time and CPU time
■ASH statistics, representing the history of recent sessions activity


aw默认开启,由参数statistics_level控制。设置为typical或all都将通过awr收集统计数据。默认是typical
设置为basic将禁用许多oracle特性,包括awr,不推荐这种做法。但仍可以通过dbms_workload_repository包提取awr数据。

快照
在一段时间内产生的,用于在addm中进行性能比较的数据。
默认每小时一个快照,保留八天的负载数据。可以手工调整,但一般没必要。

基准(baselines)
包括了一段时间内的性能数据。有三种基准:
(1)fixed baselines
人为创建的
(2)moving window baseline
系统给出的,周期是retention的值,如果为了精确,需要将周期延长,可以改变retention的值
(3) baseline templates
基准模板,在预先知道需要多长时间来统计的情况下使用此方法。一般用于测试。当测试执行时,系统去计算时间周期。


调整极限(adaptive thresholds)


空间花费
awr消耗的空间有以下因素决定:
给定时间内系统中活动会话的数量
快照生成频率
历史数据保存周期

对于一个活动会话数为10的系统,每小时生成快照,保存8天,则awr报告占用200~300MB。
如果通过增加awr产生的频率来节约空间,需要注意,ADDM、sql tuning advisor、undo advisor、segment advisor都会受其影响而变化。
如果将快照生成频率设为0,负载不会自动收集,手工也不能收集。

三、自动负载报告的管理
1.快照管理
主要用企业管理器管理,不可用时使用如下方法

创建:dbms_workload_repository.create_snapshot();
创建后可以在dba_hist_snapshot视图中看到
删除:dbms_workload_repository.drop_snapshot_range(low_snap_id,high_snap_id,dbid);
以上语句放入匿名块中执行或前面加exec

interval设置影响着生成频率
retention设置影响着保存时间
topnsql设置影响top sql的数量
dbms_workload_repository.modify_snapshot_Settings(retention,interval,topnsql,dbid);

通过dba_hist_wr_control视图可以看到当前的这四个参数。

实验发现,将topnsql设置为10或者更小是不行的,设置为30可以。貌似不能小于30

2.基准管理
主要工具是企业管理器。

创建:
(1)在dba_hist_Snapshot中查看已有快照
(2)dbms_workload_repository.create_Baseline(start_snap_id,end_snap_id,baseline_name,dbid,expiration);
其中expiration指定多长时间(天数)后该基准快照被删除。
可以在dba_hist_baseline中查到。


=========
SQL> exec dbms_workload_repository.create_baseline(148,159,'testbaseline');

PL/SQL procedure successfully completed

SQL> select * from dba_hist_baseline;

      DBID BASELINE_ID BASELINE_NAME                                                    BASELINE_TYPE START_SNAP_ID START_SNAP_TIME                                  

END_SNAP_ID END_SNAP_TIME                                     MOVING_WINDOW_SIZE CREATION_TIME EXPIRATION TEMPLATE_NAME                                                

   LAST_TIME_COMPUTED
---------- ----------- ---------------------------------------------------------------- ------------- ------------- -------------------------------------------------

----------- ------------------------------------------------- ------------------ ------------- ---------- ------------------------------------------------------------

---- ------------------
2581100181           1 testbaseline                                                     STATIC                  148 05-12? -12 11.42.01.924 ??                      

      159 05-12? -12 11.00.12.663 ??                                        2012-12-6 0:3                                                                           

 
2581100181           0 SYSTEM_MOVING_WINDOW                                             MOVING_WINDOW           148 05-12? -12 11.42.01.924 ??                      

      161 06-12? -12 12.30.21.888 ??                                      8 2012-10-27 11                                                                           

 
==========

基准重命名
从dba_hist_baseline中找到需要改名的基准
执行dbms_workload_repository.rename_baseline(old_baseline_name,new_baseline_name,dbid);


查看基准的metrics
从dba_hist_baseline中找到基准
dbms_workload_repository.select_Baseline_metrics(baseline_name,dbid,instance_num);
(该条语句测试未通过)

默认moving window baseline的修改
BEGIN
DBMS_WORKLOAD_REPOSITORY.MODIFY_BASELINE_WINDOW_SIZE (
window_size => 30,
dbid => 3310949047);
END;
/
window_size需要小于或等于retention。


3.基准模板baseline templates的管理
(1)Creating a Single Baseline Template
BEGIN
DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE_TEMPLATE (
start_time => '2009-04-02 17:00:00 PST',
end_time => '2009-04-02 20:00:00 PST',
baseline_name => 'baseline_090402',
template_name => 'template_090402', expiration => 30,
dbid => 3310949047);
END;
/

(2)Creating a Repeating Baseline Template
BEGIN
DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE_TEMPLATE (
day_of_week => 'monday', hour_in_day => 17,
duration => 3, expiration => 30,
start_time => '2009-04-02 17:00:00 PST',
end_time => '2009-12-31 20:00:00 PST',
baseline_name_prefix => 'baseline_2009_mondays_',
template_name => 'template_2009_mondays',
dbid => 3310949047);
END;
/
在有规律的时间创建基准模板。例子中是每周一下午5~8点

删除基准模板
BEGIN
DBMS_WORKLOAD_REPOSITORY.DROP_BASELINE_TEMPLATE (
template_name => 'template_2009_mondays',
dbid => 3310949047);
END;
/

4.自动负载报告转化
oracle允许将awr数据转化到其他系统中。主要用于在其他系统中分析awr数据。
以下是方法
(1)抽取awr数据
awrextr.sql可以将awr数据抽取成为pump文件。然后将其放到其他数据库中
步骤可以概括为:
@$ORACLE_HOME/rdbms/admin/awrextr.sql
Enter value for db_id:
Enter value for num_days:
Enter value for begin_snap:
Enter value for end_snap:
Enter value for directory_name:
Enter value for file_name:

(2)加载awr数据
将awr数据淡出后,可以通过awrload.sql加载到目标数据库
@$ORACLE_HOME/rdbms/admin/awrload.sql
Enter value for directory_name: DATA_PUMP_DIR
Enter value for file_name:
Enter value for schema_name:
Enter value for default_tablespace:
Enter value for temporary_tablespace:
完成以上步骤后,将在指定的schema中生成awr数据。在数据加载完成后,数据将被转化到sys用户的awr表中。


5.自动负载报告视图
v$active_session_history
v$metricXXXX视图  按照metric统计
dba_hist
DBA_HIST_BASELINE displays information about the baselines captured on the system, such as the time range of each baseline and the baseline type
■DBA_HIST_BASELINE_DETAILS displays details about a specific baseline
■DBA_HIST_BASELINE_TEMPLATE displays information about the baseline templates used by the system to generate baselines
■DBA_HIST_DATABASE_INSTANCE displays information about the database environment
■DBA_HIST_DB_CACHE_ADVICE displays historical predictions of the number of physical reads for the cache size corresponding to each row
■DBA_HIST_DISPATCHER displays historical information for each dispatcher process at the time of the snapshot
■DBA_HIST_DYN_REMASTER_STATS displays statistical information about the dynamic remastering process
■DBA_HIST_IOSTAT_DETAIL displays historical I/O statistics aggregated by file type and function
■DBA_HIST_SHARED_SERVER_SUMMARY displays historical information for shared servers, such as shared server activity, common queues and dispatcher queues
■DBA_HIST_SNAPSHOT displays information on snapshots in the system
■DBA_HIST_SQL_PLAN displays the SQL execution plans
■DBA_HIST_WR_CONTROL displays the settings for controlling AWR


6.生成awr报告
执行awrrpt.sql

在RAC环境下需要使用awrgrpt.sql脚本,步骤和单实例一样

生成某个实例的awr报告:执行awrrpti.sql

生成RAC环境下某个实例的awr报告:awrgrpti.sql

为某个sql语句生成awr报告:awrsqrpt.sql 需要多输入一个sql_id

为某个数据库实例的某个特定sql生成awr报告:awrsqrpi.sql


7.生成awr周期比较报告
用于生成两个周期awr报告的比较信息。
两个比较周期可以不一样。

(1)生成awr比较报告
awrddrpt.sql

(2)RAC的awr比较报告
awrgdrpt.sql

(3)某个实例的awr比较
awrddrpti.sql

(4)RAC环境下特定实例的awr比较
awrgdrpi.sql


8.活动会话历史报告(ASH)
用途:
分析持续时间很短的性能问题
对不同的维度进行组合分析,如时间、会话、sql_id等

transient performance problems(短时间的性能问题)不会反映在addm中。addm是以db time为依据进行分析的。
在一小时间隔的快照中,2分钟的性能问题就不会出现在addm中,算作transient performance problem

ash报告分为多个块。html报告包含了快速切换的连接。The content of the report contains ASH information used to identify blocker and waiter identities and their associated

transaction identifiers and SQL for a specified duration

(1)生成ash报告
ashrpt.sql  其中输入开始时间时,输入负值,如-10表示十分钟前的。

(2)生成特定实例的ash报告
ashrpti.sql

(3)rac环境的ash报告
ashrpti.sql

9.ash报告使用
top events
包括top user events  /top background events  /top event P1/P2/P3
load profile
top sql
……

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26451536/viewspace-750990/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26451536/viewspace-750990/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值