AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 45526
Accepted
biziclop
biziclop
Asked: 2013-07-02 07:41:18 +0800 CST2013-07-02 07:41:18 +0800 CST 2013-07-02 07:41:18 +0800 CST

如何确定 Oracle LOB 存储占用空间?

  • 772

使用SECUREFILE存储,我可以指定是否需要压缩(及其级别)和重复数据删除,这都是时间和空间之间的权衡。

时序相当容易分析,但要合理准确地测量特定 LOB 列占用多少空间,最简单的方法是什么?

oracle-11g-r2 storage
  • 1 1 个回答
  • 8390 Views

1 个回答

  • Voted
  1. Best Answer
    sehrope
    2013-07-19T10:23:17+08:002013-07-19T10:23:17+08:00

    您可以通过 获取 BLOB 列的大小(以字节为单位)DBMS_LOB.GETLENGTH(...)。

    要获得整个表的列的总大小(以字节为单位),SUM如下所示:

    SELECT SUM(DBMS_LOB.GETLENGTH(my_blob_column)) as total_bytes
    FROM my_table
    

    如果您已将 BLOB 列标记为重复数据删除,那么您可以运行类似以下的内容来获取实际使用的字节大小的统计信息。比较used_bytes启用设置之前/之后的值,这些设置可能会更改 BLOB 列的大小(例如,重复数据删除、压缩等)。

    declare  
        p_schema_name           varchar(256) DEFAULT 'THE_SCHEMA_NAME';
        p_table_name            varchar(256) DEFAULT 'THE_TABLE_NAME';
        --
        l_segment_name          varchar2(30);
        l_segment_size_blocks   number; 
        l_segment_size_bytes    number; 
        l_used_blocks           number;  
        l_used_bytes            number;  
        l_expired_blocks        number;  
        l_expired_bytes         number;  
        l_unexpired_blocks      number;  
        l_unexpired_bytes       number;  
    
    begin
        FOR rec IN (select segment_name 
                    from dba_lobs 
                    where owner = p_schema_name
                      and table_name = p_table_name
                    order by 1)
        LOOP
            dbms_output.put_line('Segment Name=' || rec.segment_name);
    
            dbms_space.space_usage( 
                segment_owner           => p_schema_name,  
                segment_name            => rec.segment_name, 
                segment_type            => 'LOB', 
                partition_name          => NULL, 
                segment_size_blocks     => l_segment_size_blocks, 
                segment_size_bytes      => l_segment_size_bytes, 
                used_blocks             => l_used_blocks, 
                used_bytes              => l_used_bytes, 
                expired_blocks          => l_expired_blocks, 
                expired_bytes           => l_expired_bytes, 
                unexpired_blocks        => l_unexpired_blocks, 
                unexpired_bytes         => l_unexpired_bytes 
            );   
    
    
            dbms_output.put_line('  segment_size_blocks       => '||  l_segment_size_blocks);
            dbms_output.put_line('  segment_size_bytes        => '||  l_segment_size_bytes);
            dbms_output.put_line('  used_blocks               => '||  l_used_blocks);
            dbms_output.put_line('  used_bytes                => '||  l_used_bytes);
            dbms_output.put_line('  expired_blocks            => '||  l_expired_blocks);
            dbms_output.put_line('  expired_bytes             => '||  l_expired_bytes);
            dbms_output.put_line('  unexpired_blocks          => '||  l_unexpired_blocks);
            dbms_output.put_line('  unexpired_bytes           => '||  l_unexpired_bytes);
        END LOOP;
    end;
    /
    

    此代码是 Oracle 帖子中解释重复数据删除如何工作的代码的略微修改版本。原件可在此处获得:http ://www.oracle.com/technetwork/articles/sql/11g-securefiles-084075.html 。

    • 3

相关问题

  • 数据泵导出如何在 Windows 上限制其资源使用?

  • 数据泵导出如何在 Linux 上限制其资源使用?

  • 为什么操作系统身份验证被认为是 Oracle 数据库的低安全性?

  • 您如何对 Oracle 数据库更改进行版本控制?

  • 有没有办法允许代理连接在公共数据库链接中使用通过的身份验证?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    授予用户对所有表的访问权限

    • 5 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve