Oracle9i数据库存性能分析和优化工具
一.数据库性能优化工具
Oracle9i分析和优化数据库性能的工具包括动态故障排除、统计视图工具和企业管理器包。
这几个工具用来收集性能统计信息和事件(如等待事件)的诊断记录,你可以使用这些事件来发现和诊断性能问题。
Oracle视图提供了故障排除和性能优化信息。这些视图包括:
1.动态性能视图
Oracle将系统统计信息和问题排除信息记录在动态性能视图中。例如V$SYSTAT视图中包括系统统计信息。
2.数据字典视图
Oracle将数据存储统计信息记录在数据字典视图中,如DBA_CLUSTERS视图。这些视图使你能够监视并优化数据存储,以提高性能。
可以使用下面的统计信息收集工具来获取更多关于数据库性能的信息
1.BSTAT/ESTAT
BSTAT/ESTAT工具由utlbstat.sql和utlestat.sql脚本组成,它用来在单个指定的时期内收集性能统计信息并根据这些统计信息生成报告。
2.STATSPACK
STATSPACK工具是BSTAT/ESTAT工具的增强,它允许你对不同时间段上的统计信息进行比较,并耗费资源的SQL指令的性能进行分析。
Oracle企业管理器(OEM)包括诊断软件包和优化软件包。这两个软件包包含GUI工具,如负责性能管理和优化的性能管理器。
Oracle提供了等待事件的实时记录,无论什么时候,只有有线程被强制等待资源,等待事件就会发生。这些记录在确定资源瓶颈时非常有用。
Oracle也在警报日志与跟踪日志中记录所有的错误。这使作得你可以检测和诊断数据库的问题。
数据库管理员和软件开发人员可以编写定制的脚本,这些脚本使用ORACLE现有的工具来收集特定的统计信息并制定性能优化操作计划。
例如:脚本可能使用Oracle企业管理器(Oracle Enterprise Manager,OEM)事件服务来检测性能问题,以及在出现问题时触发OEM作业服务来运行优化脚本。
二.使用数据字典视图辅助优化
DBMS_STATS软件包是一个PL/SQL过程的集合,优化者使用它来收集和存储统计信息。
DBMS_STATS将这些统计信息存储在数据字典中,可以使用它们来分析存储性能。
DBMS_STATS软件包可以收集索引统计信息、数据表统计信息、柱状图统计信息、模式统计信息。
可以通过运行下面的过程来收集DBMS_STATS各项统计数据:
1.GATHER_TABLE_STATS
2.GATHER_INDEX_STATS
3.GATHER_SYSTEM_STATS
4.GATHER_SCHEMA_STATS
5.GATHER_DATABASE_STATS
当运行DBMS_STATS过程的时候,这些过程将当前统计信息放入下面的视图中:
1.DBA_CLUSTERS:DBA_CLUSTERS视图包含每一个簇,以及块和扩展层的数据存储信息。
2.DBA_TABLES和DBA_TAB_COLUMNS:DBA_TABLES视图和DBA_TAB_COLUMNS视图提供表和列的存储和所有权信息,包含诸如唯一和数据类型的信息。
3.DBA_INDEXS和INDEX_STATS:DBA_INDEXS视图描述了每个索引是如何存储以及哪些表与之关联。INDEX_STATS视图包含了索引的结构、用法和性能的详细信息。
4.INDEX_HISTOGRAM和DBA_TAB_HISTOGRAMS:INDEX_HISTOGRAM视图和DBA_TAB_HISTOGRAMS视图包含了各个已编入索引和未编入索引的列的数据分布统计信息。
DBMS_STATS软件包是一个PL/SQL过程的集合,优化者使用它来收集和存储统计信息。
可以使用ANALYZE命令代替DBMS_STATS包来收集系统统计信息。二者区别在于,ANALYZE命令收集象表和索引的结构完整性这样的数据,而DBMS_STATS软件包则不是。但该命令受到较多的限制,且具有一定的不精确性,因此不应该使用它来收集基于代价的最优化统计。
三.使用动态性能视图
动态性能视图包含有关当前系统性能的统计信息。当实例启动时,ORACLE载入这些视图;当该实例关闭时,Oracle将清除这些视图。在数据库运行时,Oracle对这些视图进行实时更新。
动态性能视图是SYS用户所拥有的V$视图。这些视图是建立在X$表上的,而X$表是动态更新的。
尽管可以直接查询作为基础的X$表以访问那些出现在V$视图中的相同信息。但是,X$表的名称和列的名称一般为缩略名且较为含混,所使用视图较为容易。
由于动态性能视图是建立在实例的基础上的,因此只要实例启动,就可以随时访问它们,即使数据库是关闭的。
只有当你将TIMED_STATISTICS的初始化参数值设为TRUE时,在动态性能视图中的统计信息才会把实时信息加入。
动态信息视图提供了与以下相关的信息:
1.实例和数据库性能:V$INSTANCE、$DATABASE、V$PARAMETER、V$PROCESS、V$WAITSTAT以及V$SYSTEM_EVENT视图包括有关实例和数据库性能的数据。
2.内存使用:V$BUFFER_POOL_STATISTICS、V$DB_OBJECT_CACHE、V$LIBRARY_CACHE、V$ROWCACHE、V$SYSSTAT以及V$SGASTAT视图包括有关内存使用的数据。
3.磁盘性能:V$DATAFILE、V$FILESTAT、V$LOG、V$LOG_HISTORY、V$DBFILE、V$TEMPFILE以及V$TEMPSTAT视图包括有关磁盘性能的数据。
4.资源争用:V$LOCK、V$ROLLSTAT、V$WAITSTAT、V$LATCH以及V$UNDOSTAT视图包括有关资源争用的数据。
5.会话性能:V$SESSION、V$SESSTAT、V$PROCESS、V$LOCK、V$OPEN_CURSOR、V$TRANSACTION、V$SESSION_EVENT以及V$SESSION_WAIT视图包括有关会话性能的数据。
V$STATNAME视图列出了所有可用的统计信息。它显示了这些变量统计信息的名称编号,以及标明每个统计信息所监视的活动或进程的类型。
V$SYSSTAT视图列出了所有可用的统计信息以及它们的当前值。
V$STATNAME和V$SYSSTAT视图显示了每个统计信息属于哪个统计信息类。共有八个统计信息类,每个统计信息类涉及到优化的一个面:
1.Class1:Class1统计信息涉及常规实例活动。
2.Class2:Class2统计信息涉及恢复日志缓冲活动。
3.Class4:Class4统计信息涉及堵塞。
4.Class8:Class4统计信息涉及数据库缓冲存储区活动。
5.Class16:Class4统计信息涉及操作系统活动。
6.Class32:Class4统计信息涉及并行性。
7.Class64:Class4统计信息涉及表的访问。
8.Class128:Class4统计信息涉及调试过程。
可以使用V$SESSTAT视图来查看特定会话的统计信息。该视图列出了所有当前打开会话的每一个统计值。该视图使用V$STATNAME视图中的会话ID和统计信息的编号来指示每个统计值。
例如,可以使用V$SESSTAT视图来找出会话3中的第138个统计信息的值。
为了能够看到统计信息的名称而非统计信息的编号,你可以通过将V$STATNAME和V$SESSTAT视图连接起来获得更清楚的结果。
四.等待事件
当两个或两个以上的进程争用同一资源时,结果必然是至少一个进程需要等待资源变为可用,此时Oracle记录一个等待事件。
需要监视等待事件并且尝试减少等待的频率和等待的持续时间,以提高系统性能。
等待事件的例子包括缓冲器临时占用等待、连续读取等待以及等待释放锁。
Oracle在V$EVENT_NAME视图中提供了等待事件类别的列表。该视图列出了与每个事件相关的编号、名称,以及其他三个相关参数。
Oracle在V$SYSTEM_EVENT、V$SESSION_EVENT以及V$SESSION_WAIT视图中存储了有关等待事件的统计信息。
V$SYSTEM_EVENT视图列出了自当前实例启动以来所发生的除了会话以外的所有等待事件。
对于每一个等待事件类别,V$SYSTEM_EVENT视图显示了从实例启动以来已发生的事件的数量、超时的总数量、等待的总时间和每个等待事件的平均等待时间。
V$SESSION_EVENT视图显示了一个特定会话过程中所发生的等待事件的信息。它为会话过程中所发生的等待事件的每个类别显示相关的会话ID(SID)和统计信息。
V$SESSION_WAIT视图为正在等待的当前会话提供了资源和事件的相关信息。同时它显示了SID、用来识别等待的顺序编号、等待事件的类别和相关的所有参数、等待的持续时间以及等待事件是否还在进行。
提示:要想查看等待次数的相关信息,需要确保将TIMED_STATISTICS初始化参数值设置为TRUE。
五.警报日志和跟踪文件
警报日志是记录错误和改变数据库结构的语句(如RECOVER和ALTER DATABASE语句)的日志文件。
当启动实例的时候,Oracle使用所有的非默认初始化参数值来更新警报日志。
在实例运行时,Oracle使用出现的内部错误和块破坏的错误来更新警报日志,并将所作的改变记录到数据库中。
如果将LOG_CHECKPOINTS_TO_ALERT的初始参数值设为TRUE,警报日志会记录下面的检查点信息:
1.检查点开始和结束的时间
2.不完整的检查点
3.恢复开始和结束的时间
4.归档时间
5.死锁和超时错误
应该定期检查警报日志,以便在一些潜在的错误对系统性能产生严重的影响之前将其检测出来。你也可以将警报日志作为一个诊断工具来帮助你识别当前数据库问题的原因。
要维护警报日志,应该定期从日志中删除那些不再相关的信息,以便于日志一直保持一个可运行的容量。
除了提供警报日志外,Oracle还创建跟踪文件,跟踪文件包含了后台进程所检测到的错误的相关信息。
这些后台进程的跟踪文件一般不包含对性能优化有用的信息。然而,Oracle支持人员可以利用这些跟踪文件来解决数据库问题。
可以启用服务器跟踪进程来跟踪特定的会话或实例过程中所有已执行的SQL指令。要实现这个目的,需要将SQL_TRACE初始化参数值设为TRUE。Oracle将会在用户的跟踪文件中记录这个跟踪信息。
六.小结
1.Oracle9i提供了动态性能视图和数据字典视图、统计信息收集工具、Oracle企业管理器(OEM)软件包以及错误记录。
2.DBMS_STATS软件包为基于代价的最优化收集统计信息。可以使用DBMS_STATS软件包来收集表和索引中的数据存储信息,以及数据分布柱状图。
3.动态性能视图是基于表的视图,它记录了与ORACLE当前性能相关的统计信息。可以通过查询这些视图来收集内存使用、资源争用、磁盘性能以及常规实例性能的相关信息。用户可以用特定的动态性能视图(如V$SESSTAT视图)来收集仅在某一特定会话中的性能信息。
4.当过程争用同一资源时,至少有一个进程必须等待资源变为可用。此时Oracle记录等待事件。你可以使用这些等待事件信息来查看性能瓶颈。
5.Oracle在警报日志中记录内部错误和块破环的错误。后台进程也跟踪文件中记录错误。可以使用警报日志的记录来检测和诊断数据库的错误,还可以选择使用跟踪文件来记录用户的SQL查询。