知识大全 监控ORACLE数据库性能
Posted 时间
篇首语:知识是万物中的指路明灯。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 监控ORACLE数据库性能相关的知识,希望对你有一定的参考价值。
监控ORACLE数据库性能 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
前言: 在单一的应用环境或业务相对简单的系统下 系统性能问题 瓶颈所在往往是不言自明 解决问题的前提 定位问题是比较容易解决的 但在一个复杂的应用环境下 各应用系统对系统资源往往是一种共享和竞争的关系 而且应用系统之间也可能存在着共生或制约的关系 资源利益的均衡往往是此消彼长 而这种环境下的应用系统一旦出现资源竞争 系统的瓶颈往往难以断定 甚至会发生不同应用设计人员之间互相推诿责任的扯皮现象 本文仅就此问题对Linux平台下各应用系统对ORACLE数据库的使用情况作一探讨 ORACLE数据库的TUNING不是一个可以一言以蔽的主题 本文无意概全 内容仅涉及问题的定位及各应用对数据库资源的共享与竞争问题 本文试验及问题取证的环境: RedHat Web server(Apache +PHP )+Client/Server(Pro*C)之Server端 RedHat + Oracle RedHat Web server(Apache +PHP ) + Oracle 为方便问题的讨论 应用系统已做简化 竞争方仅包括一个Pro*C的daemon程序作为C/S模式的服务端 和由Apache+PHP所支持的WEB网站业务 单个SQL语句的处理 首先 最简单的情况莫过于单个SQL语句的分析 SQL语句的优化也是数据库优化的一个最直接最立竿见影的因素 SQL语句的性能监控从监控工具来说大致可分为由高级语言提供和由ORACLE本身提供 高级语言以典型的应用C 语言和WEB开发语言PHP为例 C语言中可以用gettimeofday函数来在某一数据库操作之前和之后分别获取一个时间值 将两个时间值之差做为衡量该数据库操作的效率 在PHP中 也可以用gettimeofday 操作方法当然与C语言中有所不同 当然 PHP中也有其它一些函数可以达到同样的时间精度 关于时间精度的考虑 不能简单以大小衡量微秒级的时间数值 因为时钟中断的时间间隔从根本上决定了时间计算所能达到的精度 此外 操作系统本身对进程的时间片分配 及进程切换的开销等因素也在一定程度上影响时间数据的意义 所以 以下时间的计算最理想的情况是对同一操作在尽可能避免缓存的情况下进行多次的循环操作 取总的时间值加以平均 从而得到比较接近真实情况的时间值 C语言的例子: ========================================================== #define TV_START #define TV_END int how_long(int cmd char *res); struct CMD_TIME int times; /* times occured within specified package number */ struct timeval time; /* total time consumed by the cmd */ ; void foo() int id; how_long(TV_START NULL); EXEC SQL WHENEVER SQLERROR CONTINUE; EXEC SQL WHENEVER NOT FOUND CONTINUE; EXEC SQL select user_id into :id from users where name= slimzhao ; ; how_long(TV_END time_consume); puts(time_consume); int how_long(int cmd char *res) /* return value: error sucess res: bytes is enough */ static struct timeval before after; if(cmd == TV_START) gettimeofday(&before NULL); return ; else if(cmd == TV_END) gettimeofday(&after NULL); if(res) if(after tv_usec > before tv_usec) sprintf(res %ld %ld after tv_sec before tv_sec after tv_usec before tv_usec); else sprintf(res %ld %ld after tv_sec before tv_sec + after tv_usec before tv_usec); return ; else return ; ========================================================== 下面是一个PHP的例子(为简化起见 程序的错误检查被忽略) ========================================================== include /how_long inc ; how_long(TV_START $timestr); $conn = OCILogon( username password dblink ); $stmt = OCIParse($conn select ID from users where name= slimzhao ); OCIDefineByName($stmt ID $id); OCIExecute($stmt); OCIFetch($stmt); OCIFreeStatement($stmt); OCILogoff($conn); how_long(TV_END $timestr); echo 用户ID: $id 该操作消耗时间:$timestr ; ?> 其中how_long函数的PHP版本如下: #作者: #当前维护人: #创建日期: : : #目的 在一个操作之前或之后调用该函数的不同版本 将得到一个记载了该操作 #耗费时间的字符串 该函数本身的开销不计入其中 define( TV_START ); define( TV_END ); function how_long($operation &$str) #返回值: 成功 传递了非法的参数 global $before_SQL $after_SQL; if($operation == TV_START) $before_SQL = gettimeofday(); return ; else if($operation == TV_END) $after_SQL = gettimeofday(); if($before_SQL[ usec ] > $after_SQL[ usec ]) $str = ($after_SQL[ sec ] $before_SQL[ sec ] ) 秒 ($after_SQL[ usec ] + * $before_SQL[ usec ]) 微秒 ; else $str = ($after_SQL[ sec ] $before_SQL[ sec ]) 秒 ($after_SQL[ usec ] $before_SQL[ usec ]) 微秒 ; else return ; ?> ============================== 上面的数据库操作开销的计算仅限于对时间消耗的计算 对同时使用同一数据库的其它应用软件的影响 对磁盘操作的频繁程度 数据库操作所采取的具体策略等等因素 都未考虑在内 高级语言也不可能提供这样的参考数据 而数据库本身提供的监测手段弥补了这一不足 最简单的操作控制台:sqlplus SQL> set timing on 将为每次执行的数据库操作进行计时 精度为 / 秒 笔者对该功能的使用中发现其时间的计算也有一定的偏差 而且时间偏差很大 严格说来 已不属于误差的范围 该归错误了 下面是一个例子中得到的数据: [bash$] cat tmp sql set timing on host date; select count(*) from users; host date; SQL> @tmp sql Wed Dec : : CST COUNT(*) Elapsed: : : Wed Dec : : CST 从系统的时间差来看 为 秒左右 但ORACLE却报告了 秒! 如果说ORACLE工具在时间计算上太差强人意的话 在SQL语句的执行方案上可算是对SQL语句如何执行的最权威的诠释了 解读这样的信息需要对ORACLE内部对SQL 操作的过程有一定了解 下面是该功能的一样典型示例: SQL> set autotrace on SQL> select count(*) from users; COUNT(*) Execution Plan SELECT STATEMENT Optimizer=CHOOSE (Cost= Card= ) SORT (AGGREGATE) INDEX (FAST FULL SCAN) OF USER_BASEINFO$NAME (UNIQUE) (Cost= Card= ) Statistics recursive calls db block gets consistent gets physical reads redo size bytes sent via SQL*Net to client bytes received via SQL*Net from client cha138/Article/program/Oracle/201311/18148相关参考
oracle数据库性能监控的SQL的几种情况 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 监控
Oracle在基于Window操作系统的性能监控 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
怎么监控oracle数据库表和表空间的现状 declare unfnumber; unfbnumber; fsnumber; fsbnumber; fsnumber; fsbnumb
讲解监控IBMDB2数据库的性能的详细步骤 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! DB数
Oracle数据库诊断性能问题 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 使用扩展SQL跟踪
ORACLE数据库性能优化概述 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 实际上为了保证OR
Oracle数据库系统性能优化策略 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一个数据库系统
Oracle学习应用之数据库性能优化策略 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 数据库系
知识大全 用Oracle中的Statspack诊断数据库性能实例
用Oracle中的Statspack诊断数据库性能实例 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧
如何调整Oracle数据库服务器的性能 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Oracl