如何在 Sybase 中启用行内 (LOB) 存储以及何时考虑启用它?
How to enable in-rows (LOB ) storage in Sybase and when to consider enabling it?
我在 table 中有一些块包含 IMAGE 和 TEXT 列(类似于此 SO question) after some researches in-row
and off-row
feature in sybase ase 15.7 can improve the performance (if the size less then 4k in the logical storage, the LOB data will be place with the same page of table values thats called in-row more info here)。
谁能解释一下:
-如何在数据库上启用此功能?是否使用 create table 命令启用?或改变 table ?
-如何查看是否启用?
-为什么它可能会减少或删除块?
-为什么 Text/image 数据类型可能导致 locks/blocks 而启用行内会删除它?
您必须通过对现有 table 的列进行更改 table 来为每一列启用该选项,或者如果它是一个新的 table 则您可以设置该选项专栏:
alter table tablename modify mycol in row (500)
这里我说过任何长度小于 500 字节的列都将存储在行内,任何超过 500 字节的长度都将存储在行外(旧的默认行为)。这可以大大缩小 table 大小,其中您有很多非常小的 text/image 列和较大的页面大小,因为它避免了在文本链中每行浪费整页。
启用后,它将显示在 sp_help 输出中的列中。要检查它是否是您需要考虑的好处:
- 您的 Sybase 数据服务器页面大小(页面大小越大,每个文本链页面浪费更多 space)
- text/image 列中数据的平均大小,因为数据越小,使用行内 LOB 的好处就越大。如果您的所有数据都大于数据服务器的页面大小,则不会有任何好处,因为数据仍将像更改前一样存储在行外。
您必须将数据重新加载到 table 才能使更改生效,因此您可以通过 select 执行此操作(以创建 table 和数据)或通过 BCP out/in.
这里的 Sybase 文档中有更多信息:
在阻塞方面,如果数据符合条件并保存在行中,它将从 table 本身读取,而不是从文本链中读取,文本链实际上是末尾的一个大堆table。您还可以获得显着 space 节省 table 大小的好处(取决于数据大小),这会减少 IO,从而有助于提高性能。
我在 table 中有一些块包含 IMAGE 和 TEXT 列(类似于此 SO question) after some researches in-row
and off-row
feature in sybase ase 15.7 can improve the performance (if the size less then 4k in the logical storage, the LOB data will be place with the same page of table values thats called in-row more info here)。
谁能解释一下:
-如何在数据库上启用此功能?是否使用 create table 命令启用?或改变 table ?
-如何查看是否启用?
-为什么它可能会减少或删除块?
-为什么 Text/image 数据类型可能导致 locks/blocks 而启用行内会删除它?
您必须通过对现有 table 的列进行更改 table 来为每一列启用该选项,或者如果它是一个新的 table 则您可以设置该选项专栏:
alter table tablename modify mycol in row (500)
这里我说过任何长度小于 500 字节的列都将存储在行内,任何超过 500 字节的长度都将存储在行外(旧的默认行为)。这可以大大缩小 table 大小,其中您有很多非常小的 text/image 列和较大的页面大小,因为它避免了在文本链中每行浪费整页。
启用后,它将显示在 sp_help 输出中的列中。要检查它是否是您需要考虑的好处:
- 您的 Sybase 数据服务器页面大小(页面大小越大,每个文本链页面浪费更多 space)
- text/image 列中数据的平均大小,因为数据越小,使用行内 LOB 的好处就越大。如果您的所有数据都大于数据服务器的页面大小,则不会有任何好处,因为数据仍将像更改前一样存储在行外。
您必须将数据重新加载到 table 才能使更改生效,因此您可以通过 select 执行此操作(以创建 table 和数据)或通过 BCP out/in.
这里的 Sybase 文档中有更多信息:
在阻塞方面,如果数据符合条件并保存在行中,它将从 table 本身读取,而不是从文本链中读取,文本链实际上是末尾的一个大堆table。您还可以获得显着 space 节省 table 大小的好处(取决于数据大小),这会减少 IO,从而有助于提高性能。