问题描述
我试图找到一种方法来估计所有系统和用户表空间 (特别是表空间中包含的表和索引) 的字节的每日增长率。
据我所知,oracle没有提供一种机制来返回表空间以字节为单位的增长率 (如果有查询,请纠正我),所以我的方法是每天计算表空间 (表和索引) 的大小,然后减去一天的字节大小对另一个人来说,估计每日增长
为此,我使用以下查询,该查询获取tablespace_name,表空间表和索引 (用户和系统索引) 的字节总和以及执行查询的时间
这个查询对我要找的是正确的吗?这真的是表空间的表和索引的字节之和,还是我错过了什么?
有什么方法可以估计表空间的字节增长,而不是每天减去字节之和?
提前谢谢,
据我所知,oracle没有提供一种机制来返回表空间以字节为单位的增长率 (如果有查询,请纠正我),所以我的方法是每天计算表空间 (表和索引) 的大小,然后减去一天的字节大小对另一个人来说,估计每日增长
为此,我使用以下查询,该查询获取tablespace_name,表空间表和索引 (用户和系统索引) 的字节总和以及执行查询的时间
SELECT
tablespace_name,
sum(bytes) "BYTES",
current_timestamp
FROM (
SELECT
tablespace_name,
sum(bytes) "BYTES",
current_timestamp
FROM user_segments
WHERE segment_type = 'INDEX' OR segment_type = 'TABLE'
GROUP BY tablespace_name, current_timestamp
UNION ALL
SELECT
tablespace_name,
sum(bytes) "BYTES",
current_timestamp
FROM dba_segments
WHERE segment_type = 'INDEX' OR segment_type = 'TABLE'
GROUP BY tablespace_name, current_timestamp)
GROUP BY tablespace_name, current_timestamp;
这个查询对我要找的是正确的吗?这真的是表空间的表和索引的字节之和,还是我错过了什么?
有什么方法可以估计表空间的字节增长,而不是每天减去字节之和?
提前谢谢,
专家解答
我可以使用dba_hist_tbspc_space_usage,这是表空间使用时间的快照
我们那里没有表空间 * name *,但是我们可以使用v $ tablespace来获得它
为了使这些snap_id成为日历日期,我们可以使用dba_hist_snapshot
对文档的快速检查告诉我们dba_hist_tbspc_space_usage中的数字是块中的,因此,我们需要引入dba_tablespaces以及获得块大小 (或者如果您的数据库全部在8k上,则可以省略它),但除此之外,我们可以将查询放在一起以适应我们的需求相当快
所以像这样的事情应该会让你开始
SQL> desc dba_hist_tbspc_space_usage Name Null? Type ----------------------------------------------------------------------- -------- ----------------------------------- SNAP_ID NUMBER DBID NOT NULL NUMBER TABLESPACE_ID NUMBER TABLESPACE_SIZE NUMBER TABLESPACE_MAXSIZE NUMBER TABLESPACE_USEDSIZE NUMBER RTIME VARCHAR2(25) CON_DBID NUMBER CON_ID NUMBER
我们那里没有表空间 * name *,但是我们可以使用v $ tablespace来获得它
SQL> desc v$tablespace Name Null? Type ----------------------------------------------------------------------- -------- ----------------------------------- TS# NUMBER NAME VARCHAR2(30) INCLUDED_IN_DATABASE_BACKUP VARCHAR2(3) BIGFILE VARCHAR2(3) FLASHBACK_ON VARCHAR2(3) ENCRYPT_IN_BACKUP VARCHAR2(3) CON_ID NUMBER
为了使这些snap_id成为日历日期,我们可以使用dba_hist_snapshot
SQL> desc dba_hist_snapshot Name Null? Type ----------------------------------------------------------------------- -------- ----------------------------------- SNAP_ID NOT NULL NUMBER DBID NOT NULL NUMBER INSTANCE_NUMBER NOT NULL NUMBER STARTUP_TIME NOT NULL TIMESTAMP(3) BEGIN_INTERVAL_TIME NOT NULL TIMESTAMP(3) END_INTERVAL_TIME NOT NULL TIMESTAMP(3) FLUSH_ELAPSED INTERVAL DAY(5) TO SECOND(1) SNAP_LEVEL NUMBER ERROR_COUNT NUMBER SNAP_FLAG NUMBER SNAP_TIMEZONE INTERVAL DAY(0) TO SECOND(0) CON_ID NUMBER
对文档的快速检查告诉我们dba_hist_tbspc_space_usage中的数字是块中的,因此,我们需要引入dba_tablespaces以及获得块大小 (或者如果您的数据库全部在8k上,则可以省略它),但除此之外,我们可以将查询放在一起以适应我们的需求相当快
所以像这样的事情应该会让你开始
select dhs.begin_interval_time, dt.tablespace_name, trunc(dhtsu.tablespace_size*dt.block_size/1024/1024/1024) gb, trunc(dhtsu.tablespace_usedsize*dt.block_size/1024/1024/1024) gb_used from dba_hist_tbspc_space_usage dhtsu, v$tablespace vts, dba_tablespaces dt, dba_hist_snapshot dhs where dhtsu.snap_id = dhs.snap_id and dhtsu.tablespace_id = vts.ts# and vts.name = dt.tablespace_name order by 2,1;
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




