发现数据库查询表空间使用率语句执行的很慢

来源:互联网 发布:淘宝设置信用卡支付 编辑:程序博客网 时间:2024/06/05 08:14

           在awr报告里发现,实时监控脚本里的查询数据库表空间使用率的语句执行的很慢需要将近30s

select 1,
       df.tablespace_name "Tablespace",
       df.bytes / (1024 * 1024) "Total Size(MB)",
       round(sum(fs.bytes) / (1024 * 1024)) "Free Size(MB)",
       round(sum(fs.bytes) * 100 / df.bytes) "% Free",
       round((df.bytes - sum(fs.bytes)) * 100 / df.bytes) "% Used"
  from (select a.bytes, a.tablespace_name from dba_free_space a) fs,
       (select tablespace_name, sum(bytes) bytes
          from dba_data_files
         group by tablespace_name
        union all
        SELECT tablespace_name, SUM(bytes) total
          FROM dba_temp_files
         GROUP BY tablespace_name) df
 where fs.tablespace_name = df.tablespace_name
   and df.tablespace_name not like 'UNDOTBS%'
 group by df.tablespace_name, df.bytes

通过查看执行计划发现时间耗费在dba_free_space 视图上

单独查询如下语句需要5s左右

select count(*) from dba_free_space 

查询可能是回收站的对象太多导致的.
于是检查回收站的情况,果然是这个原因,检查的结果如下:
SQL>select count(1) from dba_recyclebin;
43

清空回收站

SQL>purge dba_recyclebin;

再次查询速度很快,问题解决


0 0
原创粉丝点击