找出低效率的SQL

SELECT EXECUTIONS, DISK_READS, BUFFER_GETS,
ROUND((BUFFER_GETS-DISK_READS)/BUFFER_GETS, 2) Hit_radio,
ROUND(DISK_READS/EXECUTIONS,2) Reads_per_mn,
SQL_TEXT
FROM V$SQLAREA
WHERE EXECUTIONS> 0
AND BUFFER_GETS> 0
AND (BUFFER_GETS-DISK_READS)/BUFFER_GETS < 0.8
ORDER BY 4 DESC;

 1:查看哪个session锁定临时表,表格对象.
        这个语句在我其它的日志中已经有.
        相关对象:V$SESSION,V$OPEN_CURSOR,V$SQL;
        SQL:select * from v$session where sid in (select sid from v$open_cursor where sql_id in ( select sql_id from    
                v$sql  where upper(sql_text) like '%?%') );
                其中?可以用需要的字串去替代.
        其它方面:暂时不查表格之外对象,其次如果sql语句非常长的应该去搜索v$sql.sql_fulltext对象(CLOB).

        2.查找过去一段时间新添加或者新修改的对象
        相关对象:DBA_OBJECTS
        SQL: SELECT  * FROM DBA_OBJECTS WHERE  (TO_CHAR(LAST_DDL_TIME,'YYYY-
                   MM-DD')>='2008-11-16'  OR TO_CHAR(CREATED,'YYYY-MM-DD')>='2008-11-16')
        其它方面:DBA_OBJECTS有丰富的字段,可以通过添加更多的过滤条件来精确定位需要的内容.

        3.查找目前占用了大量CPU的SQL
        说明:网络上有一些资料,但是并不是很好用,思路都是通过OS来找到消耗最多资源的线程或者进程,因为平台的不同,可能还需要采取不同的方式(WINDOWS是线程,LINUX,UNIX等是进程),然后再通过v$session查找对应的SID,再通过V$OPEN_CURSOR或者v$sqlarea来查找.好像也没有太多的捷径阿.
        此部分暂时略.

        4:最近被频繁执行的SQL
        说明:由于并没有记录sql历史的表格,oracle并不干这样的事儿,所以,这里不讨论由客户自行保存的SQL历史的问题.只说v$sqlarea(位于共享池中的sql语句),然而如果没有监视,也没有太大的意义,所以这也忽略 .

http://blog.csdn.net/shuiqingtinglin/article/details/5678226

ORACLE查看表空间使用率

select *
  from (SELECT a.tablespace_name tableSpaceName,
               NVL(a.BYTES / 1024 / 1024,0) totalSize,
               NVL(b.largest / 1024 / 1024,0) freeSize,
               NVL((a.BYTES - b.BYTES) / 1024 / 1024,0) usedSize,
               round(NVL((a.BYTES - b.BYTES) / a.BYTES * 100, 0), 2) usedPercent
          from (SELECT tablespace_name, sum(BYTES) bytes
                  FROM dba_data_files
                 GROUP BY tablespace_name) a,
               (SELECT tablespace_name, sum(BYTES) bytes, max(BYTES) largest
                  FROM dba_free_space
                 GROUP BY tablespace_name) b
         WHERE a.tablespace_name = b.tablespace_name
         ORDER BY a.tablespace_name)

UNION

SELECT d.tablespace_name tableSpaceName,
       NVL(a.BYTES / 1024 / 1024, 0) totalSize,
       NVL(a.BYTES / 1024 / 1024, 0) - NVL(t.BYTES, 0) / 1024 / 1024 freeSize,
       NVL(t.BYTES, 0) / 1024 / 1024 usedSize,
       round(NVL(t.BYTES / a.BYTES * 100, 0), 2) usedPercent
  FROM SYS.dba_tablespaces d,
       (SELECT tablespace_name, SUM(BYTES) BYTES
          FROM dba_temp_files
         GROUP BY tablespace_name) a,
       (SELECT tablespace_name, SUM(bytes_cached) BYTES
          FROM v$temp_extent_pool
         GROUP BY tablespace_name) t
 WHERE d.tablespace_name = a.tablespace_name(+)
   AND d.tablespace_name = t.tablespace_name(+)
   AND d.extent_management LIKE 'LOCAL'
   AND d.CONTENTS LIKE 'TEMPORARY'

原文地址:https://www.cnblogs.com/rattersnake/p/2554938.html