首页 > 数据库 > Oracle > 表空间使用率迅速增长排查
最大表空间 TBS_WINEXDATA
每日增长情况
select rtime,name,total_GB,total_GB-lag(total_GB,1,total_GB) over(partition by name order by rtime) total_diff,
total_used_GB,total_used_GB-lag(total_used_GB,1,total_used_GB) over(partition by name order by rtime) totaluse_diff
from (
select rtime,c.name,round(tablespace_size*8192/1024/1024/1024,2) total_GB,round(tablespace_usedsize*8192/1024/1024/1024,2) total_used_GB
from dba_hist_tbspc_space_usage a,v$tablespace c
where a.tablespace_id=c.ts#
and substr(rtime,12,5)='00:00'
and c.name ='TBS_WINEXDATA'
order by 2,1) ;
该表空间每天增长 30G 左右( TOTALUSE_DIFF 列)。一个月就是 900G 左右

select * from dba_segments where tablespace_NAME='TBS_WINEXDATA' AND BYTES>1024*1024 *1024 ORDER BY BYTES DESC;
该表空间的 TOP 5 大对象都是主要是 LOB 字段。如第一个 LOB 字段达 732G 。

查看 LOB 列的压缩属性( COMPRESSION 列),基本上都是没有打开压缩( NO 即未开启压缩属性),会造成较多空间使用。 TOP 1 的 LOB 列达 739T

排查了下目前数据库内的全部 LOB 列的压缩情况,如下。 2726 个未开启压缩。
select COMPRESSION,count(*) from dba_lobs
where owner not in('SYS','SYSTEM')
group by COMPRESSION

结论:
1、表空间增长过快,每日约增长 30G左右。
2、存在较多 LOB列大对象,占用较大空间。控制住这些 TOP 的 LOB对象的增长,数据库空间增长会慢下来。
建议:
打开 LOB 列的压缩属性,压缩效果比较明显(插入相同数据,未开启 LOB 列压缩情况下大小为 277M ,开启压缩后仅为 131K )。压缩方式有 2 种,一种是 medium ,另外一种 high( 压缩比会更高,但是对性能有影响 ) 。建议使用 medium 压缩。
处理方式:
1 :创建表的时候,打开对 LOB 列的压缩属性
如:
CREATE TABLE compress_medium_tab (
id NUMBER,
clob_data CLOB
)
LOB(clob_data) STORE AS SECUREFILE compress_medium_lob (
COMPRESS medium
);
2 :对于已经创建的表,将现有的表打开 LOB 列的压缩属性,注意该调整不会压缩当前表,会对后续新插入的记录进行压缩。
ALTER TABLE nocompress_tab MODIFY LOB( clob_data )(COMPRESS);
说明: nocompress_tab 为表名。 clob_data 为 LOB 列名。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31547506/viewspace-3073853/ ,如需转载,请注明出处,否则将追究法律责任。