如何检查oracle数据库性能

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何检查oracle数据库性能相关的知识,希望对你有一定的参考价值。

这种问题要回答好要求知识比较全面。
1 从操作系统层次上看
看CPU 内存 swqp(交换分区)等使用率
2 从磁盘上看
主要看磁盘读写。可以用dd测磁盘读写的速度 也可以在业务高峰期检测磁盘的速率。
3 从数据库本身来看。
先要看数据库各个参数的值 。 如sga的大小,process的大小,redo日志的个数与大小等这些关系到性能的参数是否设置合理。
长期观察的方式就是看各个时期的AWR报告。里面有各种性能指标,以及按执行时间或资源排列的sql ,以及各种等待时间的排名。从这里面可以掌握数据库的长期的性能变化。
即时观察的方式就是利用各种sql 查询 数据库在当前时间的各个性能指标(AWR报告里面的各种指标也都是通过sql查询出来的)
还有对数据库整体的一个检查:
如 表的大小,表是否需要分区而没有分区,索引是否创建,索引是否失效,开发人员写的sql是否正确使用到了索引,频繁使用的sql是否有绑定变量,有频繁大批量增删改的表是否存在高水位。。。
额 总之,这个话题涉及的知识非常多,尽可能多的学习一些东西,祝你好运。
参考技术A 如何检查oracle数据库性能
oracle的性能判断需要综合数据库的多个运行指标来判断:
1、进程数量和占用cpu:这个主要看有没有长时间占用cpu的进行。通常会判断大出sql,需要优化;这个可以用执行计划或者awr报告查看;
2、内存占用:主要用系统命令查看ora_占用和系统总内存的比例,swap的使用率;通常swap使用率低就没事;这个主要使用系统命令;
3、磁盘占用率:防止磁盘空间不足,需要的主要在系统和用户表空间、RMAN等操作上;这个主要使用系统命令;RMAN命令查看
参考技术B oracle的性能判断需要综合数据库的多个运行指标来判断:
1、进程数量和占用cpu:这个主要看有没有长时间占用cpu的进行。通常会判断大出sql,需要优化;这个可以用执行计划或者awr报告查看;
2、内存占用:主要用系统命令查看ora_占用和系统总内存的比例,swap的使用率;通常swap使用率低就没事;这个主要使用系统命令;
3、磁盘占用率:防止磁盘空间不足,需要的主要在系统和用户表空间、RMAN等操作上;这个主要使用系统命令;RMAN命令查看

如何查询oracle 数据库性能,sql资源占用

  作为一个开发/测试人员,或多或少都得和数据库打交道,而对数据库的操作归根到底都是SQL语句,所有操作到最后都是操作数据,那么对sql性能的掌控又成了我们工作中一件非常重要的工作。下面简单介绍下一些查看oracle性能的一些实用方法:

  1、查询每台机器的连接数

  select t.MACHINE,count(*) from v$session t group by t.MACHINE

  这里所说的每台机器是指每个连接oracle数据库的服务器,每个服务器都有配置连接数据库的连接数,以websphere为例,在数据源中,每个数据源都有配置其最大/最小连接数。

  执行SQL后,可以看到每个服务器连接oracle数据库的连接数,若某个服务器的连接数非常大,或者已经达到其最大连接数,那么这台服务器上的应用可能有问题导致其连接不能正常释放。

  2、查询每个连接数的sql_text

  v$session表里存在的连接不是一直都在执行操作,如果sql_hash_value为空或者0,则该连接是空闲的,可以查询哪些连接非空闲, web3 是机器名,就是WebSphere Application Server 的主机名。

  select t.sql_hash_value,t.*  from v$session t where t.MACHINE=\'web3\' and t.sql_hash_value!=0

  这个SQL查询出来的结果不能看到具体的SQL语句,需要看具体SQL语句的执行下面的方法。

  3、查询每个活动的连接执行什么sql

  select sid,username,sql_hash_value,b.sql_text

  from v$session a,v$sqltext b

  where a.sql_hash_value = b.HASH_VALUE and a.MACHINE=\'web3\'

  order by sid,username,sql_hash_value,b.piece

  order by这句话的作用在于,sql_text每条记录不是保存一个完整的sql,需要以sql_hash_value为关键id,以piece排序,如图

  Username是执行SQL的数据库用户名,一个sql_hash_value下的SQL_TEXT组合成一个完整的SQL语句。这样就可以看到一个连接执行了哪些SQL。

  4、.从V$SQLAREA中查询最占用资源的查询

  select b.username username,a.disk_reads reads, a.executions exec,

  a.disk_reads/decode(a.executions,0,1,a.executions) rds_exec_ratio,

  a.sql_text Statement

  from  v$sqlarea a,dba_users b

  where a.parsing_user_id=b.user_id

  and a.disk_reads > 100000

  order by a.disk_reads desc;

  用buffer_gets列来替换disk_reads列可以得到占用最多内存的sql语句的相关信息。

  V$SQL是内存共享SQL区域中已经解析的SQL语句。

  该表在SQL性能查看操作中用的比较频繁的一张表,关于这个表的详细信息大家可以去http://apps.hi.baidu.com/share/detail/299920# 上学习,介绍得比较详细。我这里主要就将该表的常用几个操作简单介绍一下:

  1、列出使用频率最高的5个查询:

  select sql_text,executions

  from (select sql_text,executions,

  rank() over

  (order by executions desc) exec_rank

  from v$sql)

  where exec_rank <=5;

  该查询结果列出的是执行最频繁的5个SQL语句。对于这种实用非常频繁的SQL语句,我们需要对其进行持续的优化以达到最佳执行性能。

  2、找出需要大量缓冲读取(逻辑读)操作的查询:

  select buffer_gets,sql_text

  from (select sql_text,buffer_gets,

  dense_rank() over

  (order by buffer_gets desc) buffer_gets_rank

  from v$sql)

  where buffer_gets_rank<=5;

  这种需要大量缓冲读取(逻辑读)操作的SQL基本是大数据量且逻辑复杂的查询中会遇到,对于这样的大数据量查询SQL语句更加需要持续的关注,并进行优化。

  3、持续跟踪有性能影响的SQL。

  SELECT * FROM (

  SELECT PARSING_USER_ID,EXECUTIONS,SORTS,

  COMMAND_TYPE,DISK_READS,sql_text FROM v$sqlarea

  ORDER BY disk_reads DESC

  )

  WHERE ROWNUM<10

  这个语句在SQL性能查看中用的比较多,可以明显的看出哪些SQL会影响到数据库性能。

  本文主要介绍了使用SQL查询方式查看oracle数据库SQL性能的部分常用方法。此外还有许多工具也能实现SQL性能监控,大家可以在网上搜索相关知识进行学习。


  转载仅供参考,版权属于原作者

参考技术A 比如查找前十条性能差的sql.
SELECT * FROM
(
SELECT PARSING_USER_ID
EXECUTIONS,
SORTS,
COMMAND_TYPE,
DISK_READS,
sql_text
FROM v$sqlarea
ORDER BY disk_reads DESC
)
WHERE ROWNUM<10 ;
参考技术B 生成awr报告,或者使用oracle em直接在线看。

以上是关于如何检查oracle数据库性能的主要内容,如果未能解决你的问题,请参考以下文章

Oracle数据库性能优化

Oracle 数据库日常巡检

Oracle 数据库日常巡检

Oracle数据库运维方案及优化

oracle数据库事件监视器怎么用

检查 SSIS 中 ETL 的性能