方法一
启动开启会话监听:
alter session set statistics_level=all;
跟踪出来的sql 语句:
select * from v$sql order by first_load_time desc ;
解析:
V$SQL 的说明
V$SQL 在子游标的级别上列出了在共享区域(shared pool)中的 SQL 语句的统计信息,子游标通过 SQL_ID 和 Child_Number 标识。V$SQL 中的视图信息一般在 SQL 执行的最后进行更新。然而,对于长时间执行的 SQL,每5秒会更新一次 v$SQL 视图
SQL_TEXT 当子前游标的SQL文本的前一千个字符
SQL_FULLTEXT 以CLOB类型存储的当前游标的SQL文本的所有字符
SQL_ID 当前子游标的父游标即 SQL 语句在 Library Cache 中的标识符
SHARABLE_MEM 子游标使用的共享内存量(字节)
PERSISTENT_MEM 用于子游标生存期的固定内存量(字节)
RUNTIME_MEM 在执行子游标期间需要的固定内存量
SORTS 为此子游标完成的排序次数
LOADED_VERSIONS 指示上下文堆是否加载(1)或不加载(0)
OPEN_VERSIONS 指示子游标是否被锁定(1)或不(0)
USERS_OPENING 打开任何子游标的用户数量
FETCHES 与SQL语句关联的提取数量
EXECUTIONS 该对象自被载入库缓存(Library Cache)后执行的次数
PX_SERVERS_EXECUTIONS 以并行方式执行的总次数(0当语句从未并行执行时)
END_OF_FETCH_COUNT 自光标被引入库缓存后,此游标完全执行的次数
USERS_EXECUTING 执行语句的用户数
LOADS 对象加载或重新加载的次数
FIRST_LOAD_TIME 父创建时间的时间戳
INVALIDATIONS 此子游标已失效的次数
PARSE_CALLS 这个子游标的解析调用次数
DISK_READS 此子游标的磁盘读取次数
DIRECT_WRITES 这个子游标的直接写入次数
BUFFER_GETS 此子游标的缓存区读取的次数
APPLICATION_WAIT_TIME 应用程序等待时间(微秒)
CONCURRENCY_WAIT_TIME 并发等待时间(微秒)
CLUSTER_WAIT_TIME 集群等待时间(微秒)
USER_IO_WAIT_TIME 用户I/O等待时间(微秒)
PLSQL_EXEC_TIME PL/SQL执行时间(微秒)
JAVA_EXEC_TIME Java执行时间(微秒)
ROWS_PROCESSED 解析的SQL语句返回的总行数
COMMAND_TYPE Oracle命令类型定义
OPTIMIZER_MODE 执行SQL语句的模式
OPTIMIZER_COST 优化器给出的这个查询的代价
OPTIMIZER_ENV 优化器环境
OPTIMIZER_ENV_HASH_VALUE 优化器环境的哈希值
PARSING_USER_ID 最初构建此子游标的用户的用户标识
PARSING_SCHEMA_ID 最初用来构建这个子游标的模式ID
PARSING_SCHEMA_NAME 用于最初构建此子游标的架构名称
KEPT_VERSIONS 指示是否使用该DBMS_SHARED_POOL包将此子游标标记为保留在库缓存中
ADDRESS 该游标的父级句柄的地址
TYPE_CHK_HEAP 这个子游标的类型检查堆的描述符
HASH_VALUE 库缓存(Library Cache)中父游标对应SQL语句的散列值
OLD_HASH_VALUE 旧的SQL哈希值
PLAN_HASH_VALUE 此游标的SQL计划的哈希值。比较两个计划是否相同可用该字段
CHILD_NUMBER 这个子游标的编号
SERVICE 服务的名称
SERVICE_HASH 服务名称的Hash值
MODULE 首次分析SQL语句时执行的模块名称;通过调用DBMS_APPLICATION_INFO.SET_MODULE设置
MODULE_HASH 模块名称的散列值
ACTION 首次分析SQL语句时执行的操作名称;通过调用DBMS_APPLICATION_INFO.SET_ACTION设置
ACTION_HASH 操作名称的散列值
SERIALIZABLE_ABORTS 事务未能序列化产生ORA-08177错误的次数
OUTLINE_CATEGORY 如果在构建游标期间应用了Outline,则此列将为Outline的类别。否则该列留空
CPU_TIME 此游标用于解析/执行/获取的CPU使用时间(微秒)
ELAPSED_TIME 该游标用于解析/执行/获取的等待时间(微秒)
OUTLINE_SID Outline Session的标识符
CHILD_ADDRESS 子游标的地址
SQLTYPE 表示用于此语句的SQL语言的版本
REMOTE 指示游标是否为远程映射(Y)或不(N)
OBJECT_STATUS 游标状态
LITERAL_HASH_VALUE 用系统生成的绑定变量替换的文本的散列值;如果CURSOR_SHARING未使用,则值为0
LAST_LOAD_TIME 查询计划加载到库缓存(Library Cache)中的时间
IS_OBSOLETE 指示游标是否已过时(Y)或不(N);如果子游标的数量太大,就会发生这种情况
LAST_ACTIVE_TIME 时间查询计划上次处于活动状态
TYPECHECK_MEM TypeCheck内存
IO_INTERCONNECT_BYTES Oracle数据库与存储系统之间交换的I/O字节数
LOCKED_TOTAL 子游标被锁定的总次数
PINNED_TOTAL 子游标被锁定的总次数
V$SQLAREA 的说明
V$SQLAREA中列出的也是在共享区域(Shared Pool)中的 SQL 语句的统计信息,且其中的字段和 v$SQL 基本一致,不同的是 V$SQLAREA 是在父游标级别上做出的汇总统计,相当于对 v$SQL 进行了 group by SQL_ID 的汇总
SQL_TEXT 当前游标的SQL文本的前一千个字符
SQL_FULLTEXT 以CLOB类型存储的当前游标的SQL文本的所有字符
SQL_ID 当前子游标的父游标即 SQL 语句在 Library Cache 中的标识符
SHARABLE_MEM 所有子游标使用的所有共享内存的总和
PERSISTENT_MEM 所有子游标的生命周期使用的固定内存总和
RUNTIME_MEM 执行所有子游标期间所需的所有内存的固定总和
SORTS 为所有子游标完成的排序总数
VERSION_COUNT 此父级下的缓存中存在的子游标数
LOADED_VERSIONS 缓存中存在的子游标数,并加载其上下文堆
OPEN_VERSIONS 当前在当前父级下打开的子游标数
USERS_OPENING 打开任何子游标的用户数量
FETCHES 与SQL语句关联的提取数量
EXECUTIONS 总计执行次数,总计在所有子游标上
PX_SERVERS_EXECUTIONS 并行执行服务器执行的总执行次数(0当语句从未并行执行时)
END_OF_FETCH_COUNT 自游标被载入库缓存(Library Cache)后,此游标完全执行的次数
USERS_EXECUTING 在所有子游标上执行语句的用户总数
LOADS 对象加载或重新加载的次数
FIRST_LOAD_TIME 父游标创建时间的时间戳
INVALIDATIONS 所有子游标的失效总数
PARSE_CALLS 解析调用该游标的所有子游标的总和
DISK_READS 所有子游标上磁盘读取次数的总和
DIRECT_WRITES 在所有子游标上直接写入的总数
BUFFER_GETS 所有子游标上缓存区读取次数的总和
APPLICATION_WAIT_TIME 应用程序等待时间(微秒)
CONCURRENCY_WAIT_TIME 并发等待时间(微秒)
CLUSTER_WAIT_TIME 集群等待时间(微秒)
USER_IO_WAIT_TIME 用户I/O等待时间(以微秒为单位)
PLSQL_EXEC_TIME PL/SQL执行时间(微秒)
JAVA_EXEC_TIME Java执行时间(微秒)
ROWS_PROCESSED 代表此SQL语句处理的总行数
COMMAND_TYPE Oracle命令类型定义
OPTIMIZER_MODE 执行SQL语句的模式
OPTIMIZER_COST 优化器给出的这个查询的代价
OPTIMIZER_ENV 优化器环境
OPTIMIZER_ENV_HASH_VALUE 优化器环境的哈希值
PARSING_USER_ID 已解析此父级下的第一个游标的用户的用户标识
PARSING_SCHEMA_ID 用于分析此子游标的模式ID
PARSING_SCHEMA_NAME 用于分析此子级游标的模式名称
KEPT_VERSIONS 使用DBMS_SHARED_POOL软件包标记为保留的子游标的数量
ADDRESS 该游标的父级句柄的地址
HASH_VALUE 库缓存中父语句的散列值
OLD_HASH_VALUE 旧的SQL哈希值
PLAN_HASH_VALUE 此游标的SQL计划的数字表示。比较两个计划是否相同可用该字段
MODULE 首次分析SQL语句时执行的模块名称,通过调用DBMS_APPLICATION_INFO.SET_MODULE设置
MODULE_HASH 模块名称的哈希值
ACTION 首次分析SQL语句时执行的操作名称,通过调用DBMS_APPLICATION_INFO.SET_ACTION设置
ACTION_HASH 操作名称的哈希值
SERIALIZABLE_ABORTS 在所有子游标中事务未能序列化产生ORA-08177错误的次数的总和
OUTLINE_CATEGORY 如果在构建游标期间应用了Outline,则此列将为Outline的类别。否则该列留空
CPU_TIME 此游标用于解析/执行/获取的CPU使用时间(以微秒为单位)
ELAPSED_TIME 该游标用于解析/执行/获取的等待时间(以微秒为单位)
OUTLINE_SID Outline Session的标识符
LAST_ACTIVE_CHILD_ADDRESS 在所有的子游标中最后一个活动的即最后更新V$SQL的子游标的地址标识
REMOTE 指示游标是否为远程映射(Y)或不(N)
OBJECT_STATUS 游标的状态
LITERAL_HASH_VALUE 用系统生成的绑定变量替换的文本的散列值;如果CURSOR_SHARING未使用,则值为0
LAST_LOAD_TIME 查询计划加载到库库缓存(Library Cache)中的时间
IS_OBSOLETE 指示游标是否已过时(Y)或不(N)。如果子游标的数量太大,就会发生这种情况。
LAST_ACTIVE_TIME 查询计划上次处于活动状态的时间
TYPECHECK_MEM Typecheck内存
IO_INTERCONNECT_BYTES Oracle数据库与存储系统之间交换的I/O字节数
LOCKED_TOTAL 所有子游标被锁定的总次数
PINNED_TOTAL 所有子游标被锁定的总次数
V$SQLSTATS 的说明
V$SQLSTATS 显示 SQL 游标的基本性能统计信息,并且每个 SQL 语句包含一行(即每个 SQL_ID 的唯一值一行)。 V$SQLSTATS 中的列的列定义与 V$SQL 和 V$SQLAREA 视图中的列定义相同。但是,V$SQLSTATS 视图与 V$SQL 和 V$SQLAREA 不同,因为它更快,更具可扩展性并具有更高的数据保留(即使游标已经超出共享池,统计信息仍可能出现在此视图中)。 请注意,V$SQLSTATS 包含出现在 V$SQL 和 V$SQLAREA 中的列的子集
SQL_TEXT 当前游标的SQL文本的前一千个字符
SQL_FULLTEXT 以CLOB类型存储的当前游标的SQL文本的所有字符
SQL_ID 当前子游标的父游标即 SQL 语句在 Library Cache 中的标识符
LAST_ACTIVE_TIME 最后一次更新游标统计信息的时间
LAST_ACTIVE_CHILD_ADDRESS 最后一次更新游标统计信息的子游标的地址
PLAN_HASH_VALUE 此游标的SQL计划的哈希值;比较两个计划是否相同可以使用该字段
PARSE_CALLS 使用此SQL文本和计划的所有游标的解析调用数量
DISK_READS 使用此SQL文本和计划的所有游标的磁盘读取次数
DIRECT_WRITES 使用此SQL文本和计划的所有游标的直接写入次数
BUFFER_GETS 使用此SQL文本和计划的所有游标的读取内存次数
ROWS_PROCESSED 解析的SQL语句返回的总行数
SERIALIZABLE_ABORTS 事务未能序列化产生ORA-08177错误的次数
FETCHES 与SQL语句关联的提取数量
EXECUTIONS 该游标被载入库缓存(Library Cache)后执行的次数
END_OF_FETCH_COUNT 自游标被载入库缓存(Library Cache)后,此游标完全执行的次数
LOADS 游标被加载或重新加载的总次数
VERSION_COUNT 使用此SQL文本和计划的所有存在于缓存中的子游标数量
INVALIDATIONS 此游标的子游标已失效的次数
PX_SERVERS_EXECUTIONS 并行执行服务器执行的总执行次数(0当语句从未并行执行时)
CPU_TIME 此游标用于解析/执行/获取的CPU使用时间(微秒)
ELAPSED_TIME 该游标用于解析/执行/获取的已使用时间(微秒)
AVG_HARD_PARSE_TIME 该游标用于解析/执行/获取的平均硬解析时间(微秒)
APPLICATION_WAIT_TIME 应用程序等待时间(微秒)
CONCURRENCY_WAIT_TIME 并发等待时间(微秒)
CLUSTER_WAIT_TIME 等待OracleRAC集群资源所花费的累积等待的总时间(微秒)
USER_IO_WAIT_TIME 用户I/O等待时间(微秒)
PLSQL_EXEC_TIME PL/SQL执行时间(微秒)
JAVA_EXEC_TIME Java执行时间(微秒)
SORTS 为子游标完成的排序次数
SHARABLE_MEM 此SQL文本和计划当前由所有游标占用的共享内存总量(字节)
TOTAL_SHARABLE_MEM 所有使用此SQL文本的游标都完全加载要占用的共享内存(字节)
V$SQL_PLAN 的说明
V$SQL_PLAN 中包含加载到库缓存中的每个子游标的执行计划信息
ADDRESS 该游标的父级句柄的地址
HASH_VALUE 库缓存中父语句的散列值;可以使用ADDRESS和HASH_VALUE列关联V$SQLAREA表
SQL_ID 库缓存中父游标的SQL标识符
PLAN_HASH_VALUE 该游标的执行计划的Hash值。比较两个计划是否相同可以使用该字段
CHILD_ADDRESS 该子游标的地址
CHILD_NUMBER 该子游标的编号;可以使用ADDRESS、HASH_VALUE和CHILD_NUMBER三列关联V$SQL表
TIMESTAMP 生成这个子游标的执行计划的时间戳
OPERATION 在这个步骤中执行的内部操作的名称
OPTIONS 描述OPERATION列的操作变化
OBJECT_NODE 用于引用对象的数据库链接的名称
OBJECT# 表或索引的标识号
OBJECT_OWNER 拥有包含表或索引的Schema的用户的名称
OBJECT_NAME 表或索引的名称
OBJECT_ALIAS 对象的别名
OBJECT_TYPE 对象的类型
OPTIMIZER 计划中第一行的优化模式
ID 分配给执行计划中每个步骤的编号
PARENT_ID 对当前步骤的输出进行下一个执行步骤的ID
DEPTH 树中操作的深度
POSITION 所有具有相同PARENT_ID的操作的处理顺序
SEARCH_COLUMNS 带有启动和停止键的索引列
COST 根据优化器基于成本的方法估算的操作成本
CARDINALITY 通过基于成本的优化器估计操作产生的行数
BYTES 通过基于成本的优化器估计操作产生的字节数
OTHER 其他特定的执行步骤的信息
OTHER_TAG 介绍该OTHER列的内容
PARTITION_START 范围存取分区中的开始分区
PARTITION_STOP 范围存取分区中的开始分区
PARTITION_ID 计算PARTITION_START和PARTITION_STOP列的值的步数
DISTRIBUTION 存储用于将生产者查询服务器的行分配给使用者查询服务器的方法
CPU_COST 根据优化器的基于成本的方法估算的操作的CPU成本;基于规则的方法的语句列为空
IO_COST 根据优化器基于成本的方法估算的操作的I/O成本;基于规则的方法的语句列为空
TEMP_SPACE 根据优化器基于成本的方法估算的操作临时空间大小;基于规则的方法的语句列为空
ACCESS_PREDICATES 用于在访问结构中定位的列
FILTER_PREDICATES 用于在生成数据前过滤的列
PROJECTION 操作产生的表达式
TIME 按照优化程序的基于成本的方法估算的操作的经过时间;基于规则的方法的语句列为空
QBLOCK_NAME 查询块的名称
REMARKS 备注
OTHER_XML 提供特定于执行计划执行步骤的额外信息
V$SESSION 的说明
V$SESSION 显示每个当前会话的会话信息。每一个连接到数据库实例中的Session都拥有一条记录,包括用户Session及后台进程如DBWR,LGWR,Arcchiver等
SADDR 会话地址
SID 会话标识符
SERIAL# 会话序列号。用于在SID被重用时唯一标识一个会话对象
AUDSID 审计会话ID
PADDR 拥有会话的进程的地址;关联v$process的addr字段可以查询到进程对应的Session
USER# 会话的用户标识符;同于dba_users中的user_id,Oracle内部进程user#为0
USERNAME 会话的用户名;等于dba_users中的username,Oracle内部进程的username为空
COMMAND 正在执行的SQL语句(最后解析的语句)
OWNERID 用于会话迁移、并行等拥有可迁移会话的用户的标识符;值为2147483644时无效
TADDR 交易状态对象的地址
LOCKWAIT 标识当前会话是否处于锁等待的状态;非空为等待的锁的地址,空表示无等待
STATUS 会话状态:ACTIVE-正在执行SQL;INACTIVE-不活动;KILLED-标记为被杀
SERVER 服务器类型
SCHEMA# 架构标识符;Oracle内部进程的schema#为0
SCHEMANAME 架构名称;Oracle内部进程的为sys
OSUSER 操作系统客户端用户名
PROCESS 操作系统客户端进程ID
MACHINE 操作系统机器名称
PORT 客户端端口号
TERMINAL 操作系统终端名称
PROGRAM 操作系统程序名称
TYPE 会话类型
SQL_ADDRESS 与SQL_HASH_VALUE一起用于标识当前正在执行的SQL语句
SQL_HASH_VALUE 与SQL_ADDRESS一起使用来标识当前正在执行的SQL语句
SQL_ID 当前正在执行的SQL语句的SQL标识符
SQL_CHILD_NUMBER 当前正在执行的SQL语句的子游标编号
SQL_EXEC_START 此会话当前执行的SQL执行的时间;如果SQL_ID为NULL,则为NULL
SQL_EXEC_ID SQL执行标识符;如果SQL_ID为NULL或者该SQL的执行尚未开始则为NULL
PREV_SQL_ADDR 与PREV_HASH_VALUE一起使用以标识最后执行的SQL语句
PREV_HASH_VALUE 与PREV_SQL_ADDR一起用于标识最后执行的SQL语句
PREV_SQL_ID 执行的最后一条SQL语句的SQL标识符
PREV_CHILD_NUMBER 最后执行的SQL语句的子游标编号
PREV_EXEC_START 最后执行的SQL语句的开始执行时间
PREV_EXEC_ID 最后执行的SQL语句的SQL执行标识符
PLSQL_ENTRY_OBJECT_ID 堆栈中最上面的PL/SQL子程序的对象ID;如果堆栈中没有PL/SQL子程序则为NULL
PLSQL_ENTRY_SUBPROGRAM_ID 堆栈中最上面的PL/SQL子程序的子程序ID;如果堆栈中没有PL/SQL子程序则为NULL
PLSQL_OBJECT_ID 当前正在执行的PL/SQL子程序的对象ID;如果执行SQL,则为NULL
PLSQL_SUBPROGRAM_ID 当前正在执行的PL/SQL对象的子程序ID;如果执行SQL,则为NULL
MODULE 通过调用DBMS_APPLICATION_INFO.SET_MODULE过程设置的当前正在执行的模块名称
MODULE_HASH MODULE列的哈希值
ACTIONFootref1 通过调用DBMS_APPLICATION_INFO.SET_ACTION过程设置的当前正在执行的操作名称
ACTION_HASH ACTION列的哈希值
CLIENT_INFO 由DBMS_APPLICATION_INFO.SET_CLIENT_INFO程序设置的信息
FIXED_TABLE_SEQUENCE 当Session完成一次对数据库的调用后就会增加的一个数值
ROW_WAIT_OBJ# 当前被锁定的行所在表的对象标识;和DBA_OBJECT的OBJECT_ID得到被锁定的TABLE NAME
ROW_WAIT_FILE# 当前被锁定的行所在的数据文件的标识符
ROW_WAIT_BLOCK# 当前被锁定的行所在的块的标识符;
ROW_WAIT_ROW# 当前被锁定的行。只当会话正等另一事务提交且ROW_WAIT_OBJ#值不为-1时此列才有效
LOGON_TIME 登录时间
LAST_CALL_ET 当前会话状态为ACTIVE/INACTIVE的保持时间(秒)
RESOURCE_CONSUMER_GROUP 会话的当前资源使用者的组的名称
PDML_STATUS ENABLED时会话为PARALLEL DML模式;DISABLED则不支持;FORCED则强制为该模式
PDDL_STATUS ENABLED时会话为PARALLEL DDL模式;DISABLED则不支持;FORCED则强制为该模式
PQ_STATUS ENABLED时会话为PARALLEL QUERY模式;DISABLED则不支持;FORCED则强制为该模式
CURRENT_QUEUE_DURATION 会话当前的排队时间量
CLIENT_IDENTIFIER 会话的客户端标识符
BLOCKING_SESSION_STATUS 是否存在阻止会话的详细信息
BLOCKING_INSTANCE 阻塞会话的实例标识符;只有BLOCKING_SESSION_STATUS的值为VALID时才有效
BLOCKING_SESSION 阻塞会话的会话标识符;只有BLOCKING_SESSION_STATUS的值为VALID时才有效
SEQ# 一个唯一标识当前或最后一次等待(每次等待增加)的数字
EVENT# 活动编号
EVENT 会话正在等待的资源或事件
WAIT_CLASS_ID 等待事件的类的标识符
WAIT_CLASS# 等待事件的类的数值
WAIT_CLASS 等待事件的类的名称
WAIT_TIME_MICRO 当前等待或者上次等待的等候的时间(微秒)
TIME_SINCE_LAST_WAIT_MICRO 自上次等待结束以来的时间(微秒);如果会话当前正在等待,则值为0
SERVICE_NAME 会话的服务名称
SQL_TRACE 指示是否启用SQL跟踪(ENABLED)或禁用(DISABLED)
SQL_TRACE_WAITS 指示是否启用等待跟踪(TRUE)或不(FALSE)
SQL_TRACE_BINDS 指示是否启用绑定跟踪(TRUE)或不(FALSE)
SQL_TRACE_PLAN_STATS 在每个游标的跟踪文件中转储行源统计信息的频率:
SESSION_EDITION_ID 显示在会话中将被报告的值sys_context('USERENV','SESSION_EDITION_ID')
CREATOR_ADDR 创建过程或电路的地址
CREATOR_SERIAL# 创建过程或电路的序列号
ECID 执行上下文的标识符(由ApplicationServer发送)
方法二
一、什么是跟踪文件?
跟踪文件中包含了大量而详细的诊断和调试信息。通过对跟踪文件的解读和分析,我们可以定位问题、分析问题和解决问题。从跟踪文件的产生的来源来看,跟踪文件又可以分为两类:一类是数据库的操作人员有意生成的;另一类则是由于出现了异常错误,由数据库自动生成的。对于后一类,只对Oracle内部的技术支持人员是有用的,但对于我们,则多半看不懂。前一类,则是我们经常用到的,帮助我们分析、调整和优化应用性能,处理并解决问题。
那么在哪里可以找到跟踪文件呢?通过查询数据字典v$diag_info可以确定跟踪文件的存储路径,如下所示。
1 |
|
进入目录/u01/app/oracle/diag/rdbms/orcl/orcl/trace可以看到以trc为后缀的跟踪文件,如下图所示。
二、跟踪文件的命名规则
一个跟踪文件的名字一般由以下几部分组成:
- ORACLE_SID
- 固定字符
- 服务器的进程ID号
- 文件后缀名 .trc
- 各部分之间以下划线连接。
例如:orcl_mmon_12210.trc,其中:“orcl" 是本环境下数据库的SID,"12210"为产生该跟踪文件会话所使用的服务器进程ID号。如何知道我的ORACLE_SID和会话所使用的服务器进程ID呢?
三、如何确定跟踪文件?
为了演示的方便,我们给一个普通用户scott授予dba的角色。
1、使用管理登录,并授予scott授予dba的角色
1 2 3 4 5 6 7 |
|
2、确定Oracle SID,如下所示。这里的SID就是:orcl
1 2 3 4 5 6 7 |
|
3、切换到scott用户,并确定会话ID
1 2 3 4 5 6 7 8 9 |
|
4、根据会话ID,确定会话的地址信息
1 2 3 4 5 6 7 |
|
5、根据会话的地址信息,确定操作系统的进程号
1 2 3 4 5 6 7 |
|
进入目录/u01/app/oracle/diag/rdbms/orcl/orcl/trace会发现,此时并不存在包含54685的跟踪文件,原因是要使用跟踪文件需要手动开启会话的跟踪。
6、开启会话的跟踪
1 2 3 4 5 |
|
7、执行一条简单的SQL语句,并检查/u01/app/oracle/diag/rdbms/orcl/orcl/trace目录,这时候就可以看到生成的跟踪文件。
1 2 3 4 5 |
|
四、使用跟踪文件诊断SQL
根据跟踪对于诊断SQL语句是非常有用的,下面通过一个简单的示例来说明。
1、执行下面的的SQL语句
1 2 3 4 5 |
|
这三条SQL分别查询10、20和30号部门的员工。通过观察发现,这三条SQL除了where的条件的参数值不一样,其他部分都是一样的。这样的SQL语句叫做“重复的SQL”。如果数据库中存在大量的重复SQL,会使得每次在执行的时候都会进行SQL的解析,再生成执行计划。从而影响数据库的性能。
下面通过跟踪文件来验证上面的结论。
2、由于前面开启了会话的跟踪,如果不再需要进行跟踪了,需要手动关闭一下。
1 2 3 4 5 |
|
3、使用tkprof工具格式化跟踪文件
1 2 3 4 5 6 |
|
4、查看生成的a.txt文件,如下所示:
1 2 3 4 5 6 7 8 9 10 11 |
|
可以看成尽管三条SQL对应的SQL ID不一样,但是生成的Plan Hash是一样的。这就说明这三条SQL的执行计划是一样的。既然如此,我们可以使用绑定变量的方式来改写这三条SQL。让这三条SQL语句在执行的时候,不用每次都生成执行计划。只需要复用第一次生成的执行计划即可。从而提高性能。
以上就是使用Oracle的跟踪文件的详细内容,更多关于Oracle跟踪文件的资料请关注脚本之家其它相关文章!