查看表空间使用情况

1.查看表空间使用情况

select (tablespace_name) "表空间名",
       sum(total_size) "总空间/M",
       sum(total_free) "剩余空间/M",
       sum(max_continue) "最大连续空间/M",
       round(sum(total_free) / sum(total_size) * 100) "剩余百分比/ratio"
  from ((select tablespace_name,
                (0) total_size,
                round(sum(bytes) / 1024 / 1024, 2) total_free,
                round(max(bytes) / 1024 / 1024, 2) max_continue
           from dba_free_space
          group by tablespace_name) union all
        (select tablespace_name, round(sum(bytes) / 1024 / 1024, 2), 0, 0
           from dba_data_files
          group by tablespace_name))
 group by tablespace_name
 order by 5 asc

 

2.查看各个对象的表空间使用情况

select t.owner,
       t.segment_name,
       t.segment_type,
       sum(bytes) / (1024 * 1024) as "size(M)"
  from dba_segments t
 --where t.owner IN ('KRMDBA', 'BRMETL', 'ALMRPT')
 group by t.segment_name, t.segment_type, t.owner

 

在 H2 数据库中,虽然不像某些企业级数据库(如 Oracle 或 PostgreSQL)那样提供完整的表空间管理功能,但可以通过一些系统表和内置的 SQL 查询来检查表的存储使用情况。H2 数据库主要将所有数据存储在一个文件中,因此没有传统意义上的“表空间”概念,但可以通过查询系统表来获取与表大小相关的信息。 以下是一些可以用来查看使用情况的查询方法: ### 使用 `INFORMATION_SCHEMA` 查询表大小 H2 提供了 `INFORMATION_SCHEMA.TABLES` 表,其中包含了一些关于表的基本信息,包括近似的行数和存储大小: ```sql SELECT TABLE_NAME, SELF AS "Table_Size", ROW_COUNT_ESTIMATED AS "Row_Count" FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'PUBLIC'; ``` - `SELF` 表示该表在数据库文件中占用的大致字节数。 - `ROW_COUNT_ESTIMATED` 是表的行数估计值。 ### 查询具体的表大小 如果需要更详细的存储信息,可以结合系统表和自定义查询来估算每个表的空间使用情况: ```sql SELECT TABLE_NAME, SELF AS "Data_Size", INDEX_LENGTH AS "Index_Size", (SELF + INDEX_LENGTH) AS "Total_Size" FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'PUBLIC'; ``` - `SELF` 表示数据部分的大小。 - `INDEX_LENGTH` 表示索引部分的大小。 ### 使用 `SCRIPT` 命令导出数据库结构和大小信息 如果需要更全面的数据库文件信息,可以使用 `SCRIPT` 命令导出整个数据库的 SQL 脚本,这将包括所有表、索引和数据,从而帮助评估数据库的整体大小: ```sql SCRIPT TO 'backup.sql'; ``` 这将生成一个包含完整数据库结构和数据的 SQL 文件,可用于分析数据库文件的实际大小。 ### 使用 Java API 获取数据库文件大小 如果 H2 数据库是以文件形式存储(默认方式),可以通过文件系统查看数据库文件的大小。例如,在 Java 中可以这样获取: ```java import java.io.File; public class H2DatabaseSizeChecker { public static void main(String[] args) { String dbFilePath = "path/to/your/database"; // 不包含 .mv.db 后缀 File dbFile = new File(dbFilePath + ".mv.db"); if (dbFile.exists()) { long sizeInBytes = dbFile.length(); System.out.println("Database file size: " + sizeInBytes + " bytes"); } else { System.out.println("Database file does not exist."); } } } ``` ### 查看表空间使用情况的注意事项 - H2 的 `INFORMATION_SCHEMA.TABLES` 中的大小信息是估计值,可能不会完全精确。 - 对于频繁更新的表,建议定期运行 `ANALYZE` 命令以更新统计信息: ```sql ANALYZE; ``` - 如果使用的是内存数据库(`mem:` 模式),则无法通过文件系统查看数据库大小。 通过这些方法,可以在 H2 数据库中有效地监控和分析表的存储使用情况[^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值