首頁  >  文章  >  資料庫  >  Oracle时间信息特性

Oracle时间信息特性

WBOY
WBOY原創
2016-06-07 15:14:121053瀏覽

欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入 在监控、诊断、处理数据库性能问题的时候,时间信息往往是非常重要的判断依据。有时候可能我们会使用一些比例来判断性能,但是使用比例而不使用时间往往会将我们带向错误的方向。在Oracle9i的第一版

欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入

    在监控、诊断、处理数据库性能问题的时候,时间信息往往是非常重要的判断依据。有时候可能我们会使用一些比例来判断性能,但是使用比例而不使用时间往往会将我们带向错误的方向。在Oracle9i的第一版中关于时间的信息被进行了增强,提供了更多更有益的时间信息。除了9i的外貌发生了变化,在一些并没有被我们注意或者不为人知得一些v$视图的相关字段也发生了变化。这里提到的主要是他们发生了那些改变以及对DBA有什么帮助。这里也列出了零星的一些Oracle内部的未公开的信息。

  Second 1 秒
  Centi-second 1/100 百分之一秒 厘秒
  Milli Second 1/1000 千分之一秒 毫秒
  Micro Second 1/1.000.000 微妙
  Nano Second 1/1.000.000.000 纳秒

  在以前的版本中,Oracle的时间计量单位是厘秒,使用厘秒最显而易见的问题就是可能有些操作是小于厘秒的。看上去这似乎不太常见,但是实际上在操作系统上很多操作都是以微妙作为单位的,这意味着操作的起始和终止在不到厘秒就完成了,从厘秒级看就好像没有发生一样,因为持续时间近似为0。而有时候操作的持续时间不到厘秒,但是起始和终止发生在两个相连的厘秒,所以操作时间不到厘秒但是却被记录为厘秒,造成时间记录的不准确。

  在Oracle9i之前,最小的时间单位仍然是厘秒,这可以在跟踪文件、v$system_event和v$session_event中的超时字段看到。在9i之前,是不能在联机状态看到sql语句的执行(cpu消耗)时间和持续时间的,也不能看到一条Sql语句在等待着什么,实际上只有一种方法可以得到这些信息,就是通过启用10046 trace level 12的跟踪事件。这样做也会带来下面的一些问题:
  1. 生成进程跟踪文件带来很高的性能开销
  2. 如果有太多用于帮助调优的sql语句执行,将会产生大量的磁盘/文件空间需求。

  在oracle9i第一版中的持续时间以微妙作为时间单位,这能够显示出Oracle真正花费的时间。超时仍然以微妙作为计时单位。一些视图被扩展以便记录微妙数据。所有的时间信息由初始化参数timed_statistics 决定。

  一些视图的改变:
  V$SQLAREA:
  两个字段被加入到V$SQLAREA中,分别是CPU_TIME 和ELAPSED_TIME。两个字段都被设置为微妙级。然而,在这里可能会s看到一个有趣的现象:

<div twffan="done">
<img  src="/inc/test.jsp?url=http%3A%2F%2Foracle.chinaitlab.com%2FUploadFiles_7269%2F200611%2F20061129105312174.gif&refer=http%3A%2F%2Foracle.chinaitlab.com%2Finduction%2F531598.html" alt="Oracle时间信息特性" ><span>Select</span><span> cpu_time, elapsed_time
<img  src="/inc/test.jsp?url=http%3A%2F%2Foracle.chinaitlab.com%2FUploadFiles_7269%2F200611%2F20061129105312174.gif&refer=http%3A%2F%2Foracle.chinaitlab.com%2Finduction%2F531598.html" alt="Oracle时间信息特性" ></span><span>From</span><span> v$sqlarea
<img  src="/inc/test.jsp?url=http%3A%2F%2Foracle.chinaitlab.com%2FUploadFiles_7269%2F200611%2F20061129105312174.gif&refer=http%3A%2F%2Foracle.chinaitlab.com%2Finduction%2F531598.html" alt="Oracle时间信息特性" ></span><span>Order</span><span> </span><span>by</span><span> </span><span>2</span><span>
<img  src="/inc/test.jsp?url=http%3A%2F%2Foracle.chinaitlab.com%2FUploadFiles_7269%2F200611%2F20061129105312174.gif&refer=http%3A%2F%2Foracle.chinaitlab.com%2Finduction%2F531598.html" alt="Oracle时间信息特性" >CPU_TIME ELAPSED_TIME
<img  src="/inc/test.jsp?url=http%3A%2F%2Foracle.chinaitlab.com%2FUploadFiles_7269%2F200611%2F20061129105312174.gif&refer=http%3A%2F%2Foracle.chinaitlab.com%2Finduction%2F531598.html" alt="Oracle时间信息特性" ></span><span>--</span><span>-------- ------------</span><span>
<img  src="/inc/test.jsp?url=http%3A%2F%2Foracle.chinaitlab.com%2FUploadFiles_7269%2F200611%2F20061129105312174.gif&refer=http%3A%2F%2Foracle.chinaitlab.com%2Finduction%2F531598.html" alt="Oracle时间信息特性" ></span><span>230000</span><span> </span><span>174567</span><span>
<img  src="/inc/test.jsp?url=http%3A%2F%2Foracle.chinaitlab.com%2FUploadFiles_7269%2F200611%2F20061129105312174.gif&refer=http%3A%2F%2Foracle.chinaitlab.com%2Finduction%2F531598.html" alt="Oracle时间信息特性" ></span><span>260000</span><span> </span><span>258803</span><span>
<img  src="/inc/test.jsp?url=http%3A%2F%2Foracle.chinaitlab.com%2FUploadFiles_7269%2F200611%2F20061129105312174.gif&refer=http%3A%2F%2Foracle.chinaitlab.com%2Finduction%2F531598.html" alt="Oracle时间信息特性" ></span><span>260000</span><span> </span><span>271808</span>
</div>

  首先:三行中的第二行显示出了持续时间小于cpu执行时间,实际的情况是cpu字段记录单位是微妙级,但是数据被进位保留到了厘秒级。

  Sql语句的等待时间等于ELAPSED_TIME减去CPU_TIME,但是很难看到精确的等待时间。在V$SYSTEM_EVENT 视图中能够看到数据库实例级的等待时间(并不是每条Sql语句的),但是看不到发生在操作系统上(cpu等待、内存的等待)的等待时间s。

  X$KSQST的改变 (对应视图V$ENQUEUE_STAT)

  基础表X$KSQST主要显示关于系统中队列的信息。在9i之前只能提供队列类型的get和wait数。一个队列有两种特征和两个标识组成(id1 and id2)。例如一个叫做TX队列,表示一个事务队列。从Oracle9i开始不但能够看到gets 和waits,而且等待的时间和得不到队列(中断或者超时)的失败次数都可以看到。

  X$KSQST
  KSQSTWTIM NUMBER 以微妙作为单位

  然而这里仍不能将队列等待与Sql语句关联,也不能够得到等待队列的Sql语句到底等待了多久。下面的一个新的视图v$enqueue_stat 将提供关于队列得更多信息:

<div twffan="done">
<img  src="/inc/test.jsp?url=http%3A%2F%2Foracle.chinaitlab.com%2FUploadFiles_7269%2F200611%2F20061129105312174.gif&refer=http%3A%2F%2Foracle.chinaitlab.com%2Finduction%2F531598.html" alt="Oracle时间信息特性" ><span>V$ENQUEUE_STAT
<img  src="/inc/test.jsp?url=http%3A%2F%2Foracle.chinaitlab.com%2FUploadFiles_7269%2F200611%2F20061129105312174.gif&refer=http%3A%2F%2Foracle.chinaitlab.com%2Finduction%2F531598.html" alt="Oracle时间信息特性" >INST_ID </span><span>NUMBER</span><span>
<img  src="/inc/test.jsp?url=http%3A%2F%2Foracle.chinaitlab.com%2FUploadFiles_7269%2F200611%2F20061129105312174.gif&refer=http%3A%2F%2Foracle.chinaitlab.com%2Finduction%2F531598.html" alt="Oracle时间信息特性" >EQ_TYPE </span><span>VARCHAR2</span><span>
<img  src="/inc/test.jsp?url=http%3A%2F%2Foracle.chinaitlab.com%2FUploadFiles_7269%2F200611%2F20061129105312174.gif&refer=http%3A%2F%2Foracle.chinaitlab.com%2Finduction%2F531598.html" alt="Oracle时间信息特性" >TOTAL_REQ# </span><span>NUMBER</span><span>
<img  src="/inc/test.jsp?url=http%3A%2F%2Foracle.chinaitlab.com%2FUploadFiles_7269%2F200611%2F20061129105312174.gif&refer=http%3A%2F%2Foracle.chinaitlab.com%2Finduction%2F531598.html" alt="Oracle时间信息特性" >TOTAL_WAIT# </span><span>NUMBER</span><span>
<img  src="/inc/test.jsp?url=http%3A%2F%2Foracle.chinaitlab.com%2FUploadFiles_7269%2F200611%2F20061129105312174.gif&refer=http%3A%2F%2Foracle.chinaitlab.com%2Finduction%2F531598.html" alt="Oracle时间信息特性" >SUCC_REQ# </span><span>NUMBER</span><span>
<img  src="/inc/test.jsp?url=http%3A%2F%2Foracle.chinaitlab.com%2FUploadFiles_7269%2F200611%2F20061129105312174.gif&refer=http%3A%2F%2Foracle.chinaitlab.com%2Finduction%2F531598.html" alt="Oracle时间信息特性" >FAILED_REQ# </span><span>NUMBER</span><span>
<img  src="/inc/test.jsp?url=http%3A%2F%2Foracle.chinaitlab.com%2FUploadFiles_7269%2F200611%2F20061129105312174.gif&refer=http%3A%2F%2Foracle.chinaitlab.com%2Finduction%2F531598.html" alt="Oracle时间信息特性" >CUM_WAIT_TIME </span><span>NUMBER</span>
</div>

 

[1] [2] [3] 

Oracle时间信息特性

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn