【问题标题】:CLOB storage Oracle 11gCLOB 存储 Oracle 11g
【发布时间】:2013-08-02 13:56:09
【问题描述】:

我遇到了 Oracle LOB 的一个非常奇怪的行为。 情况:我们对包含 CLOB 列的 IOT 进行了分区。 CLOB 具有单独的 LOB 存储设置,带有 LOGGING RETENTIONDISABLE IN ROW STORAGE 选项。 CHUNK 大小为 8192 字节。 PCTFREE 设置为默认值(dba_tables 中为空)。 现在,我们需要创建一个加载了一定数量的CLOBs 的测试用例。我们选择了 19.5KB CLOB。加载此CLOB 4000 万次后(用于性能测试,与内容无关) - 文件系统和dba_data_files 中的大小为 1230GB。

问题:

我们估计大小为 4000 万。 CLOBs 大小为 19.5KB 到 ~780GB。我们是如何获得 450GB 以上的?我猜它与CHUNK 大小有关——19.5KB 将使用 3 个CHUNKs,因此大小为 24KB,但仍然只有 960GB。 LOB 索引约为 2GB。 有人有想法吗?(抱歉解释不佳)(P.S.运行 ORACLE 11g)

提前谢谢你!

【问题讨论】:

  • 将此额外的 28% 视为使用 Oracle 支付的税款。 :-)
  • 数据文件中可能有其他内容。根据 DBA_SEGMENTS 的大小是多少?
  • 你的块大小是多少?如果是 16k,那么这些数字看起来应该是正确的(每行两个 16k 块)。
  • 嗨,DBA_SEGMENTS 显示完全相同的大小。块大小为 8KB
  • 出现另一个问题 - 我查看了 CLOB 的长度,它是 15760 个字符。数据库采用 UTF8 格式,因此每个字符使用 2 个字节。因此,CLOB 是否只是存储为 VARCHAR/CHAR 的外推?数字将适合这种方式。我可能在这里错了。

标签: oracle oracle11g clob database-administration lob


【解决方案1】:

您的评论是正确的:"Data in CLOB columns is stored in a format that is compatible with UCS-2 when the database character set is multibyte, such as UTF8 or AL32UTF8"。 虽然我不会说这只是 VARCHAR2 的外推。 UTF8 是一个可变宽度字符集,并不总是需要 2 个字节。

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

【讨论】:

  • 感谢您的评论! 7GB 的差异可能与 PCTVERSION 和 LOB 索引有关。虽然有些事情让我感到困扰——我们的数据库是 AL32UTF8,但是这个字符集的规范说 ASCII 字符存储为 1 个字节,任何欧洲字符都存储为 2 个字节等(Character set encodings and storage size factors)。但我想这对于 LOB 列来说是不正确的。
  • 是的,这有点奇怪。 UTF8 的一大优势是占用的空间更少。但是,如果大文本值以不同的方式在内部存储,那么这种优势就会丧失。如果空间是一个大问题,您可能需要考虑使用压缩或 BFILE。虽然你可能会遇到similar problem with BFILEs
猜你喜欢
  • 2019-12-25
  • 2014-06-18
  • 1970-01-01
  • 1970-01-01
  • 2019-03-16
  • 2014-05-07
  • 2020-06-15
  • 1970-01-01
  • 2016-06-24
相关资源
最近更新 更多