- 浏览: 543709 次
- 性别:
- 来自: 天津
文章分类
- 全部博客 (230)
- java (87)
- c/c++/c# (39)
- ASP.net MVC (4)
- eclipse/visual studio (3)
- tomcat/weblogic/jetty (13)
- linux/unix/windows (20)
- html/javascript/jquery/kendo/bootstrap/layui/vue/react (31)
- hibernate/struts/spring/mybatis/springboot (21)
- lucene/solr/ELK (2)
- shiro (0)
- oracle/sqlserver/mysql/postgresql (23)
- shell/python/ruby (6)
- android (0)
- maven/ant (1)
- freemarker/thymeleaf/velocity (1)
- open source project (41)
- cache/memcached/redis (0)
- nosql/hadoop/hbase/mongodb (0)
- system architecture/dubbo/zookeeper (0)
- software testing (0)
- system optimization (0)
- system security (0)
- tcp/udp/http (2)
- roller/wordpress (2)
- 工具收藏 (8)
- 文摘 (4)
- 生活 (0)
最新评论
-
coconut_zhang:
这个demo 非常完整了,是指下面说的那个html 模版,模版 ...
flying sauser, thymeleaf实现PDF文件下载 -
a93456:
你好,你有完整的demo吗? String template这 ...
flying sauser, thymeleaf实现PDF文件下载 -
yujiaao:
fn 函数循环是没有必要的啊,可以改成
protecte ...
Java 笛卡尔积算法的简单实现 -
安静听歌:
设置了.setUseTemporaryFileDuringWr ...
使用jxl导出大数据量EXCEL时内存溢出的解决办法 -
q280499693:
写的很详细,但是我现在想知道他们是怎么定位log4j.prop ...
关于SLF4J结合Log4j使用时日志输出与指定的log4j.properties不同
Tkprof工具可用来格式化sql trace产生的文件,让你更容易看懂trace的内容
用法:
tkprof tracefile outputfile [explain= ] [table= ] [print= ] [insert= ] [sys= ] [sort= ] ...
参数说明:
tracefile:你要分析的trace文件
outputfile:格式化后的文件
explain=user/password@connectstring
table=schema.tablename
注1:这两个参数是一起使用的,通过连接数据库对在trace文件中出现的每条sql语句查看执行计划,并将之输出到outputfile中
注2:该table必须是数据库中不存在的,如果存在会报错
print=n:只列出最初N个sql执行语句
insert=filename:会产生一个sql文件,运行此文件可将收集到的数据insert到数据库表中
sys=no:过滤掉由sys执行的语句
record=filename:可将非嵌套执行的sql语句过滤到指定的文件中去
waits=yes|no:是否统计任何等待事件
aggregate=yes|no:是否将相同sql语句的执行信息合计起来,默认为yes
sort= option:设置排序选项,选项如下:
prscnt:number of times parse was called
prscpu:cpu time parsing
prsela:elapsed time parsing
prsdsk:number of disk reads during parse
prsqry:number of buffers for consistent read during parse
prscu:number of buffers for current read during parse
prsmis:number of misses in library cache during parse
execnt:number of execute was called
execpu:cpu time spent executing
exeela:elapsed time executing
exedsk:number of disk reads during execute
exeqry:number of buffers for consistent read during execute
execu:number of buffers for current read during execute
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
fchela:elapsed time fetching
fchdsk:number of disk reads during fetch
fchqry:number of buffers for consistent read during fetch
fchcu:number of buffers for current read during fetch
fchrow:number of rows fetched
userid:userid of user that parsed the cursor
prscpu:cpu time parsing
prsela:elapsed time parsing
prsdsk:number of disk reads during parse
prsqry:number of buffers for consistent read during parse
prscu:number of buffers for current read during parse
prsmis:number of misses in library cache during parse
execnt:number of execute was called
execpu:cpu time spent executing
exeela:elapsed time executing
exedsk:number of disk reads during execute
exeqry:number of buffers for consistent read during execute
execu:number of buffers for current read during execute
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
fchela:elapsed time fetching
fchdsk:number of disk reads during fetch
fchqry:number of buffers for consistent read during fetch
fchcu:number of buffers for current read during fetch
fchrow:number of rows fetched
userid:userid of user that parsed the cursor
可根据自己的需要设置排序
举例:
1.列出前2条sql语句的执行情况:
C:\>tkprof c:\oc_ora_2892.trc c:\cc.txt print=2
2.将数据保存到数据库:
C:\>tkprof c:\oc_ora_2892.trc c:\cc.txt insert=c:\insert.sql
执行后会在c:\产生insert.sql文件,执行该文件即可将数据保存到数据库,以下为insert.sql部分内容:
REM Edit and/or remove the following CREATE TABLE
REM statement as your needs dictate.
CREATE TABLE tkprof_table
(
date_of_insert DATE
,cursor_num NUMBER
,depth NUMBER
,user_id NUMBER
,parse_cnt NUMBER
,parse_cpu NUMBER
,parse_elap NUMBER
,parse_disk NUMBER
,parse_query NUMBER
,parse_current NUMBER
,parse_miss NUMBER
,exe_count NUMBER
,exe_cpu NUMBER
,exe_elap NUMBER
,exe_disk NUMBER
,exe_query NUMBER
,exe_current NUMBER
,exe_miss NUMBER
,exe_rows NUMBER
,fetch_count NUMBER
,fetch_cpu NUMBER
,fetch_elap NUMBER
,fetch_disk NUMBER
,fetch_query NUMBER
,fetch_current NUMBER
,fetch_rows NUMBER
,ticks NUMBER
,sql_statement LONG
);
INSERT INTO tkprof_table VALUES
(
SYSDATE, 1, 0, 61, 1, 0, 418, 0, 0, 0, 1
, 1, 15625, 1435, 0, 0, 0, 0, 0
, 4, 0, 4417, 0, 24, 0, 36, 13450151
, ’select * from tblinventoryhistory
‘);
REM statement as your needs dictate.
CREATE TABLE tkprof_table
(
date_of_insert DATE
,cursor_num NUMBER
,depth NUMBER
,user_id NUMBER
,parse_cnt NUMBER
,parse_cpu NUMBER
,parse_elap NUMBER
,parse_disk NUMBER
,parse_query NUMBER
,parse_current NUMBER
,parse_miss NUMBER
,exe_count NUMBER
,exe_cpu NUMBER
,exe_elap NUMBER
,exe_disk NUMBER
,exe_query NUMBER
,exe_current NUMBER
,exe_miss NUMBER
,exe_rows NUMBER
,fetch_count NUMBER
,fetch_cpu NUMBER
,fetch_elap NUMBER
,fetch_disk NUMBER
,fetch_query NUMBER
,fetch_current NUMBER
,fetch_rows NUMBER
,ticks NUMBER
,sql_statement LONG
);
INSERT INTO tkprof_table VALUES
(
SYSDATE, 1, 0, 61, 1, 0, 418, 0, 0, 0, 1
, 1, 15625, 1435, 0, 0, 0, 0, 0
, 4, 0, 4417, 0, 24, 0, 36, 13450151
, ’select * from tblinventoryhistory
‘);
3.提取sql执行语句:
C:\>tkprof c:\oc_ora_2892.trc c:\cc.txt record=sqlstr.sql
sqlstr.sql中的内容:
alter session set sql_trace=true ;
alter session set events '10046 trace name context forever,level 12';
select * from tblinventoryhistory ;
select * from tblorder ;
select * from tblproduct ;
select * from tbluser ;
select * from tblroute ;
alter session set events '10046 trace name context forever,level 12';
select * from tblinventoryhistory ;
select * from tblorder ;
select * from tblproduct ;
select * from tbluser ;
select * from tblroute ;
4.产生执行计划:
C:\>tkprof c:\oc_ora_2892.trc c:\ff.txt explain=ocuser/ocuser table=ocuser.test1
在产生的ff.txt文件中会体现其执行计划:
Rows Execution Plan
——- —————————————————
0 SELECT STATEMENT GOAL: CHOOSE
0 TABLE ACCESS (FULL) OF 'TBLROUTE'
——- —————————————————
0 SELECT STATEMENT GOAL: CHOOSE
0 TABLE ACCESS (FULL) OF 'TBLROUTE'
小技巧:
1.如何查找你产生的trace文件:
可用eygle写的脚本去查找:
SQL> select d.value || '\' || lower(rtrim(i.instance, chr(0))) || '_ora_' ||
2 p.spid || '.trc' trace_file_name
3 from (select p.spid
4 from sys.v$mystat m, sys.v$session s, sys.v$process p
5 where m.statistic# = 1
6 and s.sid = m.sid
7 and p.addr = s.paddr) p,
8 (select t.instance
9 from sys.v$thread t, sys.v$parameter v
10 where v.name = 'thread'
11 and (v.value = 0 or t.thread# = to_number(v.value))) i,
12 (select value from sys.v$parameter where name = 'user_dump_dest') d;
2 p.spid || '.trc' trace_file_name
3 from (select p.spid
4 from sys.v$mystat m, sys.v$session s, sys.v$process p
5 where m.statistic# = 1
6 and s.sid = m.sid
7 and p.addr = s.paddr) p,
8 (select t.instance
9 from sys.v$thread t, sys.v$parameter v
10 where v.name = 'thread'
11 and (v.value = 0 or t.thread# = to_number(v.value))) i,
12 (select value from sys.v$parameter where name = 'user_dump_dest') d;
TRACE_FILE_NAME
——————————————————————————–
/opt/oracle/admin/hsjf/udump/hsjf_ora_1026.trc
——————————————————————————–
/opt/oracle/admin/hsjf/udump/hsjf_ora_1026.trc
2.sort选项可同时用多个,做法是用括号括起来,中间用逗号分割:
C:\>tkprof c:\oc_ora_2892.trc c:\cc.txt sort=(prsela, exeela, fchela)
注意:最后排序是按照各个选项的数字之和进行排序,类似于order by (sort1+sort2+sort3),而不是order by sort1,sort2,sort3
注意:最后排序是按照各个选项的数字之和进行排序,类似于order by (sort1+sort2+sort3),而不是order by sort1,sort2,sort3
oracle性能优化:如何讀懂tkprof
感覺這方面的資料都比較少,目前知道的:(將陸續整理)
CALL :每次SQL语句的处理都分成以下三个部分
Parse:这步将SQL语句转换成执行计划,包括检查是否有正确的授权和所需要用到的表、列以及其他引用到的对象是否存在。
Execute:这步是真正的由Oracle来执行语句。对于insert、update、delete操作,这步会修改数据,对于select操作,这步就只是确定选择的记录。
Fetch:返回查询语句中所获得的记录,这步只有select语句会被执行。
COUNT:这个语句被parse、execute、fetch的次数。
CPU:这个语句对于所有的parse、execute、fetch所消耗的cpu的时间,以秒为单位。
ELAPSED:这个语句所有消耗在parse、execute、fetch的总的时间。
DISK:从磁盘上的数据文件中物理读取的块的数量。一般来说更想知道的是正在从缓存中读取的数据而不是从磁盘上读取的数据。
QUERY:在一致性读模式下,所有parse、execute、fetch所获得的buffer的数量。一致性模式的buffer是用于给一个长时间运行的事务提供一个一致性读的快照,缓存实际上在头部存储了状态。
CURRENT:在current模式下所获得的buffer的数量。一般在current模式下执行insert、update、delete操作都会获取buffer。在current模式下如果在高速缓存区发现有新的缓存足够给当前的事务使用,则这些buffer都会被读入了缓存区中。
ROWS: 所有SQL语句返回的记录数目,但是不包括子查询中返回的记录数目。对于select语句,返回记录是在fetch这步,对于insert、update、delete操作,返回记录则是在execute这步。
A、query+current/rows 平均每行所需的block数,太大的话(超过20)SQL语句效率太低
B、Parse count/Execute count parse count应尽量接近1,如果太高的话,SQL会进行不必要的reparse
C、rows Fetch/Fetch Fetch Array的大小,太小的话就没有充分利用批量Fetch的功能,增加了数据在客户端和服务器之间的往返次数。
D、disk/query+current 磁盘IO所占逻辑IO的比例,太大的话有可能是db_buffer_size过小(也跟SQL的具体特性有关)
E、elapsed/cpu 太大表示执行过程中花费了大量的时间等待某种资源
F、cpu Or elapsed 太大表示执行时间过长,或消耗了了大量的CPU时间,应该考虑优化
G、执行计划中的Rows 表示在该处理阶段所访问的行数,要尽量减少
B、Parse count/Execute count parse count应尽量接近1,如果太高的话,SQL会进行不必要的reparse
C、rows Fetch/Fetch Fetch Array的大小,太小的话就没有充分利用批量Fetch的功能,增加了数据在客户端和服务器之间的往返次数。
D、disk/query+current 磁盘IO所占逻辑IO的比例,太大的话有可能是db_buffer_size过小(也跟SQL的具体特性有关)
E、elapsed/cpu 太大表示执行过程中花费了大量的时间等待某种资源
F、cpu Or elapsed 太大表示执行时间过长,或消耗了了大量的CPU时间,应该考虑优化
G、执行计划中的Rows 表示在该处理阶段所访问的行数,要尽量减少
EG:
alter session set max_dump_file_size=unlimited;
alter session set timed_statistics=true;
alter session set events '10046 trace name context forever, level 12';
select 'Hello, world; today is '||sysdate from dual; exit;
alter session set timed_statistics=true;
alter session set events '10046 trace name context forever, level 12';
select 'Hello, world; today is '||sysdate from dual; exit;
tkprof card_ora_13226.trc trace.txt print=100 record=sql.txt sys=no
然后查询trace.txt就是分析内容了
发表评论
-
MySQL 5.6 for Windows 解压缩版配置安装
2016-04-22 09:55 455MySQL是一个小巧玲珑但功能强大的数据库, ... -
PL/SQL编程
2011-04-10 20:00 1153《PL/SQL编程》 ... -
EXP-××××: 问题处理方法(整理中..)
2011-01-30 10:31 15751.EXP-00091: Exporting question ... -
oracle 10g备份与还原总结
2010-06-18 15:49 1674核心提示:一.总述 1.数据库归档模式: * 非归档模式: ... -
oem 报错“java.lang.Exception: IOException in send……”
2010-04-26 13:47 2261oracle 10g R2 登陆EM管理控制台,题头报错如下: ... -
修改Oracle最大连接数
2010-04-26 08:48 10651、修改Oracle最大连接数的方法 a、以sysd ... -
oracle更改字符集步骤方法
2010-04-26 08:45 1543oracle9204更改字符集步骤方法(WE8ISO8859P ... -
oracle触发器使用笔记
2009-12-01 11:17 1174语法规则: Create [or repla ... -
卸载Oracle,重新安装Oracle
2009-08-10 12:51 14581、 开始->设置->控制面板->管理工具->服务 ... -
Oracle中用Rowid查找和删除重复记录
2009-07-30 13:38 1314平时工作中可能会碰到当试图对库表中的某一列或几列创建唯一索引时 ... -
数据库设计多对多关系的几种形态
2009-06-29 13:37 2288前言:多对多关系至少需要3个表,我们把一个表叫做主表,一个叫做 ... -
Oracle中用exp/imp命令快速导入导出数据(整理)
2009-06-11 14:28 2152【用 exp 数 据 导 出】 ... -
Oracle创建自增字段方法-ORACLE SEQUENCE的简单介绍
2009-06-11 14:15 1216先假设有这么一个表: ... -
一些不错的sql语句
2008-12-02 17:34 22181、说明:复制表(只复制结构,源表名:a 新表名:b) ... -
表操作
2009-01-12 11:23 1086新建表:create table [表名]([自动编号字段] ... -
通用数据库存储过程代码--高效分页存储过程
2009-04-04 23:38 1355-- 获取指定页的数据 Create PROCEDURE p ... -
千万数量级分页存储过程
2009-04-04 23:36 1133参数说明: 1.Tables :表名称,视图 2.Primar ... -
存储过程编写经验和优化措施
2009-04-04 23:34 989一、前言:在经过一段 ... -
DBA的SQL Server面试题(数据库面试题)
2009-04-04 23:31 2589Question 1:Can you use a batch ... -
数据库面试(Oracle与Sql专题)
2009-04-04 23:16 1923oracle Certification Program (O ...
相关推荐
实验目的明确指出,学习此工具的使用是为了让学员能够熟练地对Oracle跟踪文件进行分析。实验环境是基于VmWare Server 1.0.4运行的Red Hat Enterprise Linux as 4,以及安装的Oracle 10g数据库版本**.*.*.*.0。这种...
5. 性能监控与调优:使用Oracle的性能分析工具(如SQL*Plus、 tkprof 和AWR报告)进行性能监控,并学习如何通过调整SQL语句、索引或系统参数来优化性能。 6. 集群与高可用性:理解Oracle Real Application Clusters...
使用工具如SQL*Plus、Explain Plan、TKPROF等进行分析。 5. **数据库安全**:学习如何设置用户权限、角色、审计、加密,以及如何通过网络配置保护数据库不受攻击。 6. **备份与恢复**:理解RMAN(恢复管理器)和...
这可能涵盖使用Oracle的性能监控工具,如V$视图、SQL Trace和TKPROF,以及通过EXPLAIN PLAN理解查询执行计划。此外,优化索引策略、调整表分区、使用绑定变量、预编译SQL和内存管理也是关键的优化手段。 在压缩包中...
你可能学习了SELECT语句的使用,包括如何选择、聚合和排序数据,以及如何使用子查询和联接操作。此外,也可能涉及到了索引的概念和作用,以及如何创建和管理索引以提高查询性能。 第九天的笔记可能涵盖了备份与恢复...
这涉及到SQL调优、数据库参数调整、物理结构优化等多个层面,需要通过工具如SQL*Plus、SQL Developer、 tkprof 和 explain plan 来进行分析和改进。 总的来说,"Oracle学习资料.zip"可能包含了从基础到高级的各种...
Oracle数据库是全球广泛使用的大型关系型数据库管理系统,尤其在企业级应用中占据重要地位。...通过系统地学习和实践,新手可以快速掌握Oracle数据库的基础知识,为进一步深入学习和使用Oracle打下坚实基础。
- 查询优化:学习如何编写高效的SQL查询,理解索引的作用和使用,以及如何避免全表扫描。 - 分析工具:了解 tkprof 和 explain plan 等工具,用于分析和优化查询执行计划。 5. **备份与恢复**: - 数据库备份:...
6. **数据库性能监控与调优**:了解性能分析工具如SQL Trace、TKPROF,学习AWR(Automatic Workload Repository)和ASH(Active Session History)报告的解读,以及如何通过PGA和SGA调整内存结构。 7. **数据库备份...
14. **数据库故障诊断**:学习使用Oracle的诊断工具,如trace文件、alert log和 tkprof,进行问题排查。 15. **集群与RAC**:Oracle 10g支持Real Application Clusters (RAC),这是一种高可用性解决方案,允许多台...
7. **性能优化**:学习使用Explain Plan分析SQL执行计划,理解如何使用SQL Trace和 TKPROF进行性能调优。掌握AWR(Automatic Workload Repository)和ASH(Active Session History)报告的解读。 8. **数据仓库和...
7. 性能优化:Oracle提供了一系列工具和方法来监控和优化数据库性能,如SQL Trace和 tkprof 可用于分析查询性能,Explain Plan可以帮助理解查询执行计划,而索引策略和分区策略是常见的性能提升手段。 8. 数据备份...
6. **故障诊断与问题解决**:学习使用告警日志、跟踪文件、 tkprof 和expdp/impdp 等工具进行问题排查,以及如何使用AWR(Automatic Workload Repository)和ASH(Active Session History)进行性能监控。...
理解PL/SQL的语法、异常处理、游标、变量声明及使用是进阶Oracle学习的重要部分。 4. **数据库设计**:良好的数据库设计能确保数据的一致性和完整性。学习ER图(实体关系模型)、范式理论(1NF, 2NF, 3NF, BCNF)...
了解如何分析SQL执行计划,使用 Explain Plan 和 tkprof 工具,以及调整初始化参数都是性能优化的必备技能。 7. **PL/SQL**:Oracle的扩展SQL,它允许编写存储过程、函数、触发器等程序逻辑。掌握PL/SQL编程可以...
学习如何创建和使用视图,以及视图在数据安全和简化查询中的作用。 七、存储过程和函数 存储过程和函数是预编译的SQL语句集合,可封装复杂的业务逻辑。学习如何定义、调用和管理这些对象,以及参数传递、返回值等...
8. **性能调优**:学习如何使用SQL*Plus、 tkprof 和 Explain Plan进行SQL查询优化。理解Oracle的性能监控工具,如V$视图和AWR(Automatic Workload Repository)报告。 9. **数据库设计**:学习如何根据业务需求...
最后,了解Oracle的性能优化工具和方法,如SQL Trace、TKPROF、AWR(Automatic Workload Repository)和ASH(Active Session History),以及SQL优化顾问,可以帮助找出性能瓶颈,提升数据库运行效率。 总的来说,...
12. **数据库连接工具**:Oracle提供SQL*Plus命令行工具,还有如Toad、SQL Developer等图形界面工具,学习使用这些工具可以更便捷地管理和操作数据库。 以上是Oracle学习的一些主要知识点,这份"Oracle学习ppt"将...
7. **性能优化**:通过学习SQL优化器、索引策略、数据库调优工具(如 tkprof 和 awr 报告),可以提高数据库的运行效率,减少等待事件,提升系统性能。 8. **故障诊断与问题排查**:Oracle的日志系统(如Alert Log...