压缩用户指南 SAP Adaptive Server Enterprise 16.0 SP02 1.0 – 2015/9/3 文档版本:


Add to my manuals
30 Pages

advertisement

压缩用户指南 SAP Adaptive Server Enterprise 16.0 SP02 1.0 – 2015/9/3 文档版本: | Manualzz

SAP Adaptive Server Enterprise 16.0 SP02

文档版本:

1.0 – 2015/9/3

压缩用户指南

PUBLIC

内容

1

1.1

1.2

1.3

1.4

数据压缩概述

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3

启用数据压缩

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3

将数据选入压缩表中

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4

管理压缩数据库

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5

会话级数据压缩

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5

复制、转储和装载压缩数据

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5

数据库压缩的限制

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

6

2

2.1

数据压缩的级别

行级压缩

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

7

7

2.2

页级压缩

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

8

3

3.1

为数据压缩创建数据库

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

9

改变数据库的压缩级别

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

9

4

4.1

创建压缩表

禁用压缩

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

11

12

4.2

改变表或分区的压缩级别

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

13

5

索引压缩

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

15

5.1

5.2

启用索引压缩

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

创建按索引压缩的表

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

16

16

5.3

创建压缩索引

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

17

5.4

更改索引压缩状态

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

17

6

7

可供压缩的数据类型

压缩数据存储策略

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

18

22

8

8.1

含有大对象的压缩列

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

25

创建具有

LOB 数据类型的压缩数据库. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

26

8.2

创建具有

LOB 数据类型的压缩表. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

26

8.3

改变具有压缩

LOB 数据类型的表. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

27

2

P U B L I C

© 2016 SAP 股份公司或其关联公司版权所有, 保留所有权利。

压缩用户指南

内容

1

数据压缩概述

数据压缩能让您使用更少的存储空间存储等量数据,减少高速缓存内存耗用量,降低

I/O 需要而提高性能。

可以压缩大对象

(LOB) 和常规数据。

注意

常规数据和

LOB 数据使用不同的压缩语法和选项。在本文档中,“数据压缩”一词是指非 LOB 列数据的压缩,而

“LOB 压缩”是指 LOB 列的压缩。

SAP Adaptive Server Enterprise (SAP ASE) 为常规数据和

LOB 数据提供不同级别的压缩。当您解压缩数据

时,压缩率越高,使用的

CPU 通常就越多。可根据数据访问方式选择压缩级别。经常访问的数据(“热数据”)可能

最适合

CPU 开销较小的压缩级别。

创建压缩表或分区后,会压缩所有后来插入或更新的数据。如果无法有效地压缩插入的数据,将保留原始行。

如果新插入或更新的

LOB 数据所占空间小于或等于单个数据页,便不会压缩该数据。

表中可以包含压缩数据,也可以包含未压缩数据。例如,如果您创建一个压缩表,装载数据,然后对该表禁用

数据压缩,则以前插入的数据会被压缩,而在禁用压缩后添加的行不会被压缩。

除系统目录和工作表外,可为任何其它表或索引(包括临时表)指定索引压缩。在索引级别指定压缩将优先于

在表级别指定的索引压缩。本地索引分区级别指定优先于索引级别指定。

无需解压缩数据即可对其进行查询。可以插入、更新和删除压缩数据,对压缩列运行

select 或 readtext 语

句会返回解压缩的行。由于需要搜索的数据较少,因此

I/O 较低,从而提升了数据存储效率。

1.1

启用数据压缩

要压缩数据,您必须获取当前

ASE_COMPRESSION 许可证,然后设置系统范围的配置参数 enable compression。

过程

1. 从

SAP Service Marketplace (SMP) 获取 ASE_COMPRESSION 许可证。请参见《SySAM 用户指南》或联系

SAP ASE 代表。

2. 使用以下命令启用数据压缩: sp_configure 'enable compression', 1

压缩用户指南

数据压缩概述

P U B L I C

© 2016 SAP 股份公司或其关联公司版权所有, 保留所有权利。

3

结果

请参见《系统管理指南:卷

1>“设置配置参数”。

1.2

将数据选入压缩表中

使用

select into ... compression 直接将常规和 LOB 数据选入压缩表中。

目标表不会从原始表中继承任何内容。也就是说,如果您从中选择数据的表采用页级压缩,则将数据选入其中

的表可以采用行级压缩,或者不压缩。

如果要将大对象数据选入表中,则必须指明压缩级别。

在目标表或列上的

select into 行为取决于要使用的压缩类型。

压缩类型

数据压缩

在目标表上的 into 行为 select

源表或列

数据表或列不会从源表中

继承任何属性。如果您不指定 compression

,非临时表

会继承 compression 的数

据库范围设置。临时表不会从

源表、源列或目标数据库属性

中继承任何压缩设置。

表可以是压缩的,也可以

是非压缩的,可以包括一个或

多个压缩列。 compressio n 的数据库范围设

置 none

目标表或列

目标表和所有

列都是非压缩的。 row 或 page

目标表是用 row 或 page 压缩

创建的,具体取决

于数据库范围的属

性。所有合格列都

会被压缩。

注意

索引压缩不

支持 row

缩。

LOB 压缩

目标表中的

LOB 列不会从

源列中继承任何属性。如果您

不指定 compression

,非

临时目标表中的

LOB 列会继

承 lob_compression 属

性的数据库范围设置。临时表

中的

LOB 不会从源表、源列

或目标数据库属性中继承任何

设置。

LOB 列是可以压缩的。 lob_compre ssion = 0

,针

对该数据库取消设

目标表中的所

LOB 列都是非压

缩的。 lob_compre ssion =

<compression_l evel>

目标表中的所

LOB 列都是使用 lob_compress ion =

<compression_l evel>

的数据库范

围设置创建的。

此示例选择

titles 表中的所有行,并创建一个新的、具有行级压缩的、名为 titles_2 的表: select * into titles2 with compression = row

4

P U B L I C

© 2016 SAP 股份公司或其关联公司版权所有, 保留所有权利。

压缩用户指南

数据压缩概述

from titles

请参见《参考手册:命令》。

1.3

管理压缩数据库

压缩数据库的管理责任包括启用和禁用会话压缩、批量复制,以及转储和装载压缩数据。

可以使用:

● compression info pool size 配置参数来检查压缩内存池。 capture compression statistics 来允许 monTableCompression 监控表开始捕获压缩统计信

息。

请参见《系统管理指南:卷

1》。

1.3.1 会话级数据压缩

使用

set 命令对会话启用和禁用压缩。

要对当前会话启用压缩,可使用: set compression {on | off | default}

此命令对非压缩表不起作用。当您对会话启用压缩时,会压缩所有后来插入表中的,具有适当数据类型的数

据。如果您关闭压缩,会在该会话期间内禁用压缩。当您将压缩设为

default 时,会使用您在创建该表时建立的

压缩配置。

不支持对

LOB 压缩使用会话级压缩。

存储过程或系统过程会继承会话的压缩设置。子过程会继承在父过程中执行的

set compression 命令设置。

当过程结束时,会恢复外层会话或父会话的压缩级别。

登录触发器中包括的

set compression 更改会应用到在您首次登录时建立的会话,直到您显式更改压缩级别

为止。无需在登录触发器中启用

set export_options,即可导出 set compression 更改。压缩级别导出到

会话后,它会应用到各个表中。但如果您在发出

set compression 之前在嵌套过程中发出 set export_options,set compression 便不会导出到紧邻父过程的上下文中。

请参见《参考手册:命令》。

1.3.2 复制、转储和装载压缩数据

使用

bcp 批量复制压缩数据(复制进和复制出)。

压缩表中的页可能是由行压缩、页压缩或非压缩行组合而成。甚至,标记为非压缩的表或分区可以包括由不同

压缩状态混合而成的数据。

压缩用户指南

数据压缩概述

P U B L I C

© 2016 SAP 股份公司或其关联公司版权所有, 保留所有权利。

5

● bcp out - 任何压缩行(包括含有文本数据的行)都会被解压缩并返回到客户端,采用本机或字符形式。 bcp in - 从客户端收到的非压缩数据会在插入期间被压缩。bcp in 选择适当的压缩模式,具体取决于要

在其中插入行的分区的压缩级别。

如果批量复制出数据(使用

bcp out),并随后 bcp in 到压缩表(或分区),则所有新装载的数据将会被压

缩,即使当提取的数据以非压缩的形式存储也是如此。

请参见《实用程序指南》

>

“实用程序命令参考”> bcp dump database 直接将压缩数据从磁盘转储到存档中。如果事务日志中包含压缩的 LOB 数据,可使用 load tran 恢复压缩的 LOB 数据(请参见《系统管理指南:卷 2>“制订备份和恢复计划”)。

1.4 数据库压缩的限制

数据库压缩包括有关复制压缩数据和内存数据库的限制。

通常,内存数据库的压缩受到限制。在磁盘上驻留的或宽松持久性内存数据库中装载和恢复压缩对象是允许

的。但是,通常会限制对目标内存数据库中的压缩对象的访问。对在目标数据库中或为压缩定义的表中禁用压

缩提供最低支持,因此,您可以还原到使用非压缩数据。

压缩的

LOB 列不支持复制。发出以下命令以指示在对包含作为复制型数据库的一部分的 LOB 数据的列进行

压缩前不复制某个列: sp_setrepcol <table_name> , <lob_column_name> , 'do_not_replicate'

请参见《

Replication Server 参考手册》。

6

P U B L I C

© 2016 SAP 股份公司或其关联公司版权所有, 保留所有权利。

压缩用户指南

数据压缩概述

2

数据压缩的级别

可以在行级和页级压缩数据。行级压缩会压缩表中的各个行。页级压缩通过只存储一次重复值或公共前缀来压缩数

据。

2.1

行级压缩

行级压缩会压缩表中的各个行。

行级压缩专用于固定长度的常规数据。对于大多数固定长度的列,数据不会完全占据行的保留空间。例如,一

个值为

2 的 32 位整数是用十六进制中的 0x10 表示的。SAP ASE 需要 1 个字节来表示该值,而用零来填充该行的

其它

3 个位。同样,如果一个 50 字节的固定长度字符列包括字符数据“a”,SAP ASE 就需要 1 个字节来表示该字符

数据,而用零填充该列。

某些固定长度的数据类型不被压缩,因为这样做没有任何益处。例如,

SAP ASE 仅使用

1 个字节来存储 tinyint,因此,对使用此数据类型的行进行压缩是徒劳无益的。

例如,如果创建此非压缩表: create table t1 (col1 char(1) not null,

col2 char(50) not null,

col3 tinyint not null,

col4 int not null,

col5 varchar(20)) lock datapages

将压缩级别更改为

row 后: alter table t1 set compression = row

SAP ASE 不会压缩 col1 和 col3,因为它们的长度为 1 个字节。SAP ASE 会压缩 col2 和 col4,并且用最少

的空间来存储每个列的有关解压缩的必需信息(如果需要)。

如果将这些值插入

t1: insert t1 values (

"a", "aaaaa", 1, 100, "NineBytes")

这些列的压缩版本由

17 个字节(几乎是非压缩列大小的三分之一)组成:

● 未压缩时,col2, char(50) 的值是“aaaaa”,而且该列的其余部分用 45 个空白填满。压缩后,col2 的值是

“aaaaa”,每个“a”使用一个字节。

● col4 的值是 100,用单个字节表示。

● 将会从 col5 的值中截断尾随空白,用 9 个字节存储该值。

压缩用户指南

数据压缩的级别

P U B L I C

© 2016 SAP 股份公司或其关联公司版权所有, 保留所有权利。

7

2.2 页级压缩

使用页级压缩来压缩页上的数据冗余量。

当您对常规数据指定页级压缩时,

SAP ASE 会先执行行级压缩,然后再执行页级压缩。

数据页通常会包括重复信息(例如,同样的日期、时间或部门

ID)。页级压缩不是将同样的值多次存储,而是

能让您将这些值存储在单个位置,并在数据页上使用一个符号来引用它们。

可使用多种页级压缩技术:

● 从可变长度字节的字符串中提取有代表性的信息并将其替换为更短的符号。

当您在数据页中插入新行时,会将列中的数据与页字典中的符号进行比较。如果在字典中找到新数据的匹配

项,它会存储字典符号,而不是数据,而且行会被压缩。当检索到数据时,符号会指示相应的数据。页字典可

以包括多个条目,每个条目都有一个不同的符号用来压缩不同的信息段。

● 从行中提取并删除使用固定长度列的短的、重复的值。

如果固定长度的列包括大量重复值,

SAP ASE 会将重复值存储在页索引中,并在行中使用状态位来指示该值存

储在页索引中并可供压缩。当您从行中检索数据时,状态位会指示

SAP ASE 在结果集中包括的值。

页索引可以针对页中的不同重复值包含多个条目。

例如,如果创建此表: create table order_line (

order_id int,

disp_id tinyint,

width_id smallint,

number tinyint,

info_id int,

supply smallint,

delivery datetime,

quantity smallint,

amount float,

dist_info char(24)) lock datapages

然后,插入此数据:

682, 1, 7, 11, 30000, 7, 'Dec 2 2008 1:19PM', 5, 290, 'Houston')

748, 1, 7, 12, 93193, 7, 'Sep 27 2009 1:15PM', 5, 9900, 'Bakersfield')

239, 1, 7, 13, 50383, 7, 'Aug 18 2008 11:47AM', 5, 8480, 'Modesto')

594, 1, 7, 14, 70901, 7, 'Aug 19 2008 10:37AM', 5, 84840, 'Houston')

849, 1, 7, 1, 3459, 7, 'July 10 2010 3:15PM', 5, 940, 'Alberta')

994, 1, 7, 2, 1232, 7, 'Jan 3 2010 2:15PM', 5, 848, 'Sonoma')

219, 1, 7, 3, 55341, 7, 'Feb 12 2008 9:26AM', 5, 4884, 'Vallejo')

004, 1, 7, 4, 98313, 7, 'Jan 19 2007 2:05PM', 5, 4484, 'Houston')

229, 1, 7, 5, 1347, 7, 'Aug 8 2009 3:37PM', 5, 448, 'Bakersfield')

394, 1, 7, 6, 51276, 7, 'Nov 10 2009 1:38PM', 5, 4473, 'Napa')

119, 1, 7, 1, 18089, 7, 'Oct 29 2009 12:56PM', 5, 312, 'Los Angeles')

938, 1, 7, 2, 38396, 7, 'June 1 2009 3:46PM', 5, 2248, 'Houston')

● disp_id、width_id、supply 和 quantity 列均包含重复值(1、7、7 和 5),并且都是短的固定长度

列,等待进行页索引压缩。

对于

char 和 varchar 列,经常使用的字符用占用更少存储的表示法编码。

如果压缩后的行长度超过原始行长度,则会使用原始行,而不是压缩后的行。

SAP ASE 会分析数据并自动选择适当的页级压缩方法。

在配置了页级压缩的表上不会自动发生压缩,除非您插入了一个会导致该页变满的行。

8

P U B L I C

© 2016 SAP 股份公司或其关联公司版权所有, 保留所有权利。

压缩用户指南

数据压缩的级别

3

为数据压缩创建数据库

压缩数据库可以包括压缩的和非压缩的表或分区。

过程

要创建具有数据压缩的数据库时,请使用: create database <database_name>

[…] with dml_logging = { minimal | full }

, durability =

{ no_recovery | at_shutdown | full }

, compression = {none | row | page} compression = 参数指示数据库中的所有表都继承指定级别的压缩,除非您另外显式声明。请参见《参考手

册:命令》。

注意 model 数据库的缺省压缩设置为 none。

示例

此示例在

emaildb_dev 设备上创建具有行级压缩的 emaildb 数据库: create database emaildb on emaildb_dev = '50M' with compression = row

3.1

改变数据库的压缩级别

更改数据库的压缩级别不会更改数据库中现有表的压缩级别,只有在改变数据库后创建的表才会继承新的压缩级

别。

过程

使用以下命令改变现有数据库的压缩级别: alter database <database_name>

压缩用户指南

为数据压缩创建数据库

P U B L I C

© 2016 SAP 股份公司或其关联公司版权所有, 保留所有权利。

9

[…] set

[[,] compression = {none | row | page}]

请参见《参考手册:命令》。

示例

要将

pubs2 数据库改变为使用页级压缩,请使用: alter database pubs2 set compression = page

10

P U B L I C

© 2016 SAP 股份公司或其关联公司版权所有, 保留所有权利。

压缩用户指南

为数据压缩创建数据库

4 创建压缩表

可以压缩除系统表和工作表以外的所有表。

上下文

使用

create table 来创建压缩表、分区或为表指定索引压缩。无需压缩表中的所有列。在设计表时,选择能

提供最大压缩益处的列。分区和表可以使用行级和页级压缩。未指定压缩级别的分区继承表级压缩。

在索引级别指定压缩将优先于在表级别指定的索引压缩。本地索引分区级别指定优先于索引级别指定。

过程

压缩的部分语法为: create table [ <database> .[ <owner> ].] <table_name>

( <column_name> datatype ...

[not compressed ],

[, next_column...])

[with {max_rows_per_page = num_rows,

...

compression [= {none | page | row }]

index_compression [={none | page} ]

[on <segment_name> ]

[partition clause]

<partition_clause> ::= partition by <partition_type> [( <column_name> [, <column_name> ]...)]

([ <partition_name> ] ...

[with compression = {none | page | row }] [on <segment_name> ],

[, <next_partition> ...]) create table. . . with compression 参数覆盖数据库范围的设置。也就是说,如果您创建具有行级压

缩的数据库,然后发出一个指示页级压缩的

create table 命令,便会使用页级压缩创建表。

示例

要压缩

sales 表中的所有列,请使用: create table sales

(store_id int not null,

order_num int not null,

date datetime not null) with compression = row

要仅压缩

order_num 列,请将其它列指定为 not compressed: create table sales

( store_id int not null not compressed,

压缩用户指南

创建压缩表

P U B L I C

© 2016 SAP 股份公司或其关联公司版权所有, 保留所有权利。

11

order_num int not null,

date datetime not null not compressed) with compression = row

要对

Y2008 分区使用页级压缩,对 Y2009 分区使用行级压缩,请输入: create table sales_date

(store_id int not null,

order_num int not null,

date datetime not null) partition by range (date)

(Y2008 values <= ('12/31/2008') with compression = page on seg1,

Y2009 values <= ('12/31/2009') with compression = row on seg2,

Y2010 values <= ('12/31/2010') on seg3)

使用

sp_help 查看表的压缩级别。这是 mail 表的 sp_help 压缩信息:

Name Owner Object_type Object_status

Create_date

---- ----- ----------- ----------------------------------------------

-------------------

mail dbo user table row level compressed, contains compressed data

Apr 8 2011 2:55PM

4.1 禁用压缩

将压缩级别设为

none 可从表或分区中删除数据压缩。

过程

使用以下命令禁用压缩: alter table <table_name> set compression = none

注意

如果修改数据库的压缩级别,或者在表级或分区级启用和禁用压缩,不会影响现有数据,而仅会影响在更改

后添加或更新的数据。但是,更改是否压缩列会执行数据复制,因此会影响现有数据。

请参见《参考手册:命令》。

示例

要将

sales 表的压缩设为 none,请使用: alter table sales set compression = none

12

P U B L I C

© 2016 SAP 股份公司或其关联公司版权所有, 保留所有权利。

压缩用户指南

创建压缩表

要对

order_num 列禁止压缩,请使用: alter table sales modify order_num int not compressed

要从

Y2008 和 Y2009 分区中删除压缩,请使用: alter table sales_date modify partition Y2008, Y2009 set compression = none

4.2 改变表或分区的压缩级别 alter table 不会影响现有数据的压缩级别,但会影响后续 DML 操作生成的新数据行或更改数据行的压缩级

别。

上下文

alter table 使您能够:

● 在未压缩的表或分区上启用压缩,在已压缩的表或分区上禁用压缩。

● 更改压缩表的压缩类型(row 或 page)。

● 改变压缩表中的列以允许或禁止压缩。

注意

必须先为表设置压缩级别,然后才能修改列以进行压缩。

过程

使用以下命令改变现有表或分区的压缩级别: alter table <table_name>

{ modify column [not] compressed

},

{ modify partition <partition_name> , [ <partition_name> . . .] set compression = {default | none | row | page}

},

{set compression = {none | page | row}}

请参见《参考手册:命令》。

压缩用户指南

创建压缩表

P U B L I C

© 2016 SAP 股份公司或其关联公司版权所有, 保留所有权利。

13

示例

此示例改变

sales_data 表以进行压缩: alter table sales_data set compression = row

此示例修改

isbn 列以进行压缩: alter table sales_data modify isbn compressed

14

P U B L I C

© 2016 SAP 股份公司或其关联公司版权所有, 保留所有权利。

压缩用户指南

创建压缩表

5

索引压缩

利用关系数据库中的索引压缩,能够更有效地存储数据,减少内存耗用量,同时由于

I/O 需求降低而使性能得到提

高。

索引压缩支持:

索引叶页压缩

DOL 和

APL 索引叶页格式

表、索引和本地索引分区级别的压缩

索引压缩由以下方面支持:

● reorg rebuild

DML

触发器

对于索引定义为压缩索引的表,批量复制到该表中的数据将会自动进行压缩。 dbcc checktable 和 dbcc checkstorage 都能够检查索引的完整性

如果数据库包含具有压缩索引的表,则允许使用

dump database、dump transaction 和 load transaction。但不允许使用 XPDL。

可在服务器级别或会话级别使用

sp_configure 和 set compression 启用或禁用索引压缩。

要在表、索引或本地索引分区级别指定索引压缩,请使用以下命令: create table alter table create index alter index select into

除系统目录和工作表外,可为任何其它表或索引(包括临时表)指定索引压缩。

在索引级别指定压缩将优先于在表级别指定的索引压缩。本地索引分区级别指定优先于索引级别指定。

对于复制索引来说,即使在创建表期间为所有索引指定了压缩,仍将它们创建为未压缩索引。

不支持按索引压缩的表上的

APL 聚簇索引。

只有一列的唯一索引不进行压缩。

压缩用户指南

索引压缩

P U B L I C

© 2016 SAP 股份公司或其关联公司版权所有, 保留所有权利。

15

5.1

启用索引压缩

在服务器级别或数据库级别启用索引压缩。

在服务器级别启用索引压缩

要对服务器上所有数据库中的所有索引启用压缩,请在服务器级别设置索引压缩。

语法是: sp_configure "enable compression", 0 | 1

缺省值是

0。

如果未启用索引压缩,则当试图创建按索引压缩的表或创建索引时将引发错误。

在会话级别启用索引压缩

要对某个会话所有数据库中的所有索引启用压缩,请在数据库级别设置索引压缩。

语法是: set {compression

[= {default | ON | OFF} ]

|index_compression

[= {default | ON | OFF} ] }

缺省值为

off。此命令仅影响在执行此命令后针对压缩索引生成的叶行。

● set index_compression 设置为 off 后,新插入到压缩索引中的所有行都不是按索引压缩的行。

● set index_compression 设置为 on 后,新插入到压缩索引中的所有行都是按索引压缩的行。

5.2 创建按索引压缩的表

要为表指定索引压缩,请使用

create table 或 select into 命令。 create table with index_compression 命令提供以下压缩选项:

● NONE - 不压缩指定表的索引。压缩专门使用 index_compression = PAGE 创建的索引。

● PAGE - 压缩指定表的所有索引。不压缩专门使用 index_compression = NONE 创建的索引。

如果未在表

DDL 中的任何位置指定压缩,则不压缩表索引。

选择一个现有表,然后使用

select into 创建按索引压缩的表。with index_compression 子句的语法与 create table 命令的语法相同。

16

P U B L I C

© 2016 SAP 股份公司或其关联公司版权所有, 保留所有权利。

压缩用户指南

索引压缩

有关语法,请参见《参考手册:命令》。

5.3 创建压缩索引

要为索引或本地索引分区级别指定索引压缩,请使用

index_compression 子句。

仅压缩叶页。压缩和未压缩索引行可共同存在于单个索引叶页上。如果未在表或索引

DDL 中的任何位置指定压

缩,则不压缩索引。索引压缩不支持

APL 聚簇索引。只有一列的唯一索引不进行压缩。

在索引级别指定压缩将优先于在表级别指定的索引压缩。本地索引分区级别指定优先于索引级别指定。 create index with index_compression 命令提供以下压缩选项:

● NONE - 不压缩指定索引的索引页。压缩专门使用 index_compression = PAGE 创建的本地索引分区。

● PAGE - 当该页已满时,使用页前缀压缩来压缩现有索引行。当添加一行时,系统将执行检查以确定该行是否适

合压缩。

有关语法,请参见《参考手册:命令》。

5.4 更改索引压缩状态

要更改表的压缩状态以便将来进行索引插入或更新,请使用

alter table 或 alter index。

无论现有索引页是否进行了压缩,它们都不会受到影响。要更改表的压缩状态,必须具备该表的独占访问权

限。

更改本地索引分区的压缩状态仅影响分区中新插入或更新的索引行。

新建索引的缺省行为取决于表的压缩设置:

对于按索引压缩的表,新建索引的索引压缩设置为

on。

对于未按索引压缩的表,新建索引将保持不压缩状态。

● alter table 命令允许模式修改和属性修改的多种组合。其中有些命令仅需要目录更新,而其他命令则需要

数据移动和任何现有索引的重建。如果索引需要重建且索引压缩设置为

on,则在索引重建过程中将压缩索引

页。索引重建后,根据索引压缩状态,产生的索引将包括压缩或未压缩索引行。 set index_compression 子句用于指定对表、索引或本地索引分区启用或禁用索引压缩。如果将表修改为

按索引进行压缩,则将压缩新建索引。 modify partition <partition_name>

子句将按照后面的

set compression 子句的指定对要修改压缩状

态的本地索引分区进行命名。

● 缺省情况下,alter index 权限授予索引所有者,并且不能移交,除非移交给数据库所有者(数据库所有者

可以通过运行

setuser 命令来充当索引所有者)。系统管理员也可以改变用户索引。

● 要从索引中删除压缩,必须先删除索引,然后使用 set index_compression off 重新创建索引。

有关语法,请参见《参考手册:命令》。

压缩用户指南

索引压缩

P U B L I C

© 2016 SAP 股份公司或其关联公司版权所有, 保留所有权利。

17

6

可供压缩的数据类型

不是所有数据类型都符合数据压缩的条件。

符合压缩条件的精确数值整数数据类型

数据类型 bigint int smallint tinyint ubigint unsigned int unsigned smallint

8

4

2

2

1

长度(以字节为单位)

8

4

压缩类型

行和页字典

行和页字典

页索引

页索引

行和页字典

行和页字典

页索引

● 所有精确数值数据类型都会被压缩。

● 精确数值整数的特定于平台的大端和小端(最高和最低有效字节)存储位于指定数量的字节中。

符合压缩条件的精确数值小数数据类型

数据类型 长度(以字节为单位) numeric (

<precision>

,

<scale>

)

用户指定 decimal

(

<precision>

,

<scale>

)

压缩类型

行和页字典

● 所有精确数值小数数据类型都会被压缩。

● 精确数值小数的存储格式是一个字节流,存储 1 个字节用于精度,1 个字节用于标度,

<n>

个字节用于数据。

18

P U B L I C

© 2016 SAP 股份公司或其关联公司版权所有, 保留所有权利。

压缩用户指南

可供压缩的数据类型

符合压缩条件的近似数值数据类型

数据类型 float (

<precision>

) double precision real

长度(以字节为单位) 压缩?

4 个字节(如果精度

< 16)或

8 个字节(如果精度

≥ 16)

8

4

压缩类型

不适用

符合压缩条件的货币数据类型

数据类型 money smallmoney

长度(以字节为单位) 存储格式

8

两个

4 字节的值:一个是 signed int

,另一个是 unsigned int

4

一个有符号的

4 字节整数

压缩?

压缩类型

行和页字典

符合压缩条件的日期和时间数据类型

数据类型 bigdatetime bigtime date

长度(以字节为单

位)

8

存储格式

8

4

压缩?

表示为一个无符号的

64 位整

数。使用

1/1/0001 作为基准

日期, bigdatetime 保存

基准日期的午夜和某个时间点

之间的毫秒数。将小数秒数存

储成

6 个数位。

8 字节的无符号整数,保存自

午夜以来的毫秒数。将小数秒

数存储成

6 个数位。

存储自

1900 年 1 月 1 日向后

或向前的天数。

压缩用户指南

可供压缩的数据类型

压缩类型

行和页字典

P U B L I C

© 2016 SAP 股份公司或其关联公司版权所有, 保留所有权利。

19

数据类型 datetime smalldatetime time

长度(以字节为单

位)

8

存储格式

4

4

压缩?

两个

4 字节分量。第一个分量

存储自

1900 年 1 月 1 日向前

或向后的天数。第二个分量存

储自午夜以来的

1/300 秒

数。

两个

2 字节无符号 smallint

值。第一个存储

1900 年 1 月 1 日以来的天

数。第二个存储自午夜以来的

分钟数。

自午夜以来的毫秒数。 是

符合压缩条件的二进制数据类型

数据类型 binary (

<n>

)

长度(以字节为单

位)

用户指定

存储格式

字节流

20

P U B L I C

© 2016 SAP 股份公司或其关联公司版权所有, 保留所有权利。

压缩类型

页字典(日期部分)

和行压缩(时间部

分)

不适用

行页字典

符合压缩条件的字符数据类型

数据类型 长度(以字节为单位) char (

<n>

) unichar

(

<n>

)

用户指定 nchar (

<n>

) varchar (

<n>

) univarchar (

< n>

) nvarchar (

<n>

)

存储格式

单个或多个字节或字符流

(具体取决于字符类型)

压缩?

压缩类型

行、页字典(如果长度

4)。页索引(如果长度

< 4)。

页字典(如果长度

4)。页索引(如果长度

< 4)。

压缩? 压缩类型

是(长度

≥ 4)

行、页字典(如果长度

4)。页索引(如果长度

< 4)。

压缩用户指南

可供压缩的数据类型

数据类型 长度(以字节为单

位) varbinary (

<n>

)

用户指定

存储格式 压缩? 压缩类型

是(长度

≥ 4)

页字典(如果长度

4)。页索引(如果长度

< 4)。

符合压缩条件的其它数据类型

数据类型 bit timestamp xtype_token text pointer

长度(以字节为单

位)

存储格式 压缩?

8

字节流;二进制数据

用户指定

16 字节的二进制数据

字节流。

8 字节的

RID,8 字

节的第一个文本页的数据库时

间戳值。

压缩类型

不适用

不适用

不适用

不适用

压缩用户指南

可供压缩的数据类型

P U B L I C

© 2016 SAP 股份公司或其关联公司版权所有, 保留所有权利。

21

7

压缩数据存储策略

压缩表中的页可能是由行压缩、页压缩和非压缩数据组合而成。

例如,假设您创建了

sales_data 表: create table sales_data

(isbn bigint not null, au_id varchar(11)not null, total_sales int not null)

然后,插入此数据:

4750984443, '903-94-9344', 34733

2385837442, '346-94-5593', 50945

2388347442, '346-94-5593', 50945 sales_data 未被压缩:

但如果要将

sales_data 改为压缩,可使用: alter table sales_data set compression = row

然后,插入此数据:

4783023685, '887-49-9984', 45009

3894350422, '776-45-9045', 89667

3349580094, '884-59-9983', 84855

只有新数据被压缩:

22

P U B L I C

© 2016 SAP 股份公司或其关联公司版权所有, 保留所有权利。

压缩用户指南

压缩数据存储策略

但如果再次将

sales_data 改为非压缩,可使用: alter table sales_data set compression = none

然后,插入此数据:

6590345093, '439-49-9943', 485844

3458940330, '559-40-3999', 21003

4859390403, '884-30-0200', 790499

SAP ASE 不会压缩新数据,而是会将较旧的数据保留为压缩状态:

压缩用户指南

压缩数据存储策略

P U B L I C

© 2016 SAP 股份公司或其关联公司版权所有, 保留所有权利。

23

sp_help 报告某个表是否曾包含过压缩数据。这是 sales_data 的 sp_help 输出:

Name Owner Object_type Object_status Create_date

---------- ----- ----------- ------------------------ -------------------

sales_data dbo user table contains compressed data Apr 8 2011 4:36PM

24

P U B L I C

© 2016 SAP 股份公司或其关联公司版权所有, 保留所有权利。

压缩用户指南

压缩数据存储策略

8

含有大对象的压缩列

SAP ASE 允许您创建数据库并压缩使用 text、image、unitext、行内和 java 大对象 (LOB) 数据类型的列。

LOB 列最多可以包含

2,147,483,647(或 2 31

-1)字节的字符或二进制数据。LOB 值存储在文本页链上。仅压

缩文本页。

在以下条件下使用行内

LOB 压缩:

表经过隐式或显式行压缩或页压缩,而且

表中的任何行内大对象列都经过隐式或显式

LOB 压缩。

表经过隐式或显式行压缩或页压缩,而且表中的任何行内大对象列都经过隐式或显式

LOB 压缩。

SAP ASE 使用

FastLZ(含 LZO)和 ZLib(含 LZW.26)算法来压缩 LOB 数据。这两种算法都是基于字典的压

缩技术,也就是说,它们将数据页上的重复单词替换为指向索引中实际单词的状态位。不同之处在于:

● FastLZ – CPU 使用率和执行时间较低。

● ZLib – 压缩率较高。

当您选择压缩级别时,

SAP ASE 会自动确定要使用的算法。级别

1 – 9 使用 ZLib 技术,级别 100 和 101 使用

FastLZ 技术。

通常,压缩级别越高,

LOB 压缩得就越多。但压缩量取决于

LOB 的内容。压缩级别越高,进程就越占用

CPU,因此,

<compression_level>

9 提供最佳压缩率,但

CPU 使用率也最高。

可以将表级和列级压缩结合使用。

1:将表级和列级压缩结合使用

压缩级别 无列压缩 列 not compressed

列使用 <compression_level>

标度

非压缩 列级压缩 无表级压缩 非压缩 lob_compression = 0 非压缩 lob_compression 和

表级压缩相同

列级压缩

非压缩

非压缩

列级压缩

列级压缩

在压缩

LOB 列时会改变页布局。

压缩用户指南

含有大对象的压缩列

P U B L I C

© 2016 SAP 股份公司或其关联公司版权所有, 保留所有权利。

25

8.1 创建具有

LOB 数据类型的压缩数据库

数据库中的所有表都继承您为

LOB 列指定的压缩级别。

过程

1. 选择一个压缩级别以确定数据库的压缩策略:

选项

压缩级别

1 - 9,其中

9 提供最佳压缩率,但 CPU 使用率最高

100 或

101

描述

策略

压缩率更高(

ZLib 算法)

CPU 使用率和执行时间较低(FastLZ 算法)

2. 使用以下命令创建具有

LOB 数据类型的数据库 create database <database_name>

[…]

with dml_logging = { minimal | full }

, durability =

{ no_recovery | at_shutdown | full }

, lob_compression = off | <compression_level> lob_compression = 参数指示数据库中的所有表都继承 LOB 列的指定级别的压缩。

示例

此示例创建

email_lob_db,其配置了 101 LOB 压缩级: create database email_lob_db on email_lob_dev = '50M' with lob_compression = 101

8.2 创建具有

LOB 数据类型的压缩表

无需压缩表中的所有列。

过程

1. 选择一个压缩级别以确定表的压缩策略:

26

P U B L I C

© 2016 SAP 股份公司或其关联公司版权所有, 保留所有权利。

压缩用户指南

含有大对象的压缩列

选项

压缩级别

1 - 9,其中

9 提供最佳压缩率,但 CPU 使用率最高

100 或

101

描述

策略

压缩率更高(

ZLib 算法)

CPU 使用率和执行时间较低(FastLZ 算法)

2. 使用以下命令创建具有

LOB 压缩的表: create table <table_name> (

<column_name> <data_type>

[compressed = <compression_level> | not compressed]

...

)

[with lob_compression = <compression_level>

参数

compressed = 控制列级压缩,with lob_compression = 控制表级压缩。

示例

此示例创建一个包含

LOB 数据的压缩表: create table mail(user_name char(10), mailtxt text compressed = 5, photo image compressed = 1, reply_mail text compressed = 9, attachment image compressed = 100) lock datarows with lob_compression = 0

8.3 改变具有压缩

LOB 数据类型的表

使用

alter table 命令启用或禁用表的压缩。

过程

1. 选择一个压缩级别以确定表的压缩策略:

选项

压缩级别

1 - 9,其中

9 提供最佳压缩率,但 CPU 使用率最高

100 或

101

描述

策略

压缩率更高(

ZLib 算法)

CPU 使用率和执行时间较低(FastLZ 算法)

2. 使用以下命令改变

LOB 表的压缩级别: alter table <table_name> add <column_name> datatype ...

[compressed = <compression_level> | not compressed]

压缩用户指南

含有大对象的压缩列

P U B L I C

© 2016 SAP 股份公司或其关联公司版权所有, 保留所有权利。

27

| set

[, lob_compression = off | <compression_level> ]

| modify column_name ...

[compressed = <compression_level> | not compressed ]

示例

此示例将

titles 表的压缩级别改为行: alter table titles set compression = row

28

P U B L I C

© 2016 SAP 股份公司或其关联公司版权所有, 保留所有权利。

压缩用户指南

含有大对象的压缩列

重要免责声明和法律信息

编码示例

在本文档中包含的任何软件代码和

/或代码行/字符串(简称

“代码”)仅为示例,并非供在生产性系统环境中使用的。 代码的目的仅在于提供更好的解释和可视化特定编码的

语法和句法规则。

SAP 不担保本文档中所提供的代码的正确性和完整性,并且 SAP 对于由使用代码造成的错误或损害概不负责,除非损害是由 SAP 故意或重大过失造成

的。

辅助功能

SAP 文档中包含的信息代表

SAP 在文档发布之日对辅助功能标准的当前观点,完全不是针对如何确保软件产品的辅助功能方面的具有约束力的准则。 SAP 特别声明不承担

与本文档相关的任何责任。

但是,本免责声明不适用于

SAP 存在有意过错行为或重大过失的情况。 此外,本文档不会构成 SAP 方的任何直接或间接合同义务。

性别中立语言

SAP 文档尽可能做到性别中立。 依据上下文,或直接用

“您”称呼读者,或使用性别中立的名词(诸如:销售人员或工作日)。 但是,如果需要提及两种性别的成员,而又无

法避免使用第三人称单数形式或不存在性别中立的名词, SAP 保留使用名词和代词的阳性形式的权利。 这是为确保文档易于理解。

互联网超链接

SAP 文档中可能包含指向互联网的超链接。 这些超链接意在用做查找相关信息的指引。

SAP 不保证此相关信息的可得性和正确性或此信息符合特定需求的能力。 对于使用

相关信息造成的损害,

SAP 不应承担任何责任,除非损害是由于

SAP 的重大过失或有意过错行为造成的。 所有链接都已分类以提高透明度(请参阅: http:// help.sap.com/disclaimer

)。

压缩用户指南

重要免责声明和法律信息

P U B L I C

© 2016 SAP 股份公司或其关联公司版权所有, 保留所有权利。

29

go.sap.com/registration/ contact.html

© 2016 SAP 股份公司或其关联公司版权所有, 保留所有权利。

未经

SAP 股份公司或其关联公司明确许可,不得以任何形式或为任何

目的复制或传播本文的任何内容。

本文包含的信息如有更改,恕不另

行事先通知。

SAP 股份公司及其分销商营销的部分软件产品包含其他软件供应商

的专有软件组件。

各国的产品规格可能不同。

上述资料由

SAP 股份公司或其关联公司提供,仅供参考,不构成任何

形式的陈述或保证,其中如若存在任何错误或疏漏,

SAP 或其关联公

司概不负责。

SAP 或 SAP 关联公司产品和服务相关的保证仅限于该

等产品和服务随附的保证声明(若有)中明确提出之保证。

本文中的

任何信息均不构成额外保证。

SAP 和本文提及的其它

SAP 产品和服务及其各自标识均为 SAP 股份公

司(或

SAP 关联公司)在德国和其他国家的商标或注册商标。 提及的

所有其它产品和服务名称均为其各自公司的商标。

如欲了解更多商标信息和声明,请访问: http://www.sap.com/ corporate-en/legal/copyright/index.epx

advertisement

Was this manual useful for you? Yes No
Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

advertisement