undo表空间使用率大

[复制链接]
查看11 | 回复9 | 2011-11-1 16:25:22 | 显示全部楼层 |阅读模式
系统:linux 64位
数据库版本:rac 2节点,10.2.0.5 64位

信息如下:
1.em中undo表空间为67%,而sqlplus中查询如下
SELECT ((SELECT (NVL(SUM(bytes), 0))
FROM dba_undo_extents

WHERE tablespace_name = 'UNDOTBS2'

AND status IN ('ACTIVE', 'UNEXPIRED')) * 100) /
(SELECT SUM(bytes)

FROM dba_data_files
WHERE tablespace_name = 'UNDOTBS2') PCT_INUSE
FROM dual;
----------------------------------
PCT_INUSE:87.224375


2.SELECT tablespace_name, status, SUM(bytes) / 1024 / 1024 "Bytes(M)"
FROM dba_undo_extents
GROUP BY tablespace_name, status;
-------------------------


QQ图片20140626092602.jpg (21.77 KB, 下载次数: 10)
下载附件
2014-6-26 09:26 上传


3.alert中无相关错误信息
4.undo表空间建在裸设备上,没有多余的空间重建undo


想问下:
1.em中的undo信息为什么和脚本中的不一致?
2.undo表空间正常不,要不要做调整



回复

使用道具 举报

千问 | 2011-11-1 16:25:22 | 显示全部楼层
UNDO表空间和TEMP空间类似,都是循环使用的,所以,使用率的大小有一定的意义,但并不是最重要的。
对于UNDO空间多大合适,有一个计算方法:
每秒平均(或最大)产生的UNDO数据块的数量*块尺寸*UNDO数据保存的最短时间(或最长的SQL运行时间)
其中“每秒平均(或最大)产生的UNDO数据块的数量”可以通过v$undostat字典视图来计算,计算方法如下:
每秒平均产生的UNDO数据块的数量:
SELECT (SUM(undoblks))/ SUM((end_time - begin_time) * 86400) FROM v$undostat;
每秒最大产生的UNDO数据块的数量:
SELECT max(undoblks / ((end_time - begin_time) * 24 * 3600)) FROM v$undostat;
其中“块尺寸”可以通过系统参数db_block_size查询得知(一般默认为8192)。
show parameter db_block_size
其中“UNDO数据保存的最短时间”可以通过系统参数undo_retention查询得知 (默认为900秒)
show parameter undo_retention
而“最长的SQL运行时间”可以通过以下方法确定:
SELECT max(SUM(elapsed_seconds)) FROM v$session_longops GROUP BY sid,serial#,sql_id
将以上得出的数字代入公式,就可以计算出UNDO所需空间的大小了。

回复

使用道具 举报

千问 | 2011-11-1 16:25:22 | 显示全部楼层
bfc99 发表于 2014-6-26 10:45
UNDO表空间和TEMP空间类似,都是循环使用的,所以,使用率的大小有一定的意义,但并不是最重要的。
对于UN ...


也有人是这样搞的
SELECT (UR * (UPS * DBS)) + (DBS * 24) AS "Bytes"
FROM (SELECT value AS UR FROM v$parameter WHERE name = 'undo_retention'),
(SELECT (SUM(undoblks)/SUM(((end_time - begin_time)*86400))) AS UPS FROM v$undostat),
(select block_size as DBS from dba_tablespaces where tablespace_name=
(select value from v$parameter where name = 'undo_tablespace'));
Bytes
----------
413215736

那么一个undo表空间的理论大小为:413215736*900
回复

使用道具 举报

千问 | 2011-11-1 16:25:22 | 显示全部楼层
ming270004540 发表于 2014-6-26 16:24
也有人是这样搞的
SELECT (UR * (UPS * DBS)) + (DBS * 24) AS "Bytes"

这里就不用乘900了。
因为其在SQL中已经取了undo_retention的值了。
其算出的结果就是建议的UNDO空间大小。
回复

使用道具 举报

千问 | 2011-11-1 16:25:22 | 显示全部楼层
undo 表空间可以缩小啊
回复

使用道具 举报

千问 | 2011-11-1 16:25:22 | 显示全部楼层
bfc99 发表于 2014-6-26 10:45
UNDO表空间和TEMP空间类似,都是循环使用的,所以,使用率的大小有一定的意义,但并不是最重要的。
对于UN ...

大西瓜果然很给力
回复

使用道具 举报

千问 | 2011-11-1 16:25:22 | 显示全部楼层
UNDO表空间分配与使用的原因,因表空间是否自动增加等有关系,你可以去看一下具体的UNDO表空间的管理 ,
另一方面,自动 的UNDO调优在一些情况下有BUG,可以考虑禁用undo自动的调优。
回复

使用道具 举报

千问 | 2011-11-1 16:25:22 | 显示全部楼层
初识orcl 发表于 2014-6-26 23:38
大西瓜果然很给力




回复

使用道具 举报

千问 | 2011-11-1 16:25:22 | 显示全部楼层
搭帖问个问题,使用过程中发现DBA_TABLESPACE_USAGE_METRICS视图中查询出来的undo使用率和楼主使用的脚本差异很大,前者3%,后者72%

回复

使用道具 举报

千问 | 2011-11-1 16:25:22 | 显示全部楼层
bfc99 发表于 2014-6-27 09:02
DBA_TABLESPACE_USAGE_METRICS视图中查询出来的undo使用率和楼主使用的脚本差异很大,前者3%,后者72%,西瓜大神还知道什么原因
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行