Oracle 数据库SQL性能查看

 Oracle 数据库SQL性能查看 2013-07-23 17:26:20php

分类: Linuxweb

 

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

一、查询每台机器的链接数数据库

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

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

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

二、查询每一个链接数的sql_textapp

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语句的执行下面的方法。

三、查询每一个活动的链接执行什么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。

四、.从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# 上学习,介绍得比较详细。我这里主要就将该表的经常使用几个操做简单介绍一下:

一、列出使用频率最高的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语句,咱们须要对其进行持续的优化以达到最佳执行性能。

二、找出须要大量缓冲读取(逻辑读)操做的查询: 

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语句更加须要持续的关注,并进行优化。

三、持续跟踪有性能影响的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性能监控,你们能够在网上搜索相关知识进行学习。

相关文章
相关标签/搜索