小编典典

当存储为BINARY XML时,Oracle XMLType有多大

sql

Oracle文档声称它将XMLType存储为BINARY XML比存储CLOB更紧凑。但是,如何找出二进制xml占用了多少空间?

CREATE TABLE t (x XMLTYPE) XMLTYPE x STORE AS BINARY XML;

SELECT vsize(x), dbms_lob.getlength(XMLTYPE.getclobval(x)) FROM t;

94 135254
94  63848
94  60188

因此,vsize似乎是某种指针或LOB定位器的大小,并将getclobval二进制XML解压缩为文本。但是二进制XML本身的存储大小如何?

请帮助,表大小为340GB,因此值得研究存储选项…


阅读 269

收藏
2021-03-23

共1个答案

小编典典

Oracle二进制XML格式对应于缩写为CSX的“紧凑型模式感知XML格式”。编码数据存储为BLOB字段。有关二进制XML格式的详细信息,可从Oracle文档中获得(此处此处)。

数据字段的实际大小取决于XMLType列的LOB存储参数。例如,如果storage in row启用了该选项,则小型文档将直接与其他数据一起存储并vsize()返回适当的值。

实际上,Oracle使用系统名称创建底层的BLOB列,可以通过查询user_tab_cols视图找到该列:

select table_name, column_name, data_type 
from user_tab_cols 
where 
  table_name = 'T' and hidden_column = 'YES'
  and
  column_id = (
      select column_id 
      from user_tab_cols 
      where table_name = 'T' and column_name = 'X'
  )

此查询返回看起来像的系统隐藏列名称SYS_NC00002$

之后,可以通过dbms_lob.getlength()对隐藏列的常规调用来获取字段的大小:

select dbms_lob.getlength(SYS_NC00002$) from t
2021-03-23