存档
top10046 trace的跟踪等级
10046是一个Oracle的内部事件(event),通过设置这个事件可以得到Oracle内部执行系统解析、调用、等待、绑定变量等详细的trace信息,对于分析系统的性能有着非常重要的作用。
设置10046事件的不同级别能得到不同详细程度的trace信息,下面就列出各个不同级别的对应作用:
| 等级 | 二进制 | 作用 |
|---|---|---|
| 0 | 0000 | 无输出 |
| 1 | 0001 | 输出 ****,APPNAME(应用程序名),PARSING IN CURSOR,PARSE ERROR(SQL解析),EXEC(执行),FETCH(获取数据),UNMAP,SORT UNMAP(排序,临时段),ERROR,STAT(执行计划),XCTEND(事务)等行 |
| 2 | 0011 | 与等级1完全一样 |
| 4 | 0101 | 包括等级1的输出,加上BIND行(绑定变量信息) |
| 8 | 1001 | 包括等级1的输出,加上WAIT行(等待事件信息) |
| 12 | 1101 | 输出等级1、等级4以及等级8的所有信息 |
等级1的10046 trace被视为是普通的SQL Trace,而等级4、等级8以及等级12则被称为Extended SQL Trace,Extended SQL Trace里面包括了最有用的WAIT信息,因此在实际中也是用的最多的。
作者:马齿苋 | 链接:http://www.dbabeta.com/2010/ways-to-open-10046-trace.html
本文记录的是本人近期阅读的Method R相关文章的一个汇总总结。
top关于Method R
Method R最早由Cary Millsap以及Jeff Holt在他们2003年出版的书《Optimizing Oracle Performance》中提出,这种方法提出之初是“To create a performance optimization method that works and that can be taught effectively to the typical Oracle database administrator. (OOP序言)”,就是说这方法是为Oracle性能优化而建,但在从最近Cary Millsap的访谈和他的最新文章Thinking Clearly about Performance中可以看到他已经将Method R的应用从Oracle数据库扩展到了电脑软件甚至是一切流程的优化上,当然他的公司Method R Corporation也是为此而建的。
topThinking Clearly About Performance
Thinking Clearly about Performance可以认为是《Optimizing Oracle Performance》中关于Method R的一个简化版,如果没有看过OOP的话,仔细的阅读这篇文章也能对Method R有深刻的理解。
文章的大概总结:
- 什么是性能:性能就是完成一个指定任务的时间,性能就是时间
- 性能的衡量与描述: 响应时间和吞吐率,这两个是相关的,但却不似线性相关
- 分析性能问题:序列图能直观的表现一个任务的响应时间,但是却仅限于简单的任务。Profile才是分析响应时间的好工具。
- 解决性能问题:阿姆达尔定律、风险管理、效率这几个都是在考虑解决性能问题方案时候必须要注意的问题。
- 负载的衡量:负载可以说的系统资源的利用率,由排队论知道负载对于响应时间有着巨大的影响。排队延时和资源拐点论是在进行容量规划时必须考虑的问题,容量规划最重要的一点就是保证系统在运营高峰期时的资源消耗不会越过拐点。
- 竞争延时:并行处理的系统中除了排队延时之外还有个影响很大的就是竞争延时,M/M/m理论中的多个通道是相互独立的,而实际系统中却不是这样,并行的进行总会在一些公共资源上发生竞争,而且最严重的就是这种竞争根本无可预测性,因为其中会有人为的因素在里边。
- 性能的测试和测量:测试需要根据实际系统的情况来进行,要求高的测试多,要求低的测试少。性能测量是要注意必须要测量那些应该测量的,而不是只捡简单事情做,代理测量是很多错误判断的来源。
- 性能应该作为软件的特性:考虑性能问题不能在软件成型之后,而是在软件设计之初就要考虑到的,在代码编写的过程中就将插桩代码作为软件的一部分,这样系统成型之后就能很方便的查找性能问题。将性能测量代码写入软件中最终能使你的系统永远的都能以最快的速度跑起来,而不至于因为性能不好而抓瞎。
作者:马齿苋 | 链接:http://www.dbabeta.com/2010/readings-on-method-r.html
Array Fetch Size这个参数决定了客户端一次从数据库获取数据的行数,写过访问Oracle数据库程序的人可能会发现Array Fetch Size在默认情况下设置的值都比较小,当他把Array Fetch Size设定值加大之后,自己的程序明显的跑的更快了。既然越大Array Fetch Size对于程序运行越快,那为什么默认的Array Fetch Size值会那么小,多大的Array Fetch Size值才是个合适的呢?本文就试图探索下这方面的内容。
top测试环境
ORAINST@orcl> SELECT * FROM v$version; BANNER ---------------------------------------------------------------- Oracle Database 10g Enterprise Edition Release 10.2.0.2.0 - Prod PL/SQL Release 10.2.0.2.0 - Production CORE 10.2.0.2.0 Production TNS for Linux: Version 10.2.0.2.0 - Production NLSRTL Version 10.2.0.2.0 - Production
oracle@orainst[orcl]:~$ uname -a Linux orainst.desktop.mycompany.com 2.4.21-50a6smp #1 SMP Wed Oct 3 18:57:25 PDT 2007 i686 i686 i386 GNU/Linux oracle@orainst[orcl]:~$ cat /etc/redhat-release Red Hat Enterprise Linux WS release 3 (Taroon Update 4)
top不同Array Fetch Size下的统计输出
SQLPlus中可以自由的设定Array Fetch Size的大小,因此我们的实验都是基于SQLPlus来完成的,实际上不管是什么类型客户端还是自己基于OCI写程序,都是能单独设置Array Fetch Size的,SQLPlus设置方法为SET ARRAYSIZE number,默认情况下的Array Fetch Size大小为15,最大值允许设置的值是5000,可以通过SHOW ARRAYSIZE来查看当前使用的值。
现在来建立一个测试表,然后设定不同Array Fetch Size,在观察不同情况下查询输出的统计数据有什么样的区别。
首先建立测试数据:
-- 创建测试表 ORAINST@orcl> CREATE TABLE t AS SELECT * FROM all_objects; Table created. -- 表建立完毕之后打开统计输出 ORAINST@orcl> SET AUTOT TRACE STATISTICS ORAINST@orcl> SET TIMING ON
作者:马齿苋 | 链接:http://www.dbabeta.com/2010/array-fetch-size-study.html
近期评论