blocks bytes extents比较

本文详细介绍了Oracle数据库中段管理的相关概念及查询方法,包括段的类型、数据文件位置及分配情况等。通过具体SQL示例展示了如何查询不同类型的段所占用的空间及段的详细属性。

本文转自:http://space.itpub.net/385741/viewspace-545360

1、desc dba_segments
名称 是否为空? 类型
----------------------------------------------------------------- -------- ------------
OWNER VARCHAR2(30)
SEGMENT_NAME VARCHAR2(81)
PARTITION_NAME VARCHAR2(30)
SEGMENT_TYPE VARCHAR2(18)
TABLESPACE_NAME VARCHAR2(30)
HEADER_FILE NUMBER
HEADER_BLOCK NUMBER
BYTES NUMBER
BLOCKS NUMBER
EXTENTS NUMBER
INITIAL_EXTENT NUMBER
NEXT_EXTENT NUMBER
MIN_EXTENTS NUMBER
MAX_EXTENTS NUMBER
PCT_INCREASE NUMBER
FREELISTS NUMBER
FREELIST_GROUPS NUMBER
RELATIVE_FNO NUMBER
BUFFER_POOL VARCHAR2(7)

2、字段说明
SEGMENT_TYPE:段的类型,可能是table,index,logindex,lobsegment等。
header_file:表示这个段的头在哪个数据文件里,因为段可以跨数据文件。
header_block:表示这个段的头在数据文件的第几个block里。
bytes:段的大小(目前占用的大小?)
blocks:段占用了多少个block
extents:分配了多少个extent。
initial_extent:初始分配的extent大小(以byte计)。
next_extent:下一个分配的extent大小(以byte计)。如果为空表示是自动分配。(每个extent可以有不同大小,如果设置为uniform的话,每个extent就一样大小了)
min_extents:最少分配多少个extent(以个数计)。
max_extents:最多分配多少个extent(以个数计)。
pct_increase:percent increase表示第三个或后续的extent的大小比前一个增加的百分比,如第一个extent是64K,第二个是64K,pct_increase=50%,则第三个extent是64K*1.5=96K,第四个96K*1.5=144K,依次类推。
freelists:这个字段在字典管理的表空间中才有意义。
fresslist_groups:这个字段在字典管理的表空间中才有意义。
relative_fno:这个段所在数据文件的relative fno
buffer_pool:这个段的数据将被读取到哪一个buffer pool里。

3、可以查询到的东西
a、查询各种类型的段占用了多少空间。
select sum(bytes),segment_name from dba_segments where tablespace_name='SYSTEM' and segment_type='TABLE' group by segment_name order by sum(bytes) desc;
b、段的extent分配情况
c、段在数据文件中的位置
select header_file,header_bloc from dba_segments where segment_name='xxxxxx'。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25623297/viewspace-691985/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/25623297/viewspace-691985/

WITH block_size AS ( SELECT value AS bytes_per_block FROM v$parameter WHERE name = 'db_block_size' ), -- 获取每个表的总大小 table_size AS ( SELECT s.owner, s.segment_name AS table_name, SUM(s.bytes) AS total_bytes FROM dba_segments s WHERE s.segment_type = 'TABLE' GROUP BY s.owner, s.segment_name ), -- 获取每个表的已使用空间 used_space AS ( SELECT t.owner, t.table_name, SUM(CASE WHEN a.blocks IS NULL THEN 0 ELSE a.blocks END) * (SELECT bytes_per_block FROM block_size) AS used_bytes FROM dba_tables t LEFT JOIN dba_extents a ON t.owner = a.owner AND t.table_name = a.segment_name GROUP BY t.owner, t.table_name ), -- 计算每个表的未使用空间 table_unused_space AS ( SELECT ts.owner, ts.table_name, ts.total_bytes, COALESCE(us.used_bytes, 0) AS used_bytes, ts.total_bytes - COALESCE(us.used_bytes, 0) AS unused_bytes, (ts.total_bytes - COALESCE(us.used_bytes, 0)) / ts.total_bytes * 100 AS unused_percentage FROM table_size ts LEFT JOIN used_space us ON ts.owner = us.owner AND ts.table_name = us.table_name ) -- 最终结果 SELECT owner, table_name, ROUND(total_bytes / (1024 * 1024 * 1024), 2) AS total_size_gb, ROUND(used_bytes / (1024 * 1024 * 1024), 2) AS used_size_gb, ROUND(unused_bytes / (1024 * 1024 * 1024), 2) AS unused_size_gb, ROUND(unused_percentage, 2) AS unused_percentage FROM table_unused_space --WHERE unused_percentage > 20 -- 过滤未使用空间占比超过50%的表 ORDER BY unused_percentage DESC; 解释 total_size_gb, used_size_gb, unused_size_gb, unused_percentage
最新发布
09-18
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值