含LOB的表实际容量计算方法

简介: 前两天有一个开发库,报了ORA-01654的错误,提示的是SYS_IL000…$$的对象不能分配表空间了,首先这种SYS_IL的对象名称是系统默认为LOB大对象LOBINDEX设置的名称,其次开发人员检索dba_segments视图看这个LOB所属表的空间,似乎占比一般。

前两天有一个开发库,报了ORA-01654的错误,提示的是SYS_IL000…$$的对象不能分配表空间了,首先这种SYS_IL的对象名称是系统默认为LOB大对象LOBINDEX设置的名称,其次开发人员检索dba_segments视图看这个LOB所属表的空间,似乎占比一般。

这次涉及的问题,就是如何计算包含LOB对象的表空间实际容量的方法,之所以是说实际容量,是因为仅检索表所占空间,并不能反映LOB的容量。

这篇文章《How to Compute the Size of a Table containing Outline CLOBs and BLOBs (文档 ID 118531.1)》,就介绍了计算方法,接下来的实验会以此为依据。

LOB是一种大对象类型,分为CLOB存储字符串类型,BLOB存储二进制类型。例如普通的VARCHAR2类型存储的字符串,容量不能超过4000字节,因此若是超过了,则可以用CLOB存储。LOB中的存储很奇特,若是4000字节以内,则和普通的VARCHAR2一样,若超过则会存储于和表不同的,一个特殊的LOB段中,并且会有一个INDEX段,因此简单来看,一个包含LOB的表,可能包含表段、LOB段和LOB INDEX段三个segment对象。但dba_segments中表的容量不包含LOB段的容量(CLOB/BLOB),因此包含LOB的表实际容量为,
这里写图片描述

实验:
1.创建测试表和数据
这里写图片描述
TEST_TABLE表包含了两个CLOB列(超过4000字节),INSERT了1000条记录。

2.检索user_segments视图,
这里写图片描述
了解TEST_TABLE包含了五个段,一个TEST_TABLE表段,两个LOBINDEX段,两个LOBSEGMENT段,且计算所有段容量为12845056字节。

3.检索user_lobs视图,
这里写图片描述
可知这两个LOBSEGMENT段属于具体的列。

4.使用文章中提供的脚本,
这里写图片描述
dba_segments可以计算出表段容量。
dba_segments和dba_lobs联合计算出LOBSEGMENT容量。
dba_segments和dba_indexes根据INDEX类型为LOB计算出LOBINDEX容量。

提供用户名、表名参数,
这里写图片描述
容量为1284506,和(2)结果一致。

总结:
1.包含LOB对象的表,实际包含了表段、LOBSEGMENT和LOBINDEX三个对象类型,因此dba_segments仅检索表段则不是实际容量。
2.根据LOB包含的对象类型,可以根据dba_segments、dba_lobs和dba_indexes来计算实际容量。

欢迎关注我的个人微信公众号:bisal的个人杂货铺

目录
相关文章
|
11天前
|
对象存储
统计数组中的重复数据的数量
这篇文章总结了5种统计数组中重复数据数量的方法。方法1和4使用for循环和对象存储计数;方法2和5利用`reduce`函数,其中方法5是最简写形式;方法3是特定场景下的应用,针对特定值计数。所有方法最终都返回一个对象,键为数组元素,值为出现次数。
|
6月前
|
存储 关系型数据库 MySQL
MySQL使用InnoDB引擎时一张表最大可以储存数据大小为 64TB,那为什么当表中的单行数据达到16KB时,这张表只能储存一条数据?
MySQL使用InnoDB引擎时一张表最大可以储存数据大小为 64TB,那为什么当表中的单行数据达到16KB时,这张表只能储存一条数据?
|
11月前
|
关系型数据库 MySQL 索引
一个表中索引的数量是不是越多越好?
往InnoDB表新增数据时,都会基于主键给自动建立聚簇索引。 随着我们不停的在表里插入数据,会不停的在数据页里插入数据。一个数据页放满后,就会分裂成多个数据页,这时就需要索引页去指向各个数据页。
96 0
|
关系型数据库 MySQL 索引
|
存储 Oracle 关系型数据库
[MySQL优化案例]系列 — 优化InnoDB表BLOB列的存储效率
[MySQL优化案例]系列 — 优化InnoDB表BLOB列的存储效率
121 0
[MySQL优化案例]系列 — 优化InnoDB表BLOB列的存储效率
|
SQL Oracle 关系型数据库
全表扫描读高水位以下的块
Oracle全表扫描的解读。
获取表结构信息(字段名,类型,长度,精度,小数位数,主键,自动增长)
原文:获取表结构信息(字段名,类型,长度,精度,小数位数,主键,自动增长) 获取表结构的一些简要信息,可以生成自己需要的字典,简单又实用! 以数据表PP_MO为例: SELECT OBJECT_NAME(A.
1339 0
|
关系型数据库 MySQL 索引
如何计算指定的InnoDB索引大小
前言 通常情况下,获取InnoDB索引的大小通常的方法是show table status,但是如果想获取指定的索引大小呢? 通常情况下我们想看索引大小的话,用的是 show table status like ""\G 例1: mysql> show create table sbtest1\G *************************** 1.
4389 0