一。sql性能优化 处理应急紧急性能问题的顺序
1.性能问题调查:
调查用户反馈的性能问题 是吞吐量问题还是响应问题?
询问产生性能问题之前和之后的操作,故障前的日志和故障后的日志、收集统计信息等;
可以用oem oracle enterprise manager performance features 来确认top sql和会话;
使用 automatic tuning features 来诊断和监控性能问题。
2.
检查应用程序所有组件的 资源使用情况,cpu 内存 i/o, network ;
如果是程序本身的问题,就去解决应用的问题,如果是数据库的问题,就集中处理数据库的问题;
3.
确定数据库 是否受到cpu的限制 ? 或者 等待事件;
查看操作系统级别或数据库的会话中 大量消耗cpu的 查看视图 V$SESS_TIME_MODEL;
在数据库级别上执行很多缓冲区的会话 查看检查视图 v$sesstat 和 v$sqlstats
执行计划的更改导致次优sql的执行;
不正确的初始化参数设置;
如果有等待事件引起,要查看v$session_wait ;而v$active_session_history 视图包含了活动会话的历史记录;
第四章:configuring a database for performance
初始化参数的调整,当然这些对性能影响不到,最重大的是processes这个参数,最重要,
参数关注如下:
db_name,db_domain,open_cursors,control_files,db_files;
compatible, db_block_size , sga_target, pga_aggregate_target, processes ,sessions, undo_management, undo_tablespace
关于undo表空间
建议自动管理,即 undo_management=auto;默认是auto
查看视图 v$undostat 视图可以监控和查看undo表空间信息;
redo log file的大小 影响性能;
虽然不影响lgwr的性能,但是影响了dbwr和checkpoint 行为,频繁的检查点会降低数据库的性能;
fast_start_mttr_target 初始化参数也影响检查点的频率,如果 fast_start_mttr_target 参数设置成limit 实例恢复时间,则oracle会在必要时自动尝试检查点,以应对在限制的时间内恢复实例的需求;
默认的fast_start_mttr_target=0
查看最佳的logfile 大小,查看视图 v$instance_recovery ;
也可以通过oracleenterprise manager 的redo log group页的大小建议 ;
建议是 redo logfile 每20分钟切换一次;
V$DISPATCHER: general information about dispatcher processes
■V$DISPATCHER_RATE: dispatcher processing statistics
在调度 增加processes之前,先通过启用oracle 连接池的功能,如果启动连接池就达到效果,就不用修改添加processes了,因为这些参数都是需要重启数据库的;
Enabling connection pooling 参考笔记 oracle 服务端连接池
调度程序进程的总数受限于初始化参数MAX_DISPATCHERS的值。 在添加调度程序进程之前,您可能需要增加此值。
show parameter max_dispatchers
连接管理器进程使用多路复用来建立和维护从多个用户到单个调度员的网络会话。 例如,多个用户进程可以通过来自连接管理器进程的单个连接连接到一个调度器。 会话多路复用是有益的,因为它最大限度地利用了调度程序连接。 多路复用对调度器之间的数据库链路会话进行多路复用也很有用。
Identifying Contention for Shared Servers
识别共享服务器的争用
请求队列中的等待时间逐渐增加表明共享服务器出现争用。 要检查等待时间数据,请使用动态性能视图V $ QUEUE。 该视图包含显示共享服务器请求队列活动的统计信息。 默认情况下,此视图仅对用户SYS和具有SELECT ANY TABLE系统特权(如SYSTEM)的其他用户可用。 表4-3列出了显示请求等待时间和队列中请求数量的列。
表4-3 V $ QUEUE中的等待时间和请求列
列 说明
等待 WAIT 显示队列中所有请求的总等待时间,以百分之一秒为单位
TOTALQ 显示曾经在队列中的请求总数
通过发出以下SQL语句,在应用程序运行时偶尔监视这些统计信息:
SELECT DECODE(TOTALQ, 0, 'No Requests',
WAIT/TOTALQ || ' HUNDREDTHS OF SECONDS') "AVERAGE WAIT TIME PER REQUESTS"
FROM V$QUEUE
WHERE TYPE = 'COMMON';
该查询返回显示以下内容的计算结果:
AVERAGE WAIT TIME PER REQUEST
-----------------------------
.090909 HUNDREDTHS OF SECONDS
从结果中可以看出,在处理之前,请求的平均等待时间为0.09秒。
您还可以通过发出以下查询来确定当前正在运行的共享服务器数量:
SELECT COUNT(*) "Shared Server Processes"
FROM V$SHARED_SERVER
WHERE STATUS != 'QUIT';
如果使用共享服务器检测资源争用情况,请首先通过检查共享池和大型池来确保这不是内存争用问题。 如果性能仍然很差,那么您可能需要创建更多资源来减少共享服务器进程争用。 您可以通过修改可选的服务器进程初始化参数来执行此操作
可以执行语句检查内存使用情况:
--SGA各个池大小
COL name FORMAT a32;
SELECT pool, name, bytes/1024/1024 M
FROM v$sgastat
WHERE pool IS NULL
OR pool != 'shared pool'
OR (pool = 'shared pool' AND
(name IN
('dictionary cache', 'enqueue', 'library
cache', 'parameters', 'processes', 'sessions', 'free memory')))
ORDER BY pool DESC NULLS FIRST, name;
■MAX_DISPATCHERS
■MAX_SHARED_SERVERS
■DISPATCHERS
■SHARED_SERVERS
第五章:Automatic Performance Statistics
1.三种性能信息的统计:
统计的累积值通常通过动态性能视图可用,例如V $ SESSTAT和V $ SYSSTAT视图。 请注意,当数据库实例关闭时,动态视图中的累积值会重置。 自动负载信息库(AWR)会自动保留除会话级别以外的所有级别的大部分统计信息的累积值和增量值。 这个过程在一个固定的时间段重复进行,结果被称为AWR快照。 快照捕获的增量值代表了该时间段内每项统计数据的变化。
性能报告:
1.AWR
2.ADDM
3.ASH
select * from v$sysstat where name like '%user%commit';
反应了从数据库本次启动以来,一共发生了多少次提交;
awr报告就是基于这个动态性能视图的快照,两次快照相减得到次数;
select * from dba_hist_snapshot;
查看快照信息;
SQL>@?/rdbms/admin/awrrpt.sql 单实例收集awr报告;
@$ORACLE_HOME/rdbms/admin/awrgrpt.sql --RAC环境收集awr报告
收集报告
oracle 10g 快照默认保留7天
11g中,快照默认保留8天;
SQL>@?/rdbms/admin/addmrpt.sql 来生成;
addm 就是oracle帮你分析完awr报告的报告;
addmrpt.sql addmrpti.sql addmtmig.sql
差异报告
SQL>@?/rdbms/admin/awrddrpt.sql
metric 度量标准是Oracle数据库收集的另一种统计信息。 度量标准被定义为某些累积统计量的变化率。 该比率可以针对各种单位进行衡量,包括时间,交易或数据库调用。 例如,每秒数字数据库调用是一个度量标准。 度量值在某些V $视图中显示,其中的值是相当小的时间间隔(通常为60秒)内的平均值。 最近的度量标准值的历史可通过V $视图获得,并且一些数据也由AWR快照持久保存。
Oracle收集的第三种统计数据是采样数据。 活动会话历史记录(ASH)采样器执行采样。 ASH对所有活动会话的当前状态进行采样。 数据库将这些数据收集到内存中,您可以通过V $视图访问它。 AWR快照处理也将其写入永久存储。
ASH active session history;
awr类似录像,做什么都记录下来;
ash类似照相,只拍活动的会话,;不占用cpu资源;
ash记录偏向于会话;
用于突发的性能下降的问题诊断使用;
SQL>@?/rdbms/admin/ashrpt.sql
2.
诊断性能问题的强大工具是使用统计基线。 统计基线是系统在峰值负载下运行良好的时间段内通常采用的统计速率的集合。 将一段时间内表现不佳的数据与基线进行比较,有助于发现明显增加并可能成为问题原因的具体统计数据。
AWR支持捕获基线数据,使您能够指定并保留一对或一系列AWR快照作为基准。 仔细考虑你选择的时间段作为基线; 基线应该是系统峰值负载的良好表示。 将来,您可以将这些基准与性能较差期间捕获的快照进行比较。
Oracle Enterprise Manager是推荐的工具,用于查看动态性能视图中的实时数据和AWR历史记录表中的历史数据。 企业管理器也可用于捕获可与AWR数据相关的操作系统和网络统计数据。
这一部分包括数据库的统计信息和操作系统的统计信息;
为了更容易地对等待事件进行高级分析,事件被分组到类中。 这些类包括:管理,应用程序,群集,提交,并发,配置,空闲,网络,其他,调度程序,系统I / O和用户I / O。
include: Administrative, Application, Cluster, Commit, Concurrency, Configuration, Idle, Network, Other, Scheduler, System I/O, and User I/O.
以下列表包括一些类中等待的常见示例:
■应用程序:锁定由行级锁定或显式锁定命令引起的等待
■提交:提交后等待重做日志写入确认
■空闲:等待表示会话处于非活动状态的事件,例如来自客户端的SQL * Net消息
■网络:等待通过网络发送数据
■用户I / O:等待从磁盘读取块
V $ SYSTEM_EVENT视图显示实例的前台活动的等待事件统计信息以及该实例的等待事件统计信息。
V $ SYSTEM_WAIT_CLASS视图在聚合到等待类后显示这些前景和等待事件实例统计信息。
V $ SESSION_EVENT和V $ SESSION_WAIT_CLASS在会话级显示等待事件和等待类统计信息。
在调整Oracle数据库时,每个组件都有自己的一组统计信息。 从整体来看系统,有必要有一个共同的比较尺度。 出于这个原因,大多数Oracle数据库的咨询和报告都会根据时间来描述统计数据。 另外,V $ SESS_TIME_MODEL和V $ SYS_TIME_MODEL视图提供时间模型统计信息。 使用通用时间工具有助于确定数据库操作的量化效应。
V $ SESS_TIME_MODEL和V $ SYS_TIME_MODEL视图提供时间模型统计信息。 使用通用时间工具有助于确定数据库操作的量化效应。
V $ ACTIVE_SESSION_HISTORY视图提供实例中的采样会话活动。 活动会话每秒采样一次,并存储在SGA的循环缓冲区中。 任何连接到数据库并正在等待不属于空闲等待类的事件的会话均被视为活动会话。 这包括采样时CPU上的任何会话。
作为AWR快照的一部分,V $ ACTIVE_SESSION_HISTORY的内容也被刷新到磁盘。 由于在繁重的系统活动期间,此V $视图的内容可能会变得很大,因此只有一部分会话样本被写入磁盘。
通过仅捕获活动会话,可管理的一组数据表示为大小与正在执行的工作直接相关,而不是系统允许的会话数。通过使用ASH,您可以检查并执行V $ ACTIVE_SESSION_HISTORY视图中的当前数据和DBA_HIST_ACTIVE_SESS_HISTORY视图中的历史数据的详细分析,通常可以避免重播工作负载以收集其他性能跟踪信息。 ASH还包含每个捕获的SQL语句的执行计划信息。您可以使用此信息来确定哪些SQL执行部分对SQL运行时间贡献最大。存在于ASH中的数据可以在其捕获的各个维度上汇总,包括以下内容:
■SQL语句的SQL标识符
■用于执行SQL语句的SQL计划的SQL计划标识符和散列值
■SQL执行计划信息
■对象编号,文件编号和块编号
■等待事件标识符和参数
■会话标识符和会话序列号
■模块和操作名称
■会话的客户端标识符
■服务哈希标识
■消费者组标识符
活动会话历史采样也可用于Active Data Guard物理备用实例和Oracle自动存储管理(Oracle ASM)实例。 在这些实例中,当前会话活动将被收集并显示在V $ ACTIVE_SESSION_HISTORY视图中,但不会写入磁盘。
通过V $ SYSSTAT和V $ SESSTAT视图可以在系统和会话级别获得大量累积数据库统计信息。
3.操作系统的统计信息
Operating system statistics include the following:
■CPU Statistics
■Virtual Memory Statistics
■Disk I/O Statistics
■Network Statistics
CPU Statistics
CPU利用率是调优过程中最重要的操作系统统计数据。在多处理器环境中,为整个系统和每个单独的CPU获得CPU利用率。每个CPU的利用率可以检测到单线程和可伸缩性问题。
在运行Oracle数据库的系统上,只有一个应用程序通常运行,系统在用户空间运行数据库活动。 在内核模式下运行数据库请求所需的活动(如调度,同步,I / O,内存管理以及进程/线程创建和拆卸)。 在充分利用CPU的系统中,健康的Oracle数据库在用户空间中的运行率在65%到95%之间。
V $ OSSTAT视图捕获数据库中的机器级信息,使您更容易确定是否存在硬件级资源问题。
V $ SYSMETRIC_HISTORY视图显示“主机CPU利用率”度量标准的一小时历史记录,表示每个一分钟时间间隔内CPU使用率的百分比。
V $ SYS_TIME_MODEL视图提供有关Oracle数据库的CPU使用情况的统计信息。 使用这两组统计信息可以确定Oracle数据库或其他系统活动是否是CPU问题的原因。
Virtual Memory Statistics
虚拟内存统计数据应该主要用作检查,以验证系统中几乎没有分页或交换活动。当分页或交换发生时,系统性能会迅速下降且不可预测。
单独的进程内存统计信息可以检测由于编程失败而导致的内存泄漏,以从进程堆中取消分配内存。 这些统计信息对于验证启动后系统达到稳定状态后内存使用情况不会增加。 对于中间层计算机上的共享服务器应用程序,其中会话状态可能会持续存在于用户交互中以及完成状态信息未完全释放时,此问题尤其严重。
Disk I/O Statistics
由于数据库驻留在一组磁盘上,因此I / O子系统的性能对于数据库的性能非常重要。 大多数操作系统提供有关磁盘性能的广泛统计信息 最重要的磁盘统计信息是当前响应时间和磁盘队列的长度。 这些统计信息显示磁盘是否正常工作或磁盘过度工作。
测量I / O系统的正常性能; 单块读取的典型值范围为5到20毫秒,具体取决于所使用的硬件。 如果硬件显示的响应时间比正常性能值高得多,那么它表现不佳或过度劳累。 这是你的瓶颈。 如果磁盘队列开始超过两个,那么磁盘是系统的潜在瓶颈。
Oracle数据库还为其发出的I / O调用维护一组一致的I / O统计信息。 这些统计信息是针对以下维度中的单块和多块读取和写入操作捕获的:
■消费群体
启用Oracle数据库资源管理器后,V $ IOSTAT_CONSUMER_GROUP视图将捕获属于当前已启用资源计划一部分的所有使用者组的I / O统计信息。 数据库每小时对累积统计进行采样,并将其作为历史统计数据存储在AWR中。
■数据库文件
在V $ IOSTAT_FILE视图中捕获已访问或已被访问的数据库文件的I / O统计信息。
■数据库功能
数据库功能(例如LGWR和DBWR)的I / O统计信息在V $ IOSTAT_FUNCTION视图中捕获。
Network Statistics
您可以像使用磁盘统计一样使用网络统计信息来确定网络或网络接口是否过载或未达到最佳性能。 在当今的网络应用中,网络延迟可能是实际用户响应时间的很大一部分。 出于这个原因,这些统计数据是一个关键的调试工具。
操作系统数据收集工具
表5-1显示了在UNIX上收集操作统计信息的各种工具。 对于Windows,请使用性能监视器工具。
Table 5–1 UNIX Tools for Operating Statistics
Component UNIX Tool
CPU sar, vmstat, mpstat, iostat
Memory sar, vmstat
Disk sar, iostat
Network netstat
Interpreting Statistics
以下部分讨论了一些陷阱:
■命中率 Hit ratios
调整时,通常计算一个有助于确定是否存在问题的比率。这些比率包括缓冲区高速缓存命中率,软解析比率和锁存命中率。不要将这些比率用作性能瓶颈是否存在的明确标识符。相反,将它们用作指标。要确定是否存在瓶颈,请检查其他相关证据。请参阅第7-9页上的“计算缓冲区高速缓存命中率”。
■用定时统计等待事件 Wait events with timed statistics
除了可用的等待计数外,在实例级别将TIMED_STATISTICS设置为true可指示数据库收集事件的等待时间。此数据对比较事件的总等待时间与数据收集之间的总耗时间是有用的。例如,如果等待事件在2小时内只占30秒,那么通过调查此事件就很少了,尽管它可能是按等待时间排序的排名最高的等待事件。但是,如果该事件在45分钟内占30分钟,则该事件值得调查。请参阅第5-2页的“等待事件”。
■比较Oracle数据库统计信息和其他因素 Comparing Oracle Database statistics with other factors
在考察统计数据时,重要的是要考虑影响统计是否有价值的其他因素。这些因素包括用户负载和硬件功能。即使是在45分钟内等待30分钟的事件,如果您发现系统中有2000个用户,并且主机硬件是64节点计算机,也可能不会指示问题。
■等待没有定时统计的事件 Wait events without timed statistics
如果TIMED_STATISTICS为false,则等待事件的时间量不可用。因此,只能等待每个事件等待的次数。虽然等待次数最多的事件可能表明潜在的瓶颈,但它们可能不是主要瓶颈。当一个事件等待很多次时会发生这种情况,但等待该事件的总时间很少。相反的情况也是如此:如果等待时间占总等待时间的很大一部分,那么等待较少的事件可能会成为问题。没有等待时间用于比较,很难确定等待事件是否真的感兴趣。
■空闲等待事件 Idle wait events
Oracle数据库使用一些等待事件来指示Oracle服务器进程是否空闲。通常,在调查性能问题时,这些事件没有任何价值,并且在检查等待事件时应该忽略它们。请参阅第10-30页的“闲置等待事件”。
■计算统计 Computed statistics
在解释计算的统计数据(例如费率,按交易标准化的统计数据或比率)时,重要的是将计算的统计数据与实际统计数字进行交叉验证。这证实了派生利率是否真的有趣:小统计数通常可以折扣一个不寻常的比例。例如,在初始检查时,50%的软解析率通常表示可能的调整区域。但是,如果在数据收集间隔期间只有一个硬解析和一个软解析,那么软解析比率将是50%,尽管统计数字表明这不是一个值得关注的领域。在这种情况下,由于原始统计数量较低,因此该比率不受关注。
Overview of the Automatic Workload Repository
自动负载信息库(AWR)收集,处理和维护用于问题检测和自我调整目的的性能统计信息。 这些数据都在内存中并存储在数据库中。 收集到的数据可以显示在报告和视图中。
AWR收集和处理的统计数据包括:
■确定数据库段的访问和使用情况统计信息的对象统计信息
■基于活动的时间使用情况的时间模型统计信息,显示在V $ SYS_TIME_MODEL和V $ SESS_TIME_MODEL视图中
■在V $ SYSSTAT和V $ SESSTAT视图中收集的一些系统和会话统计信息
■根据经过时间和CPU时间等条件,在系统上产生最高负载的SQL语句
■ASH统计数据,代表最近会话活动的历史记录
使用AWR收集数据库统计信息在默认情况下处于启用状态,并且由STATISTICS_LEVEL初始化参数进行控制。 应该将STATISTICS_LEVEL参数设置为TYPICAL或ALL,以启用AWR收集的统计信息。 默认设置是TYPICAL。 将STATISTICS_LEVEL设置为BASIC将禁用许多Oracle数据库功能,包括AWR,不推荐使用。 如果STATISTICS_LEVEL设置为BASIC,则仍然可以使用DBMS_WORKLOAD_REPOSITORY包手动捕获AWR统计信息。 但是,由于许多系统统计信息(如段统计信息和内存顾问程序信息)的内存中收集将被禁用,因此这些快照中捕获的统计信息可能不完整。 有关STATISTICS_LEVEL初始化参数的信息,请参阅Oracle数据库参考。
SQL> show parameter statistics_level
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
statistics_level string TYPICAL
SQL>
Snapshots
快照是特定时间段的历史数据集,用于ADDM的性能比较。 默认情况下,Oracle数据库每小时自动生成一次性能数据快照,并将统计信息保留在工作负载存储库中8天。 您也可以手动创建快照,但这通常不是必需的。 快照时间间隔中的数据然后由自动数据库诊断监视器(ADDM)进行分析。 有关ADDM的信息,请参阅第6-1页的“自动数据库诊断监视器概述”。
AWR会比较快照之间的差异,以根据对系统负载的影响来确定要捕获哪些SQL语句。 这减少了一段时间内必须捕获的SQL语句的数量。
有关管理快照的信息,请参阅第5-13页的“管理快照”。
快照间隔 尽量不要改,snap_interval ; rentention 是保留时间; 生成报告是很耗资源的,;所以oracle设定默认1小时生成快照;
如果要保留的快照时间久的话,就要增加sysaux的表空间,要占用这个表空间容量,所以一般几个G 就够了;
begin
DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(retention => 30*24*60,interval=>60);
end;
Baselines
基准包含特定时间段内的性能数据,该数据在发生性能问题时会被保留以与其他类似工作负载时段进行比较。 包含在基线中的快照将从自动AWR清除过程中排除,并被无限期保留。
Oracle数据库中有几种类型的可用基线:
■固定基准
■移动窗口基线
■基准模板
固定基线
固定基线对应于您指定的过去的固定连续时间段。 在创建固定基线之前,请仔细考虑您选择的基准时间段作为基准线,因为基准线应代表系统以最佳水平运行。 将来,您可以将基准与其他基线或在性能较差期间捕获的快照进行比较,以分析随时间推移的性能下降情况。
移动窗口基线
移动窗口基线对应于AWR保留期内存在的所有AWR数据。这在使用自适应阈值时很有用,因为数据库可以在整个AWR保留期中使用AWR数据来计算度量阈值。
Oracle数据库自动维护系统定义的移动窗口基线。系统定义的移动窗口基线的默认窗口大小是当前的AWR保留期,默认为8天。如果您打算使用自适应阈值,请考虑使用更大的移动窗口(例如30天)来准确计算阈值。您可以通过将移动窗口中的天数更改为等于或小于AWR保留期中的天数的值来调整移动窗口基线的大小。因此,要增加移动窗口的大小,您必须首先相应地增加AWR保留期。
begin
DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(retention => 30*24*60,interval=>60);
end;
这里就把awr的保留期限更改为30天;
基准模板
您还可以使用基准模板在未来的连续时间段内创建基线。有两种类型的基准模板:单个和重复。
您可以使用单个基准模板为将来的单个连续时间段创建基准。如果您事先知道您打算在未来捕获的时间段,则此技术非常有用。例如,您可能希望在即将到来的周末安排的系统测试期间捕获AWR数据。在这种情况下,您可以创建单个基线模板来自动捕获测试发生的时间段。
您可以使用重复的基准模板根据重复的时间表创建和删除基准。如果您希望Oracle数据库持续自动捕获连续的时间段,这非常有用。例如,您可能想要在每个星期一早上捕获AWR数据一个月。在这种情况下,您可以创建一个重复的基线模板,以根据每个星期一的重复计划自动创建基线,并在指定的到期间隔(例如一个月)后自动删除较旧的基线。
Adaptive Thresholds
自适应阈值使您能够监视和检测性能问题,同时最大限度地减少管理开销。自适应阈值可以使用从移动窗口基线中捕获的度量值导出的统计信息,自动为某些系统度量标准设置警告和关键警报阈值。这些阈值的统计数据每周重新计算,随着系统性能随着时间的推移而变化,可能会导致新的阈值。除了每周重新计算阈值之外,自适应阈值可能会基于周期性工作负载模式计算一天或一周中不同时间的不同阈值。
例如,许多数据库在白天支持在线事务处理(OLTP)工作负载,并在夜间进行批处理。每次事务响应时间的性能指标可用于检测白天的OLTP性能下降情况。但是,对于批处理工作负载而言,一个有用的OLTP阈值几乎可以肯定是非常低的,因为长时间运行的事务可能很常见。因此,适用于OLTP的阈值可能会在批处理期间触发频繁的错误性能警报。自适应阈值可以检测这种工作负载模式,并自动为白天和夜晚设置不同的阈值。
注意:
在Oracle数据库11g第2版(11.2)中,Oracle数据库自动确定数据库的适当时间分组。 但是,在Oracle Database 11g第2版(11.2)之前,数据库管理员手动指定了时间分组。
有两种类型的自适应阈值:
■最大百分比:阈值按移动窗口基线中观察到的最大值的百分比倍数计算。
■显著性水平:阈值设置为一个统计百分位数,表示根据移动窗口基线中的数据观察阈值以上的值的异常情况。 指定以下百分位之一:
- 高(.95):100个观测值中只有5个预计会超过此值。
非常高(.99):100个观测值中只有1个预计会超过此值。
- 严重(.999):1000个观测值中只有1个预计会超过此值。
-Extreme(.9999):10,000个观测值中只有1个预计会超过此值。
注意:
当您指定Severe(.999)或Extreme(.9999)时,Oracle数据库执行内部计算来设置阈值。 在某些情况下,Oracle数据库无法使用基准中的数据在这些级别建立阈值,并且未设置显着性级别阈值。
如果您没有按预期收到警报,并且您指定了严重(.999)或极端(.9999)显着性水平阈值,则可以尝试将显着性水平阈值设置为较低的值,例如Very High(.99) 或高(.95)。 或者,您可以设置最大阈值的百分比而不是显着性阈值。 如果更改阈值并发现收到的警报太多,则可以尝试增加引发警报的次数。
当系统按照峰值工作负载调整大小时,最大阈值的百分比最有用,并且当当前工作负载量接近或超过先前的高值时,您希望收到警报。 具有未知但明确的限制值的度量标准适合这些设置。 例如,每秒生成的重做度量通常是最大阈值百分比的良好候选项。
显着性水平阈值对于在系统正常运行时应显示出统计稳定行为的度量标准非常有用,但在系统性能不佳时可能会在很大范围内变化。 例如,对于经过良好调整的OLTP系统,每个事务的响应时间度量标准应该是稳定的,但在出现性能问题时可能会出现很大波动。 显着性水平阈值旨在在条件产生异常度量值和异常系统性能时生成警报。
注意:
管理基准指标的主要界面是Oracle企业管理器。 要为基准指标创建自适应阈值,请使用Oracle企业管理器,如Oracle数据库2日+性能调整指南中所述。
Space Consumption
AWR所消耗的空间由以下几个因素决定:
■在任何给定时间系统中的活动会话数
■快照时间间隔
快照时间间隔决定捕捉快照的频率。 较小的快照间隔会增加频率,从而增加AWR收集的数据量。
■历史数据保留期
保留期限决定了在清除之前这些数据保留了多长时间。 较长的保留期会增加AWR消耗的空间。
默认情况下,快照每小时捕获一次,并保留在数据库中8天。 通过这些默认设置,平均有10个并发活动会话的典型系统可能需要大约200至300 MB的空间用于其AWR数据。 可以更改快照时间间隔和保留时间的默认值。 请参阅第5-14页的“修改快照设置”以了解如何修改AWR设置
AWR空间消耗可以通过增加快照间隔和缩短保留期来减少。在缩短保留期限时,请注意,有几个Oracle数据库自我管理功能依赖于AWR数据才能正常工作。没有足够的数据会影响这些组件和功能的有效性和准确性,其中包括:
■自动数据库诊断监视器 Automatic Database Diagnostic Monitor
■SQL调整顾问 SQL Tuning Advisor
■撤消顾问 Undo Advisor
■段顾问 Segment Advisor
如果可能的话,Oracle建议您将AWR保留期设置得足够大,以至少捕获一个完整的工作负载周期。如果您的系统每周都会遇到工作负载周期,例如平日的OLTP工作负载和周末的批处理作业,则无需更改默认的8天AWR保留期。但是,如果您的系统在月末结帐期间受到每月高峰负荷的影响,则可能必须将保留期限设置为一个月。
在特殊情况下,您可以通过将快照间隔设置为0来关闭自动快照收集。在此情况下,工作负载和统计数据的自动收集将停止,并且大部分Oracle数据库自我管理功能都无法运行。另外,您无法手动创建快照。因此,Oracle强烈建议您不要关闭自动快照收集。
这些采样数据都存储在SYSAUX表空间中,并且以WRM$_* 和 WRH$_*的格式命名。前一种类型存储元数据信息(如检查的数据库和采集的快照),
后一种类型保存实际采集的统计数据。
select table_name from dba_tables where table_name like 'WRM$%';
TABLE_NAME
-----------------------
WRM$_WR_CONTROL
WRM$_SNAP_ERROR
WRM$_SNAPSHOT
WRM$_DATABASE_INSTANCE
WRM$_BASELINE
当SYSAUX表空间满后,AWR将自动覆盖掉旧的信息,并在警告日志中记录一条相关信息:
ORA-1688: unable to extend table SYS.WRH$_ACTIVE_SESSION_HISTORY partition WRH$_ACTIVE_3533490838_1522 by 128 in tablespace SYSAUX
select table_name from dba_tables where table_name like 'WRH$%';
Managing the Automatic Workload Repository
Managing Snapshots
默认情况下,Oracle数据库每小时生成一次快照,并将统计信息保留在工作负载存储库中8天。 必要时,可以使用DBMS_WORKLOAD_REPOSITORY过程手动创建,删除和修改快照。 要调用这些过程,用户必须被授予DBA角色。
管理快照的主要界面是Oracle企业管理器。 如有可能,您应该使用Oracle Enterprise Manager管理快照,如Oracle数据库2日+性能调优指南中所述。 如果Oracle Enterprise Manager不可用,则可以使用DBMS_WORKLOAD_REPOSITORY包管理快照,如以下各节中所述:
■创建快照
您可以使用CREATE_SNAPSHOT过程手动创建快照,以捕获与自动生成的快照不同的时间点的统计信息。 例如:
BEGIN
DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT ();
END;
/
在本例中,实例的快照立即创建,其冲洗级别指定为TYPICAL的默认冲洗级别。 您可以在DBA_HIST_SNAPSHOT视图中查看此快照。
■删除快照
您可以使用DROP_SNAPSHOT_RANGE过程删除一系列快照。 要查看快照ID列表以及数据库ID,请检查DBA_HIST_SNAPSHOT视图。 例如,您可以删除以下范围的快照:
BEGIN
DBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE (low_snap_id => 22,
high_snap_id => 32, dbid => 3310949047);
END;
/
在此示例中,要删除的快照标识的范围从22到32指定。可选的数据库标识为3310949047.如果您没有为dbid指定值,则使用本地数据库标识作为默认值。
属于由快照范围指定的时间段的活动会话历史记录数据(ASH)在调用DROP_SNAPSHOT_RANGE过程时也会被清除。
■修改快照设置
INTERVAL设置影响数据库自动生成快照的频率。 RETENTION设置影响数据库在工作负载存储库中存储快照的时间。 TOPNSQL设置影响为每个SQL条件刷新的顶级SQL的数量(已用时间,CPU时间,分析调用,可共享内存和版本计数)。此设置的值不受统计信息/清除级别的影响,并且将覆盖AWR SQL集合的系统默认行为。可以将此设置的值设置为MAXIMUM,以便在共享SQL区域中捕获完整的SQL集,尽管这样做(或通过将该值设置为非常高的值)可能会导致可能的空间和性能问题,因为将有更多的数据收集和存储。要调整设置,请使用MODIFY_SNAPSHOT_SETTINGS过程。例如:
BEGIN
DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS( retention => 43200,
interval => 30, topnsql => 100, dbid => 3310949047);
END;
/
在此示例中,保留期限指定为43200分钟(30天),每个快照之间的间隔指定为30分钟,并且将针对每个SQL条件刷新的Top SQL数目指定为100.如果指定NULL,则现有 价值被保留。 可选的数据库标识符是3310949047.如果您没有为dbid指定值,则使用本地数据库标识符作为默认值。 您可以使用DBA_HIST_WR_CONTROL视图检查数据库实例的当前设置。
Managing Baselines
本节介绍如何管理基线。 用于管理基准的主要界面是Oracle企业管理器。 如有可能,您应该使用Oracle Enterprise Manager来管理基线,如Oracle数据库2日+性能调优指南中所述。 如果Oracle企业管理器不可用,则可以使用DBMS_WORKLOAD_REPOSITORY包管理基准,如以下各节中所述:
■创建基线
本节介绍如何使用现有快照范围创建基线。
创建基线:
1.查看DBA_HIST_SNAPSHOT视图中的现有快照以确定要使用的快照范围。
2.使用CREATE_BASELINE过程使用所需范围的快照创建基准:
BEGIN
DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE (start_snap_id => 270,
end_snap_id => 280, baseline_name => 'peak baseline',
dbid => 3310949047, expiration => 30);
END;
/
在这个例子中,270是开始快照序号,280是结束快照序列。 基线的名称是峰值基线。 可选的数据库标识符是3310949047.如果您没有为dbid指定值,则使用本地数据库标识符作为默认值。 可选的到期参数设置为30,因此基准将过期并在30天后自动删除。 如果您未指定过期值,则基线永远不会过期。
创建基准时,系统会自动为新基线分配唯一基准ID。 基准ID和数据库标识符显示在DBA_HIST_BASELINE视图中。
■删除基线
本节介绍如何删除现有基线。 您可能需要定期放弃不再用于节省磁盘空间的基准。 与基准关联的快照将无限期保留,直到您明确放弃基准或基线已过期。
要放弃基线:
1.查看DBA_HIST_BASELINE视图中的现有基线以确定要放下的基线。
2.使用DROP_BASELINE过程删除所需的基线:
BEGIN
DBMS_WORKLOAD_REPOSITORY.DROP_BASELINE (baseline_name => 'peak baseline',
cascade => FALSE, dbid => 3310949047);
END;
/
在该示例中,基线的名称是peak baseline。 cascade参数设置为FALSE,它指定只删除基线。 将此参数设置为TRUE指定删除操作也将删除与基线关联的快照。 可选的dbid参数指定数据库标识符,在本例中为3310949047.如果您没有为dbid指定值,则使用本地数据库标识符作为默认值。
■重命名基准
本节介绍如何重新命名基准。
重新命名基线:
1.查看DBA_HIST_BASELINE视图中的现有基线以确定要重命名的基线。
2.使用RENAME_BASELINE过程重新命名所需的基线:
BEGIN
DBMS_WORKLOAD_REPOSITORY.RENAME_BASELINE (
old_baseline_name => 'peak baseline',
new_baseline_name => 'peak mondays',
dbid => 3310949047);
END;
/
在此示例中,根据old_baseline_name参数指定的基准名称从peak baseline重命名为peak mondays,如new_baseline_name参数所指定。 可选的dbid参数指定数据库标识符,在本例中为3310949047.如果您没有为dbid指定值,那么本地DBID是默认值。
■显示基准指标
本节介绍如何在基准线中捕获的时间段内显示度量标准阈值设置。 与自适应阈值一起使用时,基准包含数据库可用来计算度量标准阈值的AWR数据。 SELECT_BASELINE_METRICS函数使您能够显示基准期内度量值的摘要统计信息。
要在基准中显示指标信息
1.查看DBA_HIST_BASELINE视图中的现有基准,以确定要显示度量信息的基线。
2.使用SELECT_BASELINE_METRICS函数显示所需基线的度量信息:
BEGIN
DBMS_WORKLOAD_REPOSITORY.SELECT_BASELINE_METRICS (
baseline_name => 'peak baseline',
dbid => 3310949047,
instance_num => '1');
END;
/
在这个例子中,基线名称是peak baseline。 可选的dbid参数指定数据库标识符,在本例中为3310949047.如果您没有为dbid指定值,则使用本地数据库标识符作为默认值。 可选的instance_num参数指定实例编号,在本例中为1。如果您没有为instance_num指定值,那么本地实例将用作缺省值。
■修改默认移动窗口基线的窗口大小
本节介绍如何修改默认移动窗口基线的窗口大小。 有关默认移动窗口基线的信息,请参阅第5-9页上的“移动窗口基线”。
要调整默认移动窗口基线的大小,请使用MODIFY_BASELINE_WINDOW_SIZE过程:
BEGIN
DBMS_WORKLOAD_REPOSITORY.MODIFY_BASELINE_WINDOW_SIZE (
window_size => 30,
dbid => 3310949047);
END;
/
window_size参数用于指定默认移动窗口大小的新窗口大小(天数)。 在此示例中,window_size参数设置为30.窗口大小必须设置为等于或小于AWR保留设置值的值。 要设置大于当前AWR保留期的窗口大小,必须首先增加保留参数的值,如第5-14页的“修改快照设置”中所述。
在此示例中,可选的dbid参数指定数据库标识符为3310949047.如果您未为dbid指定值,则使用本地数据库标识符作为默认值。
Managing Baseline Templates
本节介绍如何管理基准模板。 您可以使用基线模板自动创建基线以便将来捕获指定的时间段。 有关基准模板的信息,请参阅第5-10页上的“基准模板”。
管理基准模板的主要界面是Oracle企业管理器。 如有可能,您应该使用Oracle Enterprise Manager管理基线模板,如Oracle数据库2日+性能调整指南中所述。 如果Oracle Enterprise Manager不可用,则可以使用DBMS_WORKLOAD_REPOSITORY包管理基准模板,如以下各节所述:
■创建单个基准模板
本节介绍如何创建单个基准模板。 您可以使用单个基线模板在将来的单个固定时间间隔内创建基线。 例如,您可以创建一个基准模板来生成2009年4月2日下午5:00捕获的基准。 到下午8点
要创建单个基准模板,请使用CREATE_BASELINE_TEMPLATE过程:
BEGIN
DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE_TEMPLATE (
start_time =>TO_DATE('01-03-2018-13:00:00','DD/MM/YYYY-HH24:MI:SS'),,
end_time =>TO_DATE('02-03-2018-13:00:00','DD/MM/YYYY-HH24:MI:SS'),,
baseline_name => 'baseline_090402',
template_name => 'template_090402', expiration => 30,
dbid => 3310949047);
END;
/
注意:end_time 必须要大于 sysdate;否则会报ORA-13537: invalid input for create baseline template (end_time, end_time is less than SYSDATE)
start_time参数指定要创建的基线的开始时间。 end_time参数指定要创建的基线的结束时间。 baseline_name参数指定要创建的基线的名称。 template_name参数指定基线模板的名称。 可选的过期参数指定基准的到期日期(以天数为单位)。 如果未指定,则基线永不过期。 可选的dbid参数指定数据库标识符。 如果未指定,则使用本地数据库标识符作为默认值。
在此示例中,将创建一个名为template_090402的基准模板,该模板将在下午5:00生成一段名为baseline_090402的基准线。 到下午8点 在2009年4月2日,数据库ID为3310949047.基准将在30天后过期。
select DBID,TEMPLATE_ID,TEMPLATE_NAME,TEMPLATE_TYPE,DURATION,EXPIRATION,REPEAT_INTERVAL from dba_hist_baseline_template; 查看创建的基线模板;
■创建重复基准模板
本节介绍如何创建重复的基线模板。 重复的基线模板可用于自动创建在特定时间间隔内在特定时间段内重复的基线。 例如,您可以创建一个重复的基线模板,以生成一个基准线,该基准线每周一从下午5:00开始重复。 到下午8点 为2009年。
要创建重复的基线模板,请使用CREATE_BASELINE_TEMPLATE过程:
BEGIN
DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE_TEMPLATE (
day_of_week => 'monday', hour_in_day => 17,
duration => 3, expiration => 30,
start_time => TO_DATE('02-03-2018-8:00:00','DD/MM/YYYY-HH24:MI:SS'),
end_time => TO_DATE('02-12-2018-12:00:00','DD/MM/YYYY-HH24:MI:SS'),
baseline_name_prefix => 'baseline_2018_mondays_',
template_name => 'template_2018_mondays',
dbid => 3966418401);
END;
/
day_of_week参数指定基线重复的星期几。 hour_in_day参数指定基线开始的一天中的小时数。 duration参数指定基线将持续的持续时间(小时数)。到期参数指定保留每个创建的基准的天数。如果设置为NULL,那么基线永不过期。 start_time参数指定要创建的基线的开始时间。 end_time参数指定要创建的基线的结束时间。 baseline_name_prefix参数指定创建基线时将附加到数据信息的基线前缀的名称。 template_name参数指定基线模板的名称。可选的dbid参数指定数据库标识符。如果未指定,则使用本地数据库标识符作为默认值。
在此示例中,将创建一个名为template_2009_mondays的基线模板,该模板将从下午5:00起在每个星期一生成基线。到下午8点从2009年4月2日下午5点开始并于2009年12月31日晚上8点结束。数据库ID为3310949047.每个基准都将创建一个基准名称,其前缀为baseline_2009_mondays_,并且将在30天后过期。
■删除基准模板
本节介绍如何删除现有的基准模板。 定期地,您可能需要删除不再用于节省磁盘空间的基准模板。
要删除基线模板:
1.查看DBA_HIST_BASELINE_TEMPLATE视图中的现有基线以确定要删除的基准模板。
2.使用DROP_BASELINE_TEMPLATE过程删除所需的基线模板:
BEGIN
DBMS_WORKLOAD_REPOSITORY.DROP_BASELINE_TEMPLATE (
template_name => 'template_2009_mondays',
dbid => 3310949047);
END;
/
template_name参数指定将被删除的基线模板的名称。 在该示例中,将要删除的基线模板的名称是template_2009_mondays。 可选的dbid参数指定数据库标识符,在本例中为3310949047.如果您没有为dbid指定值,则使用本地数据库标识符作为默认值。
Transporting Automatic Workload Repository Data
Oracle数据库使您能够在系统之间传输AWR数据。 如果您想使用单独的系统执行AWR数据分析,这很有用。 要传输AWR数据,必须先从源系统上的数据库中提取AWR快照数据,然后将数据加载到目标系统上的数据库中,如以下各节所述:
■提取AWR数据
awrextr.sql脚本将数据库中的一系列快照的AWR数据抽取到Data Pump导出文件中。 创建后,您可以将此转储文件传输到另一个数据库,您可以在其中加载提取的数据。 要运行awrextr.sql脚本,您必须以SYS用户的身份连接到数据库。