Oracle表空间溢出排查及解决方案(oracle表空间不够)

Oracle表空间溢出是一种常见的数据库性能问题,指的是表空间上的数据\索引段空间彻底用光或者平均分配空间已经满了,这样就不能再插入新的行或者扩大表的键空间。处理此类问题首先应当从查询表空间溢出原因开始,一般可使用以下方法来检测表空间溢出:

一,查询表空间溢出情况

使用如下sql脚本,查询表空间的使用情况:

SELECT

substr(a.tablespace_name,1,30) “表空间名 “,

a.BYTES/1024/1024 “表空间大小M “,

ROUND(b.BYTES/1024/1024,2) “已使用M “,

ROUND((a.BYTES-b.BYTES)/1024/1024,2) “未使用M “,

(ROUND((a.BYTES-b.BYTES)/a.BYTES,3)*100)||’%’ “表空间使用率%”

FROM

(SELECT TABLESPACE_NAME,SUM(BYTES) BYTES FROM dba_data_files GROUP BY TABLESPACE_NAME) a,

(SELECT TABLESPACE_NAME,SUM(BYTES) BYTES FROM DBA_SEGMENTS WHERE SEGMENT_NAME NOT LIKE ‘BIN$%’ GROUP BY TABLESPACE_NAME) b

WHERE

a.TABLESPACE_NAME = b.TABLESPACE_NAME;

二,查询是否有表空间上特定表无索引段空间

如果发现有表空间使用率较高,我们可以通过下面的sql语句查询特定表空间上某个表是否存在无索引段空间:

select

segment_name,segment_type,bytes

from

dba_segments

where

tablespace_name=’xx’ and segment_name=’yy’ and bytes=’0′

如果查询结果存在,则可判断是表空间溢出的问题了。

三,解决表空间溢出问题

1.如果发现表空间溢出,首先应当移动表或扩大表空间,以免影响存在的数据。

2.检查是否有rows chained/migrated情况,如果存在,可以执行analyze table的table的sql语句,及时的调整chained rows和migrated rows,从而避免表空间溢出。

3.通过调整table的pctfree和pctused参数,使其尽可能均匀的分布表数据,以及避免表空间溢出。

4.适当减少Indexes的对表空间的使用,减少Indexes分段的数量,或者升级Index结构。

5.如果由于临时活动引发的短期表空间压力,在容许的情况下可临时改变数据库扩展空间的大小。

6.适当增减 table空间大小,也可以采取即时增加伸缩空间文件等操作限制表空间溢出。

由上述步骤,我们可以正确地查询表空间溢出情况,并采取有效的措施来解决表空间溢出问题,提升数据库性能。


数据运维技术 » Oracle表空间溢出排查及解决方案(oracle表空间不够)