重启系统后oracle突然变慢问题解决

来源:互联网 发布:淘宝怎么批量上架宝贝 编辑:程序博客网 时间:2024/04/30 19:37


昨晚大停电,今早来启动服务器,然后启动数据库,运行本地项目连接的时候,执行一个sql语句需要3分钟,昨天同样的程序执行只需要3秒,oracle查询速度突然变慢,但是对于很多数据量小的表以及简单查询数据量大的表还是比较快的,我执行的那个sql需要连接许多张表一起查询,并且已经做了分页,速度还是很慢。

网上搜了很多原因,有个说是资源没有关闭释放,要关闭session,杀死线程,然后照做了,杀了许多线程,最后还是很慢。

另一个说是临时表空间满了,需要清理临时表空间,这个有点靠谱,我查的时候临时表确实是满的,查询sql如下:

SELECT temp_used.tablespace_name, total - used as "Free", total as "Total", round(nvl(total - used, 0) * 100 / total, 3) "Free percent"
  FROM (SELECT tablespace_name, SUM(bytes_used)/1024/1024 used FROM V$TEMP_SPACE_HEADER GROUP BY tablespace_name) temp_used,
       (SELECT tablespace_name, SUM(bytes)/1024/1024 total FROM dba_temp_files GROUP BY tablespace_name) temp_total
WHERE temp_used.tablespace_name = temp_total.tablespace_name

参考网址:http://bbs.csdn.net/topics/370046613

显示我有个临时表空间的空闲比接近0了,然后就清理临时表空间。

假设目前用的临时表空间是temp

主要就是先新建一个临时表空间:

create temporary tablespace TEMP1TEMPFILE '/home/temp1.dbf' SIZE 500M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED; 

重新指定数据库临时表空间:

ALTER DATABASE DEFAULT TEMPORARYTABLESPACE temp1;

删除旧的临时表空间:

DROP TABLESPACE temp INCLUDING CONTENTSAND DATAFILES;

新建临时表空间:

create temporary tablespace TEMPTEMPFILE '/home/temp.dbf' SIZE 500M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED; 

重新指定:

ALTER DATABASE DEFAULT TEMPORARYTABLESPACE temp;

删除temp1:

DROP TABLESPACE temp1 INCLUDINGCONTENTS AND DATAFILES;

重启数据库之后没有用!

没有办法,只能照着网上的步骤把数据库的日志导出:

参考网址:http://blog.itpub.net/17203031/viewspace-700471/

主要是一个命令:@?/rdbms/admin/awrrpt.sql,然后选择导出格式和时间等,最后导出,把这些日志下到本地,放到浏览器里面,日志后缀是lst,导出格式是html。

日志里面有个Time Model Statistics

这里面显示我sql执行时间最长,就是说这个是oracle的问题,和系统的配置没有什么关系。

再看Foreground Wait Events

这个是占用时间较长的事件,里面有个directpath write temp,占用时间很长,网上搜了下,这个是因为使用了临时表空间才会变慢,使用临时表空间是因为PGA空间太小:http://blog.sina.com.cn/s/blog_61cd89f60102eej1.html

接下来就是搜怎么解决:http://blog.itpub.net/471666/viewspace-616199/

http://blog.csdn.net/nkhuangyanping/article/details/41700303

最后,在远程连接sql,注意不是用pl/sql developer连接,是先远程连接centos,再在里面进入oracle账户:su – oracle,然后再连接:sqlplus / as sysdba,然后执行命令altersystem set workarea_size_policy=AUTO scope=spfile;

    最后重启数据库,就好了。

0 0