CLOB存储Oracle 11g

CLOB存储Oracle 11g,oracle,oracle11g,clob,database-administration,lob,Oracle,Oracle11g,Clob,Database Administration,Lob,我遇到了OracleLOB的一个非常奇怪的行为。 情况:我们已经对包含CLOB列的物联网进行了分区CLOB具有单独的LOB存储设置,带有日志记录保留和禁用行内存储选项块大小为8192字节PCTFREE设置为默认值(dba_表中为空)。 现在,我们需要创建一个加载了一定数量的CLOBs的测试用例。我们选择了19.5KBCLOB。加载此CLOB4000万次后(用于性能测试,与内容无关)-文件系统和dba_数据_文件中的大小为1230GB 问题: 我们估计大小为40毫升CLOBs,大小为19.5KB至

我遇到了Oracle
LOB
的一个非常奇怪的行为。 情况:我们已经对包含
CLOB
列的物联网进行了分区
CLOB
具有单独的
LOB
存储设置,带有
日志记录保留
禁用行内存储
选项<代码>块大小为8192字节<代码>PCTFREE设置为默认值(dba_表中为空)。 现在,我们需要创建一个加载了一定数量的
CLOB
s的测试用例。我们选择了19.5KB
CLOB
。加载此
CLOB
4000万次后(用于性能测试,与内容无关)-文件系统和
dba_数据_文件中的大小为1230GB

问题:

我们估计大小为40毫升
CLOB
s,大小为19.5KB至~780GB。我们是如何获得更多450GB的容量的?我猜它与
大小有关-19.5KB将使用3个
s,因此大小为24KB,仍然只有960GB<代码>LOB
索引大约为2GB。 有人有什么想法吗?(很抱歉解释得不好)(P.S.运行ORACLE 11g)

提前谢谢你

您的评论是正确的:。 虽然我不会说这只是VARCHAR2的外推。UTF8是一个可变宽度的字符集,并不总是需要2个字节

15760个字符是31520个字节,只能放在4个块中,32768个字节。32768*40000000/1024/1024/1024=1220GB。这并不完美 匹配你的结果,但非常接近。我们需要看一些更详细的数字来寻找完美的匹配。

您的评论是正确的:。 虽然我不会说这只是VARCHAR2的外推。UTF8是一个可变宽度的字符集,并不总是需要2个字节

15760个字符是31520个字节,只能放在4个块中,32768个字节。32768*40000000/1024/1024/1024=1220GB。这并不完美
匹配你的结果,但非常接近。我们需要看一些更详细的数据才能找到完美的匹配。

将这额外的28%视为使用Oracle支付的税款。:-)数据文件中可能有其他内容。根据DBA_段的大小是多少?块大小是多少?如果是16k,那么数字看起来差不多正确(每行两个16k块)。块大小是8KB另一个问题出现了-我查看了CLOB的长度,它是15760个字符。数据库是UTF8格式的,因此每个字符使用2字节。因此,是否可以将CLOB存储为VARCHAR/CHAR的外推?这个数字应该是这样的。在这里我可能错了。考虑这个额外的28%作为使用Oracle的税。数据文件中可能有其他内容。根据DBA_段的大小是多少?块大小是多少?如果是16k,那么数字看起来差不多正确(每行两个16k块)。块大小是8KB另一个问题出现了-我查看了CLOB的长度,它是15760个字符。数据库是UTF8格式的,因此每个字符使用2字节。因此,是否可以将CLOB存储为VARCHAR/CHAR的外推?这个数字应该是这样的。我可能错了。谢谢你的评论!7GB的差异可能与PCTVERSION和LOB索引有关。虽然有一些问题困扰着我-我们的DB是AL32UTF8,但这个字符集的规范说ASCII字符存储为1字节,任何欧洲字符存储为2字节,等等()。但我想这对LOB列来说不是真的。是的,有点奇怪。UTF8的一大优点是使用更少的空间。但是,如果大文本值以不同的方式在内部存储,那么这种优势就失去了。如果空间是一个巨大的问题,你可能想考虑使用压缩或bFrm。虽然你可能会遇到麻烦。谢谢你的评论!7GB的差异可能与PCTVERSION和LOB索引有关。虽然有一些问题困扰着我-我们的DB是AL32UTF8,但这个字符集的规范说ASCII字符存储为1字节,任何欧洲字符存储为2字节,等等()。但我想这对LOB列来说不是真的。是的,有点奇怪。UTF8的一大优点是使用更少的空间。但是,如果大文本值以不同的方式在内部存储,那么这种优势就失去了。如果空间是一个巨大的问题,你可能想考虑使用压缩或bFrm。尽管你可能会遇到麻烦。