首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Oracle中计算表大小

如何在Oracle中计算表大小
EN

Stack Overflow用户
提问于 2008-11-05 11:47:31
回答 14查看 501.9K关注 0票数 137

由于习惯了MSSQL (并且可能会被它破坏),我想知道如何才能在Oracle 10g中获得表的大小。我已经用谷歌搜索过了,所以我现在意识到我可能没有sp_spaceused那么简单的选择。尽管如此,我得到的潜在答案大多是过时的或不起作用的。可能是因为我不是正在使用的模式的DBA。

有人会有解决方案和/或建议吗?

EN

回答 14

Stack Overflow用户

发布于 2008-11-05 22:27:48

您可能会对此查询感兴趣。它告诉您在考虑索引和表上的任何LOB的情况下,为每个表分配了多少空间。通常,您感兴趣的不仅仅是表本身,而是“购买订单表占用了多少空间,包括任何索引”。你总是可以深入研究细节的。请注意,这需要访问DBA_*视图。

代码语言:javascript
复制
COLUMN TABLE_NAME FORMAT A32
COLUMN OBJECT_NAME FORMAT A32
COLUMN OWNER FORMAT A10

SELECT
   owner, 
   table_name, 
   TRUNC(sum(bytes)/1024/1024) Meg,
   ROUND( ratio_to_report( sum(bytes) ) over () * 100) Percent
FROM
(SELECT segment_name table_name, owner, bytes
 FROM dba_segments
 WHERE segment_type IN ('TABLE', 'TABLE PARTITION', 'TABLE SUBPARTITION')
 UNION ALL
 SELECT i.table_name, i.owner, s.bytes
 FROM dba_indexes i, dba_segments s
 WHERE s.segment_name = i.index_name
 AND   s.owner = i.owner
 AND   s.segment_type IN ('INDEX', 'INDEX PARTITION', 'INDEX SUBPARTITION')
 UNION ALL
 SELECT l.table_name, l.owner, s.bytes
 FROM dba_lobs l, dba_segments s
 WHERE s.segment_name = l.segment_name
 AND   s.owner = l.owner
 AND   s.segment_type IN ('LOBSEGMENT', 'LOB PARTITION')
 UNION ALL
 SELECT l.table_name, l.owner, s.bytes
 FROM dba_lobs l, dba_segments s
 WHERE s.segment_name = l.index_name
 AND   s.owner = l.owner
 AND   s.segment_type = 'LOBINDEX')
WHERE owner in UPPER('&owner')
GROUP BY table_name, owner
HAVING SUM(bytes)/1024/1024 > 10  /* Ignore really small tables */
ORDER BY SUM(bytes) desc
;
票数 212
EN

Stack Overflow用户

发布于 2008-11-05 15:45:03

首先,我通常要注意的是,为了进行空间分析而收集表统计数据是一件潜在的危险事情。收集统计信息可能会更改查询计划,尤其是在DBA配置了一个使用调用未使用的非默认参数的统计信息收集作业的情况下,这将导致Oracle重新解析使用相关表的查询,这可能会影响性能。如果数据库管理员故意让某些表没有统计信息(如果选择了OPTIMIZER_MODE,则通常是这样),收集统计信息可能会导致Oracle停止使用基于规则的优化器,而开始为一组查询使用基于成本的优化器,如果在生产中意外执行,这将是一个主要的性能难题。如果您的统计数据准确,则可以直接查询USER_TABLES (或ALL_TABLESDBA_TABLES),而无需调用GATHER_TABLE_STATS。如果你的统计数据不准确,可能是有原因的,你不想破坏现状。

其次,与SQL Server sp_spaceused过程最接近的等价物可能是Oracle的DBMS_SPACE包。Tom Kyte有一个很好的show_space procedure,它为这个包提供了一个简单的接口,并打印出类似于sp_spaceused打印的信息。

票数 34
EN

Stack Overflow用户

发布于 2013-05-21 10:01:46

我修改了WW的查询以提供更详细的信息:

代码语言:javascript
复制
SELECT * FROM (
  SELECT
    owner, object_name, object_type, table_name, ROUND(bytes)/1024/1024 AS meg,
    tablespace_name, extents, initial_extent,
    ROUND(Sum(bytes/1024/1024) OVER (PARTITION BY table_name)) AS total_table_meg
  FROM (
    -- Tables
    SELECT owner, segment_name AS object_name, 'TABLE' AS object_type,
          segment_name AS table_name, bytes,
          tablespace_name, extents, initial_extent
    FROM   dba_segments
    WHERE  segment_type IN ('TABLE', 'TABLE PARTITION', 'TABLE SUBPARTITION')
    UNION ALL
    -- Indexes
    SELECT i.owner, i.index_name AS object_name, 'INDEX' AS object_type,
          i.table_name, s.bytes,
          s.tablespace_name, s.extents, s.initial_extent
    FROM   dba_indexes i, dba_segments s
    WHERE  s.segment_name = i.index_name
    AND    s.owner = i.owner
    AND    s.segment_type IN ('INDEX', 'INDEX PARTITION', 'INDEX SUBPARTITION')
    -- LOB Segments
    UNION ALL
    SELECT l.owner, l.column_name AS object_name, 'LOB_COLUMN' AS object_type,
          l.table_name, s.bytes,
          s.tablespace_name, s.extents, s.initial_extent
    FROM   dba_lobs l, dba_segments s
    WHERE  s.segment_name = l.segment_name
    AND    s.owner = l.owner
    AND    s.segment_type = 'LOBSEGMENT'
    -- LOB Indexes
    UNION ALL
    SELECT l.owner, l.column_name AS object_name, 'LOB_INDEX' AS object_type,
          l.table_name, s.bytes,
          s.tablespace_name, s.extents, s.initial_extent
    FROM   dba_lobs l, dba_segments s
    WHERE  s.segment_name = l.index_name
    AND    s.owner = l.owner
    AND    s.segment_type = 'LOBINDEX'
  )
  WHERE owner = UPPER('&owner')
)
WHERE total_table_meg > 10
ORDER BY total_table_meg DESC, meg DESC
/
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/264914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档