暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 如何估计所有表空间的日增长

askTom 2017-09-07
506

问题描述

我试图找到一种方法来估计所有系统和用户表空间 (特别是表空间中包含的表和索引) 的字节的每日增长率。

据我所知,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,这是表空间使用时间的快照

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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论