Tkprof 分析ORACLE跟踪文件
- 格式:docx
- 大小:21.20 KB
- 文档页数:7
查看Oracle执行计划的几种方法一、通过PL/SQL Dev工具1、直接File->New->Explain Plan Window,在窗口中执行sql可以查看计划结果。
其中,Cost表示cpu的消耗,单位为n%,Cardinality表示执行的行数,等价Rows。
2、先执行 EXPLAIN PLAN FOR select * from tableA where paraA=1,再 select * from table(DBMS_XPLAN.DISPLAY)便可以看到oracle的执行计划了,看到的结果和1中的一样,所以使用工具的时候推荐使用1方法。
注意:PL/SQL Dev工具的Command window中不支持set autotrance on的命令。
还有使用工具方法查看计划看到的信息不全,有些时候我们需要sqlplus的支持。
二、通过sqlplus1.最简单的办法Sql> set autotrace onSql> select * from dual;执行完语句后,会显示explain plan 与统计信息。
这个语句的优点就是它的缺点,这样在用该方法查看执行时间较长的sql语句时,需要等待该语句执行成功后,才返回执行计划,使优化的周期大大增长。
如果不想执行语句而只是想得到执行计划可以采用:Sql> set autotracetraceonly这样,就只会列出执行计划,而不会真正的执行语句,大大减少了优化时间。
虽然也列出了统计信息,但是因为没有执行语句,所以该统计信息没有用处,如果执行该语句时遇到错误,解决方法为:(1)在要分析的用户下:Sqlplus>@ ?dbmsadminutlxplan.sql(2) 用sys用户登陆Sqlplus>@ ?sqlplusadminplustrce.sqlSqlplus> grant plustrace to user_name;- - user_name是上面所说的分析用户2.用explain plan命令(1) sqlplus> explain plan for select * from testdb.myuser(2) sqlplus> select * from table(dbms_xplan.display);上面这2种方法只能为在本会话中正在运行的语句产生执行计划,即我们需要已经知道了哪条语句运行的效率很差,我们是有目的只对这条SQL语句去优化。
Tkprof工具介绍和分析Tkprof是一个用于分析oracle跟踪文件并且产生一个更加清晰合理的输出结果的可执行工具。
如果一个系统的执行效率比较低,一个比较好的方法是通过跟踪用户的会话并且使用Tkprof工具使用排序功能格式化输出,从而找出有问题的SQL语句。
Tkprof的使用步骤1,在数据库级别上设置Timed_statistics为true。
8i数据库需要修改init文件增加timed_statistics=true,然后重启数据库使其有效。
9i数据库可以在sqlplus中完成修改SQL> alter system set timed_statistics= true scope =both;2,使用各种功能得到你想要查看session的trace文件Oracle中能够得到一个session的trace的方法很多,这里简单介绍一下。
方法一:如果需要在数据库级别上设置trace,可以在init.ora文件中加入sql_trace=true,这样在数据库运行的同时会trace所有数据库的活动,一般来说,只有在数据库的所有事务都需要被监控的时候才使用这种方法,使用这种方法会产生大量的trace文件,并且会耗费大量的数据库性能,不推荐使用。
如果一定要用,则在trace信息收集完成后,记得去掉这个参数,然后重启数据库。
方法二:如果需要在session级别上设置trace,可以在sqlplus中使用下列语句:SQL>alter session set sql_trace=true或者使用10046跟踪事件。
SQL>alter session set events ’10046 trace name context forever,level 1’;另外我们还可以使用dbms_session程序包完成同样的操作。
SQL>exec dbms_system.set_sql_trace_in_session(SID,Serial#,true);3、找到生成的正确的trace文件,在init.ora初始化参数中,user_dump_dest定义的路径就是。
Oracle数据库常见异常的诊断方法对于系统级异常,可以采取以下诊断方法:1. 检查日志文件:Oracle数据库记录了大量的日志信息,包括错误日志(alert log)、故障诊断日志(trace files)等。
通过查看这些日志文件,可以了解系统执行过程中的异常情况,定位问题发生的时间和位置。
2. 查看系统表和视图:Oracle数据库提供了一系列用于监控系统的表和视图,包括v$session、v$session_event、v$session_wait等。
通过查询这些系统表和视图,可以获取当前会话的状态和等待事件,从而确定系统出现异常的原因。
3. 检查系统资源使用情况:Oracle数据库提供了一系列用于监控系统资源使用情况的视图,包括v$sysstat、v$sesstat、v$system_event 等。
通过查询这些视图,可以了解数据库的活动会话数、CPU利用率、I/O等待等情况,从而评估系统资源的使用情况。
对于SQL级异常,可以采取以下诊断方法:1. 分析执行计划:Oracle数据库可以生成SQL执行计划,用于指导优化器选择最优的执行方案。
通过分析执行计划,可以了解SQL查询的执行顺序、操作方式和数据访问路径等信息,进而确定是否存在性能问题。
2. 使用SQL Trace:Oracle数据库提供了SQL Trace功能,可以详细记录SQL语句的执行过程,包括SQL的执行时间、CPU消耗、I/O操作等。
通过分析SQL Trace文件,可以找到SQL执行过程中的异常情况,如高CPU使用率、大量的物理读写等。
3. 检查索引使用情况:索引是提高SQL查询性能的重要手段,但是过多或者过少的索引都可能引起性能问题。
通过查询v$segment_statistics视图,可以了解各个表和索引的物理I/O操作次数和等待次数,从而判断是否存在索引使用不当的问题。
4. 检查锁定和等待:Oracle数据库提供了一系列用于监控数据库锁定和等待的视图,包括v$lock、v$lock_wait、v$session等。
Oracle监听配置文件最近看到好多人说到tns或者数据库不能登录等问题,就索性总结了下面的文档。
首先来说Ora cle的网络结构,往复杂处说能加上加密、LDAP等等。
这里不做讨论,重点放在基本的网络结构也就是我们最常用的这种情况。
三个配置文件重点:三个文件的作用和使用。
listene r.ora、sqlnet.ora、tnsname s.ora,都是放在$ORACLE_HOME\network\admin 目录下。
sqlnet.ora作用类似于li nux或者其他unix的nsswit ch.conf文件,通过这个文件来决定怎么样找一个连接中出现的连接字符串。
例如我们客户端输入sqlp lus sys/oracle@orcl假如我的sq14lnet.ora是下面这个样子:SQLNET.AUTHENT ICATIO N_SERV ICES= (NTS)NAMES.DIRECTO RY_PAT H= (TNSNAME S,HOSTNAM E)那么,客户端就会首先在tnsna mes.ora文件中找orcl的记录。
如果没有相应的记录则尝试把orcl当作一个主机名,通过网络的途径去解析它的i p地址然后去连接这个ip上GLOBA L_DBNA ME=orcl这个实例,当然我这里or cl并不是一个主机名如果我是这个样子:NAMES.DIRECTO RY_PAT H= (TNSNAME S)那么客户端就只会从tnsn ames.ora查找or cl的记录。
括号中还有其他选项,如LDAP等并不常用。
附注:没有SQLNET.AUTHENT ICATIO N_SERV ICES= (NTS)这条语句,用户登录时就不经过OS认证,而需要通过用户名/密码认证登录。
tkprof tracefile outputfile [explain=] [table=] [print=] [insert=] [sys=] [sort=]explain用于获取执行计划,但不建议使用table 和explain一起使用,不建议使用print 用于限制输出文件生成的SQL语句的数量。
默认是无限制的,只有在和参数sort一起使用的时候才有意义。
例如,只得到10个sql语句,参数必须指定为print=10。
aggregate 指定TKPROF是否单独处理同样内容的SQL语句。
默认情况下,不单独处理。
在跟踪文件中每个SQL语句是独立处理的。
任何聚合都会丢死信息。
比如这样的案例,一个具有多个子游标的游标可能有不同的执行计划,但会当成一个SQL语句来处理。
即使很多是都采用默认值都不会有什么问题,但在有些时候最好是指定aggregate=no,以便能看一下单独的每个sql语句。
insert 告诉tkprof生成sql脚本,sql脚本可以用来存储信息到数据库中。
sql脚本的名字由参数本身指定,如:insert=load.sqlsys 指定sys用户运行的sql语句是否也写入到输出文件中。
默认值为yes,大多数情况设置为no可以避免不必要的输出信息。
不必要是因为通常没办法控制sys用户递归执行的sql 语句record 让tkprof生成sql脚本,里面包含在跟踪文件中找到的所有非递归语句,脚本名通过参数本身来指定(record=re.sql)。
根据文档,这个特性可以用来重演sql语句。
不过既然绑定变量不能处理,这通常是不可能的。
waits 决定关于等待事件的信息是否添加到输出文件中,默认是添加的,没必要设置sorts 指定要写入输出文件中的sql语句的顺序。
默认是跟踪文件中发现的sql顺序。
prsela 针对一个游标解析耗费的时间,exeela针对游标执行花费的时间,fchela针对游标获取数据行所花费的时间。
oracle ebs 收集trace 方法Oracle EBS 是一款常用的企业资源规划(ERP)系统,用于管理企业的财务、物流、供应链和人力资源等方面的业务。
在使用Oracle EBS 进行故障排查时,收集trace 信息是一种常见的方法。
本文将详细介绍如何收集trace,以及如何分析和利用这些trace 数据解决问题。
一、什么是trace?Trace 是Oracle 数据库中用于跟踪和记录执行过程的一种机制。
通过启用trace 功能,Oracle 数据库可以在执行过程中生成详细的日志,包括SQL 语句、程序调用、执行计划等信息。
这些信息对于分析和解决性能问题非常有帮助。
二、为什么需要收集trace?在Oracle EBS 中,性能问题是常见的挑战之一。
当用户反馈系统运行缓慢或者出现异常时,我们通常需要通过收集trace 数据来了解执行过程中的细节,定位问题的根本原因。
通过收集trace,我们可以获得SQL 语句的执行计划,了解SQL 语句执行时的资源消耗情况,进而分析和优化SQL 语句,提升系统性能。
三、如何收集trace?1. 确定跟踪级别:根据问题的性质,选择合适的跟踪级别。
Oracle 提供了多种级别的trace,如最详细的10046 级别,用于跟踪单个SQL 语句的执行过程;还有更高级别的10053 级别,用于跟踪SQL 语句执行计划的生成过程。
2. 开启trace:可以通过以下方法启用trace 功能:a. 对于单个会话的trace,可以使用ALTER SESSION 命令。
例如,执行`ALTER SESSION SET SQL_TRACE=TRUE;` 开启跟踪,执行`ALTER SESSION SET SQL_TRACE=FALSE;` 关闭跟踪。
b. 对于整个系统的trace,可以在数据库的初始化参数文件中设置`SQL_TRACE=TRUE;` 来开启所有会话的跟踪。
3. 收集trace 文件:在启用trace 后,Oracle 将在指定的位置生成跟踪文件。
数据库监控与性能评估的指标和工具数据库是现代应用程序的重要组成部分,而数据库监控与性能评估是确保数据库正常运行、高效工作的关键。
在这篇文章中,我们将重点讨论数据库监控与性能评估的指标和工具。
一、数据库监控指标1. CPU利用率:衡量数据库服务所占用的CPU资源。
过高的CPU利用率可能表明数据库服务器存在性能瓶颈或者应用程序存在问题。
2. 内存利用率:反映数据库服务器对内存资源的使用情况。
当内存利用率过高时,数据库性能可能受到影响,因为数据库系统需要频繁地进行内存读写操作。
3. 硬盘空间利用率:查看数据库和日志文件的空间使用情况。
当硬盘空间利用率达到饱和时,数据库可能无法继续写入数据,从而导致系统故障。
4. 网络流量:衡量数据库服务器与应用程序之间的数据传输量。
高网络流量可能导致延迟增加和系统响应时间增加。
5. 数据库连接数:反映同时连接到数据库服务器的用户数量。
连接数过高可能对数据库性能产生负面影响。
6. 锁等待时间:记录等待锁的时间。
长时间的锁等待可能表明存在并发问题。
二、数据库性能评估指标1. 响应时间:衡量从用户发送请求到系统返回结果的时间。
较低的响应时间是保证用户体验的关键。
2. 吞吐量:指数据库系统在单位时间内能够处理的事务数量。
高吞吐量可以确保数据库系统顺利处理高负载的请求。
3. 数据库延迟:衡量数据库读写操作的速度。
较低的延迟可以提升数据库响应速度,从而提高用户体验。
4. 数据一致性:确保数据库中的数据在不同时间点的读取结果是一致的。
数据一致性是数据库系统正常运行的重要保障。
5. 数据库可用性:反映数据库系统在一定时间内正常运行的比例。
高可用性是保证数据安全和运行稳定的重要指标。
三、数据库监控工具1. MySQL Enterprise Monitor:针对MySQL数据库进行监控和管理的商业工具。
它可以通过图形界面实时监测数据库的性能指标,并提供了警报功能,让管理员能够第一时间获得有关数据库问题的信息。
oracle的执行计划Oracle是一种关系型数据库管理系统,执行计划是指在Oracle数据库中执行SQL语句的方式和过程。
它是由Oracle优化器生成的一种“蓝图”,它描述了通过何种方式来执行SQL以获得所需结果集。
这个“蓝图”包含有关要使用哪种访问方法,如何组合表和索引以及如何过滤结果集的信息,执行计划的准确性和有效性是影响SQL执行效率的主要因素之一。
一、Oracle执行计划的基本原理Oracle在执行SQL的时候,会自动根据查询条件和表结构等因素生成一份执行计划。
在执行计划的生成过程中,Oracle会根据不同的查询方法和算法,通过消耗最少的时间来获取查询结果。
因此,对于复杂的SQL查询,可能会有多个执行计划可供选择,而不同的执行计划会对查询效率产生显著的影响。
在考虑生成执行计划的方法和算法时,Oracle优化器一般会考虑以下几个因素:1. 索引的选择:如果有可用的索引可以用于查询,优化器就会选择使用索引。
2. 连接方式:Oracle查询可以使用多种连接方式,如NL join, Hash join和Sort merge join等,优化器会尝试选择最适合当前查询的连接方式。
3. 筛选条件的处理:Oracle会尝试使用所有可用的筛选条件来限制查询结果,以便从数据表中检索出尽可能少的行。
4. 查询方式:Oracle可以使用多种查询方式来获得所需结果,如扫描整个表或仅使用部分表,或使用合并或排序等操作来产生所需结果。
在执行计划的生成过程中,优化器通过对表统计信息的分析和对SQL语句分析,可以获得优化方案的估计成本,并选择代价最小的执行计划来执行查询。
二、Oracle执行计划的格式在Oracle中,可以使用EXPLAIN PLAN语句来查看SQL执行计划。
执行计划的输出结果通常包括以下几个部分:1. ID: 执行计划中每个操作的唯一标识符,可以作为连接其他操作的依据。
2. Operation: 执行计划中每个操作的名称。
Tkprof: 分析ORACLE跟踪文件文章分类:数据库Tkprof: 分析ORACLE跟踪文件并且产生一个更加人性化清晰的输出结果的可执行工具TKPROF使用步骤1.设置参数文件设置三个参数timed_staticstices、user_dump_dest、max_dump_file_sizetimed_staticstices 用于启动或禁止对定时统计信息(如CUP时间、占用时间),以及动态性能表中多种统计信息的收集功能alter session set timed_statistics true;alter system set timed_statistics false;MAX_DUP_FILE_SIZE 当实例层启用SQL TRACE的时候,在每次请求服务器的时候,都将在跟踪文件中产生一个文本行,这些文件的最大尺寸受限于初始化参数的设置。
默认为500(blocks)。
若里面的数据被截断则增大SIZE。
若为UNLIMITED则意味着没有上限。
USER_DUMP_DEST 设置跟踪文件的存储位置。
默认为admin/用户/udump;alter system set user_dump_dest=newdir2.启动SQL TRACE实用工具对会话启动SQL TRACEalter session set sql_trace=true;alter session set sql_trace=false;SYS.DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION=( SID , SERIAL# ,TRUE );SID,SERIAL#可以从V$SESSION视图获得。
ALTER SESSION SET EVENTSalter session set events '10046 trace name context forever,level<n>';alter session set events '10046 trace name context off';alter system set events '10046 trace name context forever,level 1'alter system set events '10046 trace name context off'n=1---------激活标准SQL_TRACE工具,这与设置SQL_TRACE=TRUE 没有任何不同;n=4---------激活标准SQL_TRACE,且可以扑获跟踪文件中的绑定变量。
n=8---------激活标准SQL_TRACE,且可在查询级上扑获跟踪文件中的等待事件。
n=12--------激活标准SQL_TRACE,并包括扑获绑定变量与等待事件。
对用户实例启动 SQL TRACEalter system set sql_trace=true;alter system set sql_trace=false;3.使用tkprof格式化trace文件Usage: tkprof tracefile outputfile [explain= ] [table= ] [print= ] [insert= ] [sys= ] [sort= ] 输入文件格式化后的输出文件table=schema.tablename Use 'schema.tablename' with 'explain=' option.用于指定在将执行规划写进输出文件之前,TKPROF用于临时存放执行规划所用表的架构和名称explain=user/password Connect to ORACLE and issue EXPLAIN PLAN.print=integer List only the first 'integer' SQL statements. 只列出输出文件中的第一个INTEGER的SQL语句,若忽略,则TKPROF将列出所有跟踪的SQL语句aggregate=yes|no 若用户指定AGGREGATE=NO,TKPROF将不会对相同SQL文本的多个用户进行汇总insert=filename List SQL statements and data inside INSERT statements. SQL脚本的一种,用于将跟踪文件的动机信息存储到数据库中sys=no TKPROF does not list SQL statements run as user SYS. 于启动或禁止将用户SYS所发布的SQL语句列表到输出文件之中,也包括递归SQL(为执行用户的SQL 语句,ORACLE还必须执行一些附加语句)语句在内。
默认为YESrecord=filename Record non-recursive statements found in the trace file. 对于跟踪文件中的所用非递归SQL语句,TKPROF 将以指定的名称来创建某个SQL脚本。
用于对跟踪文件中的用户时间进行重放waits=yes|no Record summary for any wait events found in the trace file.sort=option Set of zero or more of the following sort options: 在将被跟踪的SQL语句列表输出到跟踪文件之前,先将其按照指定排序选项的降序关系对其进行排序;若指定了多种排序选项,那么根据排序选项所指定值的和的降序关系对其进行排序;若忽略此参数,那么TKPROF将按照使用次序把语句列表到输出文件中prscnt number of times parse was called 语句解析的数目prscpu cpu time parsing 语句解析所占用的CPU时间prsela elapsed time parsing 语句解析所占用的时间(总是大于或等于CPU时间);prsdsk number of disk reads during parse 语句解析期间,从磁盘进行物理读取的数目prsqry number of buffers for consistent read during parse 语句解析期间,一致模式块读取(CONSISTENT MODE BLOCK READ)的数目prscu number of buffers for current read during parse 语句解析期间,当前模式读取(CURRENT MODE BLOCK READ)的数目prsmis number of misses in library cache during parse 语句解析期间,库缓存失败的数目execnt number of execute was called 语句执行的数目execpu cpu time spent executing 语句执行所占用的CPU时间exeela elapsed time executing 语句执行所占用的时间(总是大于或等于CPU时间)exedsk number of disk reads during execute 语句执行期间,从磁盘进行物理读取的数目exeqry number of buffers for consistent read during execute 语句执行期间,一致模式块读取(CONSISTENT MODE BLOCK READ)的数目execu number of buffers for current read during execute 语句执行期间,当前模式读取(CURRENT MODE BLOCK READ)的数目exerow number of rows processed during execute 语句执行期间,所处理的语句行数exemis number of library cache misses during execute 语句执行期间,库缓存失败的数目fchcnt number of times fetch was called 取数据的数目fchcpu cpu time spent fetching 取数据所占用的CPU时间fchela elapsed time fetching 取数据所占用的时间(总是大于或等于CPU时间)fchdsk number of disk reads during fetch 取数据期间,从磁盘进行物理读取的数目fchqry number of buffers for consistent read during fetch 取数据期间,一致模式块读取(CONSISTENT MODE BLOCK READ)的数目fchcu number of buffers for current read during fetch 取数据期间,当前模式读取(CURRENT MODE BLOCK READ)的数目fchrow number of rows fetched 所获取的行数userid userid of user that parsed the cursorprof文件的阅读========另外一篇==========ORACLE TKPROF使用步骤1.Tkprof是一个分析ORACLE跟踪文件并且产生一个更加人性化清晰的输出结果的可执行工具。
C:oracleora92bintkprof.exe2. tkprof 全称TKPROF stands for transient kernel profiler.3. 基本的使用步骤1) SQL> alter system set timed_statistics=true;2) 用户级自跟踪:SQL>ALTER SESSION SET SQL_TRACE=TRUE;SQL>ALTER SESSION SET SQL_TRACE=FALSE;用户级DBA跟踪:(例如sys跟踪test,需要用sysdba登录). a). SQL>select ERNAME,s.SID,s.SERIAL#,MAND from v$session s where ERNAME='COLM' ;b). SQL>exec sys.dbms_system.set_sql_trace_in_session(9,7,true);c). SQL>exec sys.dbms_system.set_sql_trace_in_session(9,7,false);ps:9为SID,7为SERIAL#3) C:> cd C:oracleadminCOLMudump4) C:oracleadminCOLMudump> tkprof colm_ora_2056.trc trace.txt print=100record=sql.txt sys=no5) 查看trace.txt文件范例:************************************************************************ *******SELECT *FROMcol_casecall count cpu elapsed disk query current rows------- ------ -------- ---------- ---------- ---------- ---------- ----------Parse 1 0.00 0.00 0 0 0 0Execute 0 0.00 0.00 0 0 0 0Fetch 0 0.00 0.00 0 0 0 0------- ------ -------- ---------- ---------- ---------- ---------- ----------total 1 0.00 0.00 0 0 0 0Misses in library cache during parse: 1Optimizer goal: CHOOSEParsing user id: 62需要调整的语句符合以下几点:(1).CPU占用过多(2).Parse,Execute,Fetch花费太多时间(3).DISK读取太多,query/current(SGA)中数据块读取太少(4).访问许多块,只返回2行==========使用TKPROF转换跟踪文件为可读格式==============Oracle可以使用ALTER SESSION来设置一个底层的跟踪,只要启用该跟踪,Oracle将所有的SQL和应用程序使用的顶层的PL/SQL调用记录到服务器上的跟踪文件中(udump/*.trc)。