Oracle 数据库SQL性能查看

前端之家收集整理的这篇文章主要介绍了 Oracle 数据库SQL性能查看前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

分类:Linux

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

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

selectt.MACHINE,count(*)fromv$sessiontgroupbyt.MACHINE

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

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

2、查询每个连接数的sql_text

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

selectt.sql_hash_value,t.*fromv$sessiontwheret.MACHINE='web3'andt.sql_hash_value!=0

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

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

selectsid,username,sql_hash_value,b.sql_text

fromv$sessiona,v$sqltextb

wherea.sql_hash_value=b.HASH_VALUEanda.MACHINE='web3'

orderbysid,b.piece

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

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

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

selectb.usernameusername,a.disk_readsreads,a.executionsexec,

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

a.sql_textStatement

fromv$sqlareaa,dba_usersb

wherea.parsing_user_id=b.user_id

anda.disk_reads>100000

orderbya.disk_readsdesc;

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

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

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

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

selectsql_text,executions

from(selectsql_text,executions,

rank()over

(orderbyexecutionsdesc)exec_rank

fromv$sql)

whereexec_rank<=5;

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

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

selectbuffer_gets,sql_text

from(selectsql_text,buffer_gets,

dense_rank()over

(orderbybuffer_getsdesc)buffer_gets_rank

fromv$sql)

wherebuffer_gets_rank<=5;

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

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

SELECT*FROM(

SELECTPARSING_USER_ID,EXECUTIONS,SORTS,

  COMMAND_TYPE,DISK_READS,sql_textFROMv$sqlarea

  ORDERBYdisk_readsDESC

)

WHEREROWNUM<10

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

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

猜你在找的Oracle相关文章