一、现场状态
业务侧的实例histest 的 SYSAUX 表空间占用率已达100%(100GB未在扩展),导致数据库性能严重下降。根本原因为 AWR历史数据未按保留策略自动清理,导致相关表(WRH$%)的分区未正确拆分和清除,最终撑满表空间。导致数据库操作阻塞,尤其影响统计信息收集和AWR快照生成。应用响应超时,DBMS_STATS收集任务因无法写入统计信息失败,长期未处理可能导致执行计划劣化。
再次提醒现场:必须定期检查其空间使用(DBA_TABLESPACES)及AWR保留策略(DBA_HIST_WR_CONTROL)。一旦占满,优先清理过期AWR数据(DBMS_WORKLOAD_REPOSITORY)或扩容,避免统计信息收集异常引发连锁反应。
二、处理步骤
1. 确认表空间使用情况
-- 综合表空间分析脚本(支持所有表空间类型)包含临时表空间统计
SET PAGESIZE 999 LINESIZE 180
COL "表空间" FOR A20
COL "类型" FOR A10
COL "总大小(GB)" FOR 999,999.99
COL "已用(GB)" FOR 999,999.99
COL "空闲(GB)" FOR 999,999.99
COL "使用率%" FOR 999.99
SELECT
d.tablespace_name "表空间",
d.contents "类型",
ROUND(a.bytes/1024/1024/1024, 2) "总大小(GB)",
ROUND((a.bytes - NVL(f.bytes, 0))/1024/1024/1024, 2) "已用(GB)",
ROUND(NVL(f.bytes, 0)/1024/1024/1024, 2) "空闲(GB)",
ROUND((a.bytes - NVL(f.bytes, 0)) / a.bytes * 100, 2) "使用率%"
FROM sys.dba_tablespaces d
JOIN (
SELECT tablespace_name, SUM(bytes) bytes
FROM dba_data_files
GROUP BY tablespace_name
) a ON d.tablespace_name = a.tablespace_name
LEFT JOIN (
SELECT tablespace_name, SUM(bytes) bytes
FROM dba_free_space
GROUP BY tablespace_name
) f ON d.tablespace_name = f.tablespace_name
WHERE d.tablespace_name = 'SYSAUX'
UNION ALL
SELECT
d.tablespace_name "表空间",
'TEMPORARY' "类型",
ROUND(a.bytes/1024/1024/1024, 2) "总大小(GB)",
ROUND(t.bytes_used/1024/1024/1024, 2) "已用(GB)",
ROUND(a.bytes/1024/1024/1024 - t.bytes_used/1024/1024/1024, 2) "空闲(GB)",
ROUND(t.bytes_used / a.bytes * 100, 2) "使用率%"
FROM sys.dba_tablespaces d
JOIN (
SELECT tablespace_name, SUM(bytes) bytes
FROM dba_temp_files
GROUP BY tablespace_name
) a ON d.tablespace_name = a.tablespace_name
JOIN (
SELECT tablespace_name, SUM(bytes_used) bytes_used
FROM v$temp_extent_pool
GROUP BY tablespace_name
) t ON d.tablespace_name = t.tablespace_name
WHERE d.tablespace_name = 'TEMP';
2. 定位占用空间对象
-- 检查SYSAUX空间占用Top对象(AWR相关表)
SELECT *
FROM (
SELECT segment_name, segment_type, ROUND(SUM(bytes)/1024/1024, 2) size_gb
FROM dba_segments
WHERE tablespace_name = '

最低0.47元/天 解锁文章
3375

被折叠的 条评论
为什么被折叠?



