浅谈oracle数据库dbtime

1、如果等待时间比服务时间长很多,那我们就要优化等待时间,如果服务时间比等待时间长很多,就要先优化服务时间
这就是owi思想
那我们就需要判断整个数据库系统平均响应时间中服务时间(Service time)和等待时间(Wait time)各占的百分比。
服务时间代表的是“ CPU used by this session”,是CPU服务会话所花费的所有时间。
Response Time = Service Time + Wait TIme(即响应时间=cpu服务时间+等待时间)
select a.value "Total CPU time" from v$sysstat a where a.name=‘CPU used by this session‘;

SQL> select a.value "Total CPU time" from v$sysstat a where a.name=‘CPU used by this session‘;
Total CPU time
--------------
    997592
Elapsed: 00:00:00.01
SQL>

2、会话级
(1)查看统计号 这里为2
select statistic# from v$statname where name=‘CPU used by this session‘;

SQL> select statistic# from v$statname where name=‘CPU used by this session‘;
  2

(2)查v$sesstat
select sid,a.value "Total CPU time " from  v$sesstat a where a.statistic#=2;

查看每一个会话的cpu时间

SQL> select sid,a.value "Total CPU time " from  v$sesstat a where a.statistic#=2;
       SID Total CPU time
---------- ---------------
     1         1
     2         1
    22         1
    23         1
    43         1
    44         1
    46         1
    64         1
    65         1
    66         1
    85         1
    86         1
    88         1
   107         1
   108         1
   109         1
   127         1
   129         1
   148         1
   149         1
   169         1
   172         1
   173         1
   190         1
   191         1
   193         1
   211         1
   213         1
   232         1
   233         1
30 rows selected.

3、Service Time = SQL解析时间 + 递归调用时间 + 其它时间
(1)SQL/PLSQL等解析时所花的时间,如果解析时间超过总的CPU服务时间20%,那么需要调优应用程序代码,比如绑定变量、SESSION_CURSOR_CACHE等
怎么样来查看SQL解析时间呢?分实例级和会话级
实例级:
select NAME,statistic# from v$statname where name like ‘%parse%‘;

SQL> select NAME,statistic# from v$statname where name like ‘%parse%‘;
NAME                                 STATISTIC#
---------------------------------------------------------------- ----------
parse time cpu                                547
parse time elapsed                            548
parse count (total)                            549
parse count (hard)                            550
parse count (failures)                            551
parse count (describe)                            552

select a.value "Total parse Cpu time" from v$sysstat a where a.name=‘parse time cpu‘;
统计号是548

SQL> select a.value "Total parse Cpu time" from v$sysstat a where a.name=‘parse time cpu‘;
Total parse Cpu time
--------------------
           64984
Elapsed: 00:00:00.00

会话级:
select sid,a.value "Total parse Cpu time" from v$sesstat a where a.statistic#=548;

SQL> select sid,a.value "Total parse Cpu time" from v$sesstat a where a.statistic#=548;
       SID Total parse Cpu time
---------- --------------------
     1              0
     2              0
    22              0
    23              0
    43              0
    44            785
    46              4
    64              0
    65              2
    66              5
    85              0
    86            225
    88              0
   107              0
   108              2
   109              0
   127              1
   129              3
   148              0
   149              6
   169              0
   172              0
   173              0
   190              0
   191              0
   211              0
   213              0
   232              0
   233            571
29 rows selected.

(2)    递归调用时间是用在:语义分析阶段查找数据字典或者PLSQL内部包造成的解析所花的CPU时间。就是内部字典的一些动作。
select name,statistic# from v$statname where name like ‘%cpu%‘;

SQL> select name,statistic# from v$statname where name like ‘%cpu%‘;
NAME                                 STATISTIC#
---------------------------------------------------------------- ----------
recursive cpu usage                              9
parse time cpu                                547

这里统计号为9
select a.value "Total recursive Cpu time" from v$sysstat a where a.name=‘recursive cpu usage‘;

SQL> select a.value "Total recursive Cpu time" from v$sysstat a where a.name=‘recursive cpu usage‘;
Total recursive Cpu time
------------------------
          509888
Elapsed: 00:00:00.00

通过查找v$sysstat,v$sesstat,我们可以查看到递归调用的时间。
我们知道sga分类为library cache+rowcache
rowcache数据字典(data dictionary cache )
数据字典cache怎么优化?多半是一些不规范的参数导致, _row_cr  11g 隐含参数的问题

(3)一般来说。其他时间 ,在这里是花费最多的时间(多cpu 的 调度也在这里)

总的来说
select a.value "Total CPU",b.value "parse CPU",c.value "recursive CPU",a.value - b.value - c.value "Other"
from v$sysstat a, v$sysstat b, v$sysstat c
where a.name=‘CPU used by this session‘
and b.name=‘parse time cpu‘
and c.name=‘recursive cpu usage‘;

SQL> select a.value "Total CPU",b.value "parse CPU",c.value "recursive CPU",a.value - b.value - c.value "Other"
from v$sysstat a, v$sysstat b, v$sysstat c 
where a.name=‘CPU used by this session‘
and b.name=‘parse time cpu‘
  5  and c.name=‘recursive cpu usage‘;
 Total CPU  parse CPU recursive CPU     Other
---------- ---------- ------------- ----------
    998928    64995         509941    423992
Elapsed: 00:00:00.01

刚刚好: 998928 = 64995 + 509941 + 423992
(4)等待事件分两类: 非空闲 + 空闲等待事件(IDLE)
大部分空闲等待事件   都是客户端相关的消息传输事件
大量idel等待事件造成的性能问题,极有可能是应用服务器本身问题,或者网络问题,因为cpu 都空闲了。

查看下数据库的等待事件数据
select event,time_waited,average_wait from v$system_event
where event not in (
‘pmon time‘,
‘smon timer‘,
‘rdbms ipc message‘,
‘parallel dequeue wait‘,
‘virtual circuit‘,
‘SQL*Net message from client‘,
‘client message‘,
‘NULL event‘
)
order by time_waited desc;

结果如下:
EVENT                                 TIME_WAITED AVERAGE_WAIT
---------------------------------------------------------------- ----------- ------------
DIAG idle wait                               935522655       100.09
jobq slave wait                            497321787        50.08
shared server idle wait                        467876357      3000.92
Streams AQ: qmn coordinator idle wait                   467875026      1400.44
Streams AQ: qmn slave idle wait                    467873982      2737.96
dispatcher timer                           467872026      6000.98
pmon timer                               467819350       264.77
Space Manager: slave idle wait                       467784915        499.1
Streams AQ: waiting for time management or cleanup tasks       464980103   1690836.74
VKRM Idle                               169919651   3146660.21
os thread startup                              290703         1.59
control file parallel write                          126076          .08
log file parallel write                           100734          .03
log file sync                                   61970          .08
db file async I/O submit                           34403          .03
library cache lock                               22077       959.85
PL/SQL lock timer                               12407        98.47
control file sequential read                        6042        0
ADR block file read                            1845          .11
auto-sqltune: wait graph update                     1500       250.02
Disk file operations I/O                        1482        0
direct path sync                             778         1.05
log file switch completion                         537          .81
control file heartbeat                             400          400
reliable message                             392          .05
SQL*Net message to client                         375        0
db file sequential read                          364          .01
resmgr:internal state change                         342        10.06
class slave wait                             327          .01
asynch descriptor resize                         326        0
switch logfile command                             227        56.68
rdbms ipc reply                              209          .06
enq: CR - block range reuse ckpt                     134          .07
LGWR wait for redo copy                          112        0
undo segment extension                             110          .75
ADR block file write                              91          .01
db file scattered read                              85          .01
log file single write                              55          .04
JS coord start wait                              50        50.02
enq: PR - contention                              36         1.17
db file single write                              35          .02
enq: RO - fast object reuse                          27          .01
latch: shared pool                              25          .03
direct path write temp                              24          .01
latch free                                  19          .15
Data file init write                              15          .21

这是oracle性能调优的基础。

时间: 2024-10-25 09:50:19

浅谈oracle数据库dbtime的相关文章

浅谈Oracle数据库分区表

Oracle数据库分区是作为Oracle数据库性能优化的一种重要的手段和方法,之前,只听过分区的大名,却总未用过,最近简单学习了一下,总结如下,不对之处,还希望朋友们多多指点,交流! 1.表空间及分区表的概念    2.表分区的具体作用    3.表分区的优缺点    4.表分区的几种类型及操作方法    5.对表分区的维护性操作. ( 1.) 表空间及分区表的概念    表空间:       是一个或多个数据文件的集合,所有的数据对象都存放在指定的表空间中,但主要存放的是表, 所以称作表空间.

浅谈oracle数据库索引

[什么是索引] 在关系型数据库中,索引是一种和表有关的数据结构,它可以使查询的sql语句执行的更快.其实索引就如同图书的目录,我们可以根据目录中的页码快速的找到所需的内容. 编写一本书,只有章节内容定好之后再设置目录:数据库索引也是一样,只有先插入好数据,再建立索引. [为何索引可提高查询效率] 因为DB在执行一条sql语句的时候,默认的方式是根据搜索条件进行全表扫描,遇到匹配条件就加入搜索结果集合.如果我们对某一字段增加索引,查询时就会先去索引列表中一次定位到特定值的行数,大大减少遍历匹配的行

浅谈oracle中rowid和rownum

[ 概要 ] 刚刚接触oracle的同学可能常常会被rowid和rownum这两个词弄混, 弄清楚这两个家伙对于我们写sql会有很大的帮助, 下面偶就抛砖引玉, 简单地谈谈他们之间的区别吧. [ 比较 ] rowid和rownum都是oracle中的伪列, 但他们还是存在本质区别: rowid: 是物理地址, 用于定位数据表中数据的位置, 它是唯一的且不会改变. rownum: 是根据查询的结果集给每行分配的一个逻辑编号, 查询结果不同, rownum自然不同. 对于同一条记录, 查询条件不同,

浅谈分布式数据库

基本概念 1) 单库,就是一个库 ? 2) 分片(sharding),分片解决扩展性问题,引入分片,就引入了数据路由和分片键的概念.分表解决的是数据量过大的问题,分库解决的是数据库性能瓶颈的问题. ? 3) 分组(group),分组解决可用性问题,分组通常通过主从复制(replication)的方式实现.(各种可用级别方案单独介绍) ? 4) 互联网公司数据库实际软件架构是(大数据量下):又分片,又分组(如下图) 数据分片简介和问题 数据分片是按照某个维度将存放在单一数据库中的数据分散地存放至多

浅谈Oracle12c 数据库、用户、CDB与PDB之间的关系

名词介绍: 数据库:数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,它产生 于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以 后,数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管 理的方式.C D B:CDB全称为Container Database,中文翻译为容器数据库.P D B:PDB全称为Pluggable Database,中文翻译为可插拔数据库. 首先,我来谈一下数据库.user和schema之间的关系.在我看,数据库就像是含

运维角度浅谈MySQL数据库优化

一个成熟的数据库架构并不是一开始设计就具备高可用.高伸缩等特性的,它是随着用户量的增加,基础架构才逐渐完善.这篇博文主要谈MySQL数据库发展周期中所面临的问题及优化方案,暂且抛开前端应用不说,大致分为以下五个阶段: 1.数据库表设计 项目立项后,开发部根据产品部需求开发项目,开发工程师工作其中一部分就是对表结构设计.对于数据库来说,这点很重要,如果设计不当,会直接影响访问速度和用户体验.影响的因素很多,比如慢查询.低效的查询语句.没有适当建立索引.数据库堵塞(死锁)等.当然,有测试工程师的团队

浅谈MySQL数据库优化

一个成熟的数据库架构并不是一开始设计就具备高可用.高伸缩等特性的,它是随着用户量的增加,基础架构才逐渐完善.这篇博文主要谈MySQL数据库发展周期中所面临的问题及优化方案,暂且抛开前端应用不说,大致分为以下五个阶段: 1.数据库表设计 项目立项后,开发部根据产品部需求开发项目,开发工程师工作其中一部分就是对表结构设计.对于数据库来说,这点很重要,如果设计不当,会直接影响访问速度和用户体验.影响的因素很多,比如慢查询.低效的查询语句.没有适当建立索引.数据库堵塞(死锁)等.当然,有测试工程师的团队

浅谈ORACLE AWR single instance 一

Oracle中的AWR,全称为Automatic Workload Repository,自动负载信息库. AWR是DBA了解其运行状态的重要工具之一,根据AWR报告可以对oracle数据库性能整体了解并针对性优化,此文章主要是介绍AWR相关部分的内容. DB Name         DB Id    Instance     Inst Num Startup Time    Release     RAC ------------ ----------- ------------ -----

(转)运维角度浅谈MySQL数据库优化

转自:http://lizhenliang.blog.51cto.com/7876557/1657465 一个成熟的数据库架构并不是一开始设计就具备高可用.高伸缩等特性的,它是随着用户量的增加,基础架构才逐渐完善.这篇博文主要谈MySQL数据库发展周期中所面临的问题及优化方案,暂且抛开前端应用不说,大致分为以下五个阶段: 1.数据库表设计 项目立项后,开发部根据产品部需求开发项目,开发工程师工作其中一部分就是对表结构设计.对于数据库来说,这点很重要,如果设计不当,会直接影响访问速度和用户体验.影