ITPub博客

首页 > 应用开发 > IT综合 > SMON研究

SMON研究

原创 IT综合 作者:rwq_ 时间:2006-07-31 15:16:32 0 删除 编辑
前一段时间,因为TEMP空间的问题,引了对SMON进程的注意......[@more@]

1SMON的作用

1.1自动恢复例程

前滚以恢复尚未记入数据文件但已经记入联机重做日志中的数据

打开数据库以允许用户登录。任何没有被未恢复事务锁定的数据都立即可用

回滚未提交的事务

1.2合并数据文件中邻近区域的空闲块

SMON 5分钟会检查一次所有pctincrease != 0的空间,并把它们合并成一个大块。

但这只限于于字典管理模式。

1.3回收临时段,将它们作为数据文件中的空闲块返回

何时会回收临时段?

建立INDEX:在建立索引的时候,oracle会先在临时段中创建索引,建好了之后才回移动到永久表空间中。

如果这时进程中断,则由SMON进行临时段的回收。

DROP 对像:在删除对像的时候,Oracle会先把对像所占的空间标识为临时段,再由SMON进程回收。

用户错误:用户进程获取临时段后,突然中止连接。

1.4把回滚段回缩到optimal所设置的大小

2、合并空闲块的处理

2.1如何查看系统是否正在合并空闲块

SELECT COUNT(*) FROM DBA_FREE_SPACE;

Dba_free_space视图记录了所有空闲的块,里面有每一个空闲块的blockid、所属的表空间以及空闲块的大小。如果这个值在不断的减少,就说明SMON正在合并空闲块

2.2如何阻止SMON合并空闲块?

在合并空闲块的时候,SMON会占用大量的CPU时间,而且SMON的优先级比普通的进程高,这样就会导致其他 用户进程无法获取CPU资源。一旦SMON开始合并空闲块,那么数据库是无法shutdown的,除非SMON合并完所有的空闲块。其实,Oracle是在UN-COALESCED EXTENTS存在的情况下关闭数据库的,这里就引发一个问

题,如何不让SMON合并空闲块?

方法一,手工的执行合并空闲块的命令:

'alter tablespace coalesce'

这做法从性能上要比SMON好,速度也比SMON快,而且不会引发ora-1575的错误。

方法二,设置10269事件将会使Smon进程不去合并那些Free的空间

3、回收临时段的处理

3.1如何查看系统是否正在回收临时段

SELECT COUNT(*) FROM DBA_EXTENTS WHERE SEGMENT_TYPE = 'TEMPORARY';

DBA_EXTENTS视图记录了oracle的所有块,里面有每一个块的所有信息,包括块的类型。如果这个值在不断的减少,说明SMON正在回收临时段。

3.2建议:

不要设置过小的临时表空间的initial值和next

不要让临时表空间无限扩大

使用LMT而不要用DMT

3.3 DROP_SEGMENTS事件可以代替SMON清除临时段

alter session set events 'immediate trace name DROP_SEGMENTS level 6';

level的等级是表空间的ID+1

3.4如何阻止SMON清除临时段

event="10061 trace name context forever, level 10" 阻止clean temp space

4、如何有效的删除大表

在删除大表的时候,oracle会先把表所占的空间标记为临时段,再进行清除。

如果是字典表空间。在删除表的时候,会把块的信息从uet$表移到fet$表中,所以如果是删除大表的时

候,一定要注意不能直接用drop,而是应该用truncate,然后再DEALLOCATE,最后再drop

4.1 使用REUSE STORAGE子句截断表对象:

SQL> TRUNCATE TABLE BIGTAB REUSE STORAGE; //只是删除数据,先不进行空间的回收

4.2 逐步回收空间:

Night 1:

SQL> ALTER TABLE BIGTAB DEALLOCATE UNUSED KEEP 1707M; (2Gb*5/6)

Night 2:

SQL> ALTER TABLE BIGTAB DEALLOCATE UNUSED KEEP 1365M; (2Gb*4/6)

Night 3:

SQL> ALTER TABLE BIGTAB DEALLOCATE UNUSED KEEP 1024M; (2Gb*3/6)

Night 4:

SQL> ALTER TABLE BIGTAB DEALLOCATE UNUSED KEEP 683M; (2Gb*2/6)

Night 5:

SQL> ALTER TABLE BIGTAB DEALLOCATE UNUSED KEEP 341M; (2Gb*1/6)

Night 6:

SQL> DROP TABLE BIGTAB;

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/814/viewspace-852337/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    36
  • 访问量
    637357