Compression Users Guide SAP Adaptive Server Enterprise 16.0 SP01 PUBLIC

Compression Users Guide SAP Adaptive Server Enterprise 16.0 SP01 PUBLIC
PUBLIC
SAP Adaptive Server Enterprise 16.0 SP01
Document Version: 1.1 – 2015-12-11
Compression Users Guide
Content
1
Data Compression Overview. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3
1.1
Enabling Data Compression. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2
Selecting Data into Compressed Tables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3
Administering Compressed Databases. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Session-Level Data Compression. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Copy, Dump, and Load Compressed Data. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.4
Limits for Database Compression. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2
Levels of Data Compression. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.1
Row-Level Compression. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.2
Page-Level Compression. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3
Creating Databases for Data Compression. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.1
Altering the Compression Level of a Database. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
4
Creating a Compressed Table. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
4.1
Disabling Compression. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
4.2
Altering the Compression Level of a Table or Partition. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
5
Index Compression. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
5.1
Enabling Index Compression. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
5.2
Creating an Index Compressed Table. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
5.3
Creating a Compressed Index. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
5.4
Changing the Index Compression State. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
5.5
Creating or Altering Databases to Use Index Compression. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
6
Datatypes Available for Compression. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .23
7
Compressed Data Storage Strategies. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .27
8
Compressed Columns with Large Objects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
8.1
Creating a Compressed Database with LOB Datatypes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
8.2
Creating Compressed Tables with LOB Datatypes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
8.3
Altering Tables with Compressed LOB Datatypes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
9
Administering Compressed Databases. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .34
9.1
Session-Level Data Compression. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
9.2
Copy, Dump, and Load Compressed Data. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
10
Limits for Database Compression. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2
PUBLIC
© 2015 SAP SE or an SAP affiliate company. All rights reserved.
Compression Users Guide
Content
1
Data Compression Overview
Data compression lets you use less storage space for the same amount of data, reduce cache memory
consumption, and improve performance because of lower I/O demands.
You can compress large object (LOB) and regular data.
Note
Regular data and LOB data use separate compression syntax and options. In this documentation, the
phrase "data compression" indicates compression for data other than LOB columns, while "LOB
compression" indicates compression for LOB columns.
SAP®Adaptive Server® Enterprise (SAP® ASE) provides different levels of compression for regular and LOB
data. Generally, higher compression ratios use more CPU when you decompress the data. Select compression
levels based on how the data is accessed. Data that you access frequently ("hot data") may be best suited for
compression levels that have smaller CPU overhead.
After you create a compressed table or partition, any subsequently inserted or updated data is compressed. If
the inserted data cannot efficiently compressed, the original row is retained. If newly inserted or updated LOB
data occupies space that is smaller than or equal to a single data page, then this data is not compressed.
Tables can be a mixture of compressed and uncompressed data. For example, if you create a compressed
table, load data, then disable data compression for the table, previously inserted data is compressed, but rows
added after you disable compression are not compressed.
Any table or index, including temporary tables, may be designated for index compression, except of system
catalogs and worktables. Specifying compression at the index level overrides index compression specified at
the table level. Local index partition level specification overrides the index-level specification.
You need not uncompress data to run queries against it. You can insert, update, and delete compressed data;
running select or readtext statements on the compressed column returns decompressed rows. Because
there is less data to search, there are fewer I/Os, improving the efficiency of data storage.
1.1
Enabling Data Compression
To compress data, you must obtain a current ASE_COMPRESSION license, then set the system-wide
configuration parameter enable compression.
Procedure
1. Obtain an ASE_COMPRESSION license from SAP Service Marketplace (SMP). See the SySAM Users Guide
or your SAP ASE representative.
Compression Users Guide
Data Compression Overview
PUBLIC
© 2015 SAP SE or an SAP affiliate company. All rights reserved.
3
2. Enable data compression using:
sp_configure 'enable compression', 1
Results
See System Administration Guide: Volume 1 > Setting Configuration Parameters.
1.2
Selecting Data into Compressed Tables
Use select into ... compression to select regular and LOB data directly into a compressed table.
The destination table does not inherit anything from the original table. That is, if the table from which you are
selecting data is page-level compressed, the table into which you select the data can be row-level compressed,
or not compressed.
You must indicate compression levels if you are selecting large object data into a table.
The behavior of select into on target tables or columns depends on the type of compression you are using.
Compression
Type
Behavior of select into
Source Table or Column
on Target Tables
Database-wide
Setting for
Target Table or
Column
compression
Data compression
Target table or columns do
not inherit any properties
from the source table. If you
do not specify
compression, tables
Table can be compressed or
uncompressed, and may in­
clude one or more com­
pressed columns.
none
Target table and
all columns are
uncompressed.
row or page
Target table is cre­
ated with either
row or page
other than temporary tables
inherit the database-wide
setting for compression.
Temporary tables do not in­
herit any compression set­
tings from the source table,
source column, or from the
target databases’s attrib­
utes.
compression, ac­
cording to data­
base-wide attrib­
ute. All eligible col­
umns are com­
pressed.
Note
Index compres­
sion compres­
sion does not
support row
compression.
LOB compression
4
Source LOB columns may be lob_compress
LOB columns in the target
table do not inherit any prop­ compressed.
ion = 0, unset
erties from the source col­
for the database
umns. If you do not specify
PUBLIC
© 2015 SAP SE or an SAP affiliate company. All rights reserved.
All LOB columns in
the target table
are uncom­
pressed.
Compression Users Guide
Data Compression Overview
Compression
Type
Behavior of select into
Source Table or Column
on Target Tables
Database-wide
Setting for
Target Table or
Column
compression
compression, LOB col­
lob_compress
ion =
umns in target tables other
than temporary tables inherit
the database-wide setting
for the
lob_compression attrib­
<compression_l
evel>
All LOB columns in
the target table
are created using
the database-wide
setting for
lob_compress
ion =
ute. LOB columns in tempo­
rary tables inherit nothing
from the source table,
source column, or from the
target database's attributes.
<compression_l
evel>.
This example selects all rows from the titles table, and creates a new table named titles_2 with row-level
compression:
select * into titles2
with compression = row
from titles
See the Reference Manual: Commands.
1.3
Administering Compressed Databases
Administration duties for compressed databases include enabling or disabling session compression, bulkcopying, and dumping and loading compressed data.
Use the:
● compression info pool size configuration parameter to check the memory pool for compression.
● capture compression statistics to enable the monTableCompression monitoring table to begin
capturing compression statistics.
See the System Administration Guide: Volume 1.
1.3.1 Session-Level Data Compression
Enable and disable compression for a session with the set command.
To enable compression for the current session, use:
set compression {on | off | default}
This command has no effect on uncompressed tables. When you enable compression for a session, all
subsequent data inserted in the table that uses the appropriate datatype is compressed. If you set
Compression Users Guide
Data Compression Overview
PUBLIC
© 2015 SAP SE or an SAP affiliate company. All rights reserved.
5
compression off, compression for the duration of the session is disabled. When you set compression to
default, the compression configuration you established when you created the table is used.
Session-level compression for LOB compression is not supported.
Stored or system procedures inherit a session’s compression settings. Subprocedures inherit the set
compression command settings executed in the parent procedure. When the procedure ends, the
compression level of the outer session or parent procedure is restored.
set compression changes included with login triggers apply to the session established when you first log in
until you explicitly change the compression level. You need not enable set export_options in the login
trigger to export set compression changes. Once the compression level is exported to a session, it applies
to individual tables. However, set compression is not exported to the immediate parent procedure’s
context if you issue set export_options in a nested procedure before setting issuing set compression.
See Reference Manual: Commands.
1.3.2 Copy, Dump, and Load Compressed Data
Use bcp to bulk-copy compressed data in and out of tables.
Pages in a compressed table may have a combination of row-compressed, page-compressed, or
uncompressed rows. Even tables or partitions marked as uncompressed can include data that is a mixture of
different states of compression.
● bcp out – any compressed rows (including those with text data) are decompressed and returned to the
client, either in native or character form.
● bcp in – uncompressed data received from the client is compressed during the insert. bcp in selects
the appropriate compression scheme, which depends on the compression level of the partition into which
you are inserting the row.
When you bulk-copy data out (using bcp out), followed by a bcp in to a compressed table (or partition), all
newly loaded data is compressed, even when the extracted data was stored as uncompressed.
See Utility Guide > Utility Commands Reference > bcp
dump database dumps compressed data directly from disk to archive. If the transaction log contains
compressed LOB data, recover the compressed LOB data with load tran (see the System Administration
Guide: Volume 2 > Developing a Backup and Recovery Plan).
1.4
Limits for Database Compression
Database compression includes limitations on replicating compressed data and in-memory databases.
● Generally, compression is restricted for in-memory databases. Loading and recovering compressed
objects in disk-resident or relaxed-durability in-memory databases is permitted. However, access to
compressed objects in the target in-memory database is often restricted. Minimal support is provided for
disabling compression in the target database or in tables defined for compression, so you may revert to
using uncompressed data.
6
PUBLIC
© 2015 SAP SE or an SAP affiliate company. All rights reserved.
Compression Users Guide
Data Compression Overview
● Compressed LOB columns do not support replication. Issue the following to indicate that a column is not
to be replicated before you compress columns with LOB data that are part of a replicated database:
sp_setrepcol <table_name>, <lob_column_name>, 'do_not_replicate'
See the Replication Server Reference Manual.
Compression Users Guide
Data Compression Overview
PUBLIC
© 2015 SAP SE or an SAP affiliate company. All rights reserved.
7
2
Levels of Data Compression
You can compress data at the row level and the page level.
2.1
Row-Level Compression
Row-level compression compresses individual rows in a table.
Row-level compression is intended for fixed-length, regular data. For most fixed-length columns, data does not
completely occupy the space reserved for the row. For example, a 32-bit integer with a value of 2 is
represented by 0x10 in hexadecimal. SAP ASE requires 1 byte to represent this value, but fills the other 3 bits
of the row with zeros. Similarly, if a 50-byte fixed-length character column includes the character data “a”,
SAP ASE requires 1 byte for the character data, but completes the column with zeros.
Some fixed-length datatypes are not compressed because there is no benefit in doing so. For example, SAP
ASE uses only 1 byte to store a tinyint, so compressing a row using this datatype is not beneficial.
For example, if you create this uncompressed table:
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
After changing the compression level to row:
alter table t1
set compression = row
SAP ASE does not compress col1 and col3 because their length is 1 byte. SAP ASE compresses col2 and
col4 and stores required information about decompression for each column using the minimum space, if
required.
If you insert these values into t1:
insert t1 values (
"a", "aaaaa", 1, 100, "NineBytes")
The compressed version of the columns comprises 17 bytes, nearly one-third the size of the uncompressed
columns:
● When uncompressed, the value of col2, char(50) is “aaaaa” with 45 blanks to fill out the rest of the
column. After compression, the value of col2 is “aaaaa”, using one byte for each “a”.
● The value of col4 is 100, and is represented with a single byte.
● Trailing blanks are truncated from the value of col5; 9 bytes to store the value.
8
PUBLIC
© 2015 SAP SE or an SAP affiliate company. All rights reserved.
Compression Users Guide
Levels of Data Compression
2.2
Page-Level Compression
Use page-level compression to compress the amount of data redundancy on a page.
When you specify page-level compression for regular data, SAP ASE performs row-level compression first,
then page-level compression.
Data pages often include repeated information (for example, the same date, time, or department ID). Instead
of storing the same value multiple times, page-level compression lets you store these values in a single place
and use a symbol on the data page to refer to them.
A number of techniques for page-level compression are used:
● Extracting repetitive information from variable-length byte strings and replacing them with shorter
symbols.
When you insert a new row into a data page, the data in the columns is compared with the symbols in the
page dictionary. If a match is found in the dictionary for the new data, the dictionary symbol is stored
instead of the data, and the row is compressed. When the data is retrieved, the symbol indicates the
appropriate data. A page dictionary can include multiple entries, each with a different symbol that
compresses a different piece of information.
● Extracting and removing short, duplicate values that use fixed-length columns from the rows.
If a fixed-length column includes a high number of duplicates, SAP ASE stores the duplicate value in the
page index, and uses a status bit in the row to indicate that this value is stored in the page index and is
available for compression. When you retrieve data from the row, the status bit indicates the value that SAP
ASE includes in the result set.
A page index may contain multiple entries for different duplicate values in the page.
For example, if you create this table:
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
And insert this data:
682,
748,
239,
594,
849,
994,
219,
004,
229,
394,
119,
938,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
11, 30000, 7, 'Dec 2 2008 1:19PM', 5, 290, 'Houston')
12, 93193, 7, 'Sep 27 2009 1:15PM', 5, 9900, 'Bakersfield')
13, 50383, 7, 'Aug 18 2008 11:47AM', 5, 8480, 'Modesto')
14, 70901, 7, 'Aug 19 2008 10:37AM', 5, 84840, 'Houston')
1, 3459, 7, 'July 10 2010 3:15PM', 5, 940, 'Alberta')
2, 1232, 7, 'Jan 3 2010 2:15PM', 5, 848, 'Sonoma')
3, 55341, 7, 'Feb 12 2008 9:26AM', 5, 4884, 'Vallejo')
4, 98313, 7, 'Jan 19 2007 2:05PM', 5, 4484, 'Houston')
5, 1347, 7, 'Aug 8 2009 3:37PM', 5, 448, 'Bakersfield')
6, 51276, 7, 'Nov 10 2009 1:38PM', 5, 4473, 'Napa')
1, 18089, 7, 'Oct 29 2009 12:56PM', 5, 312, 'Los Angeles')
2, 38396, 7, 'June 1 2009 3:46PM', 5, 2248, 'Houston')
The disp_id, width_id, supply, and quantity columns all contain duplicate values (1, 7, 7, and 5), that
are all short fixed-length columns, and candidates for page index compression.
Compression Users Guide
Levels of Data Compression
PUBLIC
© 2015 SAP SE or an SAP affiliate company. All rights reserved.
9
● For char and varchar columns, frequently used characters are encoded with a representation that takes
less storage.
If the row length after compression exceeds the original row length, the original row is used instead of the
compressed row.
SAP ASE analyzes the data and automatically selects the appropriate method of page-level compression.
Compression does not automatically occur on a table configured for page-level compression until you insert a
row that causes the page to become full.
10
PUBLIC
© 2015 SAP SE or an SAP affiliate company. All rights reserved.
Compression Users Guide
Levels of Data Compression
3
Creating Databases for Data
Compression
Compressed databases can include compressed and uncompressed tables or partitions.
Context
Note
The default setting for compression in the model database is none, so unless you specify otherwise,
compression is off when you create a database.
Procedure
To create databases with data compression, use:
create database <database_name>
[…]
with dml_logging = { minimal | full }
, durability =
{ no_recovery | at_shutdown | full }
, compression = {none | row | page}
Results
The compression = parameter indicates that all tables in the database inherit the specified level of
compression, unless you explicitly state otherwise. See the Reference Manual: Commands.
Example
This example creates the emaildb database with row-level compression on the emaildb_dev device:
create database emaildb
on emaildb_dev = '50M'
with compression = row
Compression Users Guide
Creating Databases for Data Compression
PUBLIC
© 2015 SAP SE or an SAP affiliate company. All rights reserved.
11
3.1
Altering the Compression Level of a Database
Changing a database's compression level does not change the compression level of existing tables in the
database; only tables you create after you alter the database inherit the new compression level.
Procedure
Alter the compression level of existing databases using:
Results
alter database <database_name>
[…]
set
[[,] compression = {none | row | page}]
See the Reference Manual: Commands.
Example
To alter the pubs2 database to use page-level compression, use:
alter database pubs2
set compression = page
12
PUBLIC
© 2015 SAP SE or an SAP affiliate company. All rights reserved.
Compression Users Guide
Creating Databases for Data Compression
4
Creating a Compressed Table
You can compress all tables except system and worktables.
Context
Use create table to create a compressed table, partition, or to designate index compression for a table.
You need not compress all columns in a table. When designing your table, select the columns that offer the
greatest benefit from compression. Partitions, and tables can use row- and page-level compression. Partitions
for which you do not specify the compression level inherit the table-level compression.
Specifying compression at the index level overrides index compression specified at the table level. Local index
partition level specification overrides the index-level specification.
Procedure
The partial syntax for compression is:
Results
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>...])
The create table. . . with compression parameter overrides the database-wide setting. That is, if
you create a database with row-level compression, then issue a create table command that indicates pagelevel compression, the table is created using page-level compression.
Compression Users Guide
Creating a Compressed Table
PUBLIC
© 2015 SAP SE or an SAP affiliate company. All rights reserved.
13
Example
To compress all columns in the sales table, use:
create table sales
(store_id int not null,
order_num int not null,
date datetime not null)
with compression = row
To compress only the order_num column, specify the other columns as not compressed:
create table sales
( store_id int not null not compressed,
order_num int not null,
date datetime not null not compressed)
with compression = row
To use page-level compression on the Y2008 partition and row-level compression on the Y2009 partition,
enter:
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)
Use sp_help to view a table's compression level. This is the sp_help compression information for the
mail table:
Name
---mail
14
Owner
Object_type
Create_date
--------------------------------dbo
user table
Apr 8 2011 2:55PM
Object_status
---------------------------------------------row level compressed, contains compressed data
PUBLIC
© 2015 SAP SE or an SAP affiliate company. All rights reserved.
Compression Users Guide
Creating a Compressed Table
4.1
Disabling Compression
Set the compression level to none to remove data compression from a table or partition.
Context
Note
Modifying a database's compression level, or enabling and disabling compression at table or partition level
does not affect existing data; it affects only data you add or update after the change. However, changing
whether a column is compressed or not performs a data copy, and therefore effects existing data.
Procedure
Disable compression using :
Results
alter table <table_name>
set compression = none
See the Reference Manual: Commands.
Example
To set the compression to none for the sales table, use:
alter table sales
set compression = none
To disallow compression for the order_num column:
alter table sales
modify order_num int not compressed
To remove compression from the Y2008 and Y2009 partitions:
alter table sales_date
modify partition Y2008, Y2009 set compression = none
Compression Users Guide
Creating a Compressed Table
PUBLIC
© 2015 SAP SE or an SAP affiliate company. All rights reserved.
15
4.2
Altering the Compression Level of a Table or Partition
alter table does not affect the compression level of existing data, but affects the compression level of new
or changed data rows produced by subsequent DML operations.
Context
alter table lets you:
● Enable compression on uncompressed tables or partitions, and disable compression on already
compressed tables or partitions.
● Change the compression type (row or page) for compressed tables.
● Alter a column in a compressed table to allow or disallow compression.
Note
You must set the compression level for a table before you can modify a column for compression.
Procedure
Alter the compression level of existing tables or partitions using:
Results
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}}
See the Reference Manual: Commands.
Example
This example alters the sales_data table for compression:
alter table sales_data
set compression = row
16
PUBLIC
© 2015 SAP SE or an SAP affiliate company. All rights reserved.
Compression Users Guide
Creating a Compressed Table
This example modifies the isbn column for compression:
alter table sales_data
modify isbn compressed
Compression Users Guide
Creating a Compressed Table
PUBLIC
© 2015 SAP SE or an SAP affiliate company. All rights reserved.
17
5
Index Compression
Index compression in a relational database allows more-efficient data storage, reduced memory consumption,
and improved performance due to lower I/O demands.
Index compression supports:
● Index leaf page compression
● Both DOL and APL index leaf page formats
● Compression at the table, index, and local index partition levels
Index compression is supported by:
● reorg rebuild
● DML
● triggers
● Data that has been bulk-copied into a table with indexes defined as compressed, is automatically
compressed.
● Both dbcc checktable and dbcc checkstorage check the integrity of indexes
● dump database, dump transaction, and load transaction are allowed if this database contains
tables with a compressed index. However, XPDL is not allowed if there are any tables with compressed
indexes.
You can enable or disable index compression at the server level, or at the session level, using sp_configure
and set compression.
To specify index compression at the table, index, or local index partition levels, use these commands:
● create table
● alter table
● create index
● alter index
● select into
Any table or index, including temporary tables, may be designated for index compression, except of system
catalogs and worktables.
Specifying compression at the index level overrides index compression specified at the table level. Local index
partition level specification overrides index-level specification.
Replication indexes are always created as uncompressed, even when compression is specified for all indexes
during table creation.
APL-clustered indexes on index-compressed tables are not supported.
Unique indexes with only one column are not compressed.
18
PUBLIC
© 2015 SAP SE or an SAP affiliate company. All rights reserved.
Compression Users Guide
Index Compression
5.1
Enabling Index Compression
Enable index compression at the server level or at the database level.
Enabling Index Compression at the Server Level
To enable compression on all indexes in all databases on a server, set index compression at the server level.
The syntax is:
sp_configure "enable compression", 0 | 1
The default value is 0.
If index compression is not enabled, an error is raised when you attempt to create an index compressed table
or index.
Enabling Index Compression at the Session Level
To enable compression for all indexes in all databases of a session, set index compression at the database
level.
The syntax is:
set {compression
[= {default | ON | OFF} ]
|index_compression
[= {default | ON | OFF} ] }
The default value is off. This command affects only leaf rows that are built for compressed indexes after the
command is executed.
● After set index_compression is set to off, all rows that are newly inserted into compressed index are
not index compressed.
● After set index_compression is set to on, all rows that are newly inserted into compressed index are
index compressed.
5.2
Creating an Index Compressed Table
To designate index compression for a table, use the create table or select into commands.
The create table with index_compression command provides these compression options:
● NONE – indexes on the specified table are not compressed. Indexes that are specifically created with
index_compression = PAGE are compressed.
Compression Users Guide
Index Compression
PUBLIC
© 2015 SAP SE or an SAP affiliate company. All rights reserved.
19
● PAGE – all indexes on the specified table are compressed. Indexes that are specifically created with
index_compression = NONE are not compressed.
If compression has not been specified anywhere in the table DDL, indexes for the table are not compressed.
Use select into to create an index compressed table by selecting an existing table. The syntax for the with
index_compression cause is the same as for the create table command.
For syntax, see the Reference Manual: Commands.
5.3
Creating a Compressed Index
To designate index compression for a index or local index partition level, use the index_compression
clause.
Only leaf pages are compressed. Compressed and uncompressed index rows may coexist on a single index
leaf page. If compression has not been specified anywhere in the table or index DDL, then the indexes are not
compressed. APL-clustered indexes are not supported by index compression. Unique indexes that have only
one column are not compressed.
Specifying compression at the index level overrides index compression specified at the table level. Local index
partition level specification overrides the index-level specification.
The create index with index_compression command provides these compression options:
● NONE – the index page for the specified index is not compressed. Local index partitions that are
specifically created with index_compression = PAGE are compressed.
● PAGE – when the page is full, existing index rows are compressed using the page prefix compression.
When a row is added, a check is performed to determine whether the row is suitable for compression.
For syntax, see the Reference Manual: Commands.
5.4
Changing the Index Compression State
To change the compression state of the table for future index inserts or updates, use alter table or alter
index.
Existing index pages are not affected, whether or not they are compressed. To change the compression state
of a table, you must have exclusive access to the table.
Changing the local index partition's compression state affects only index rows that are newly inserted or
updated in the partition.
The default behavior for newly created indexes depends on the table's compression setting:
● For index-compressed tables, index compression is set to "on" for newly created indexes.
● For index-uncompressed tables, newly created indexes remain uncompressed.
● The alter table command permits many combinations of schema modifications and property
modifications. Some of these commands require only a catalog update, whereas others need data
20
PUBLIC
© 2015 SAP SE or an SAP affiliate company. All rights reserved.
Compression Users Guide
Index Compression
movement, along with the rebuilding of any existing indexes. If indexes require rebuilding, and index
compression is set to on, index pages are compressed as part of the index rebuilding. After index
rebuilding, the resulting index contains compressed or uncompressed index rows according to the index
compression state.
The set index_compression clause specifies the index compression to be enabled or disabled on the
table, index, or local index partition. If table is modified to be index compressed, newly created indexes are
compressed.
The modify partition <partition_name> clause names local index partitions for which the
compression state is being modified as specified by the set compression clause that follows.
● The permissions for alter index command defaults to the index owner and cannot be transferred
except to the database owner, who can impersonate the index owner by running the setuser command.
A system administrator can also alter user indexes.
● To remove compression from indexes, the indexes must be dropped and then re-created with set
index_compression off.
For syntax, see the Reference Manual: Commands.
5.5
Creating or Altering Databases to Use Index
Compression
You can create or alter databases to use index compression.
Context
Use the create database...index_compression parameter to create databases that include
compressed indexes. Once created, all indexes in this database are compressed. The syntax is:
create database ...
with index_compression
= { none | page }
Use the alter database...set index_compression to enable or disable index compression on existing
databases. The syntax is:
alter database ...
set index_compression
= { none | page }
Enabling index compression on an existing database affects its future tables, but not existing tables. Indexes
inherit index compression state from a table, so indexes on tables created prior to issuing alter
database...set index_compression = page remain uncompressed. Indexes that were compressed
prior to issuing alter database...set index_compression = none remain compressed.
Compression Users Guide
Index Compression
PUBLIC
© 2015 SAP SE or an SAP affiliate company. All rights reserved.
21
Procedure
This creates a database pubs5, which uses compressed indexes:
create database pubs5 with index_compression = page
This alters the pubs5 database to not use compressed indexes:
alter database pubs set index_compression = none
22
PUBLIC
© 2015 SAP SE or an SAP affiliate company. All rights reserved.
Compression Users Guide
Index Compression
6
Datatypes Available for Compression
Not all datatypes are eligible for data compression.
Exact Numeric Integer Datatypes Eligible for Compression
Datatype
Length, in Bytes
Compression Type
bigint
8
Row and page dictionary
int
4
Row and page dictionary
smallint
2
Page index
tinyint
1
Page index
ubigint
8
Row and page dictionary
unsigned int
4
Row and page dictionary
unsigned smallint
2
Page index
● All exact numeric datatypes are compressed.
● Platform-specific big-endian and little-endian (most- and least-significant bytes) storage for exact
numeric integers is in the specified number of bytes.
Exact Numeric Decimal Datatypes Eligible for Compression
Datatype
Length, in Bytes
Compression Type
numeric (<precision>, <scale>)
User-specified
Row and page dictionary
decimal (<precision>, <scale>)
● All exact numeric decimal datatypes are compressed.
● Storage format for exact numeric decimals is a byte stream storing 1 byte for precision, 1 byte for scale,
and <n> number of bytes for data.
Compression Users Guide
Datatypes Available for Compression
PUBLIC
© 2015 SAP SE or an SAP affiliate company. All rights reserved.
23
Approximate Numeric Datatypes Eligible for Compression
Datatype
Length, in Bytes
Compressed?
Compression Type
float (<precision>)
4 bytes if precisions < 16, 8 if
No
N/A
≥ 16
double precision
8
real
4
Money Datatypes Eligible for Compression
Datatype
Length, in Bytes
Storage format
Compressed?
Compression
Type
8
money
Two 4-byte values: one
Yes
signed int and the other an
Row and page
dictionary
unsigned int
4
smallmoney
1 signed 4-byte integer
Date and Time Datatypes Eligible for Compression
Datatype
Length, in Bytes
Storage Format
Compressed?
Compression Type
bigdatetime
8
Represented as an unsigned
Yes
Row and page dic­
64-bit integer. Using a base
tionary
date of 1/1/0001,
bigdatetime holds the
number of microseconds be­
tween midnight of the base
date and a point in time.
Stores fractions of a second
to 6 decimal places.
bigtime
8
8-byte unsigned integer
holding the number of micro­
seconds since midnight.
Stores fractions of a second
to 6 decimal places.
24
PUBLIC
© 2015 SAP SE or an SAP affiliate company. All rights reserved.
Compression Users Guide
Datatypes Available for Compression
Datatype
Length, in Bytes
Storage Format
date
4
Stores the number of days,
Compressed?
Compression Type
Yes
Page dictionary (date
backward or forward, from
January 1, 1900.
datetime
8
Two 4-byte parts. First part
stores the number of days
portion) and row
forward or backward from
compressed (time
1/1/1900. Second part
portion)
stores the number of
1/300th seconds since mid­
night.
smalldatetime
4
Two 2-byte unsigned
No
N/A
Yes
Row page dictionary
smallint values. First
stores the number of days
since 1/1/1900. Second
stores the number of mi­
nutes since midnight.
time
4
The number of milliseconds
since midnight.
Character Datatypes Eligible for Compression
Datatype
Length, in Bytes
Storage Format
Compressed?
Compression Type
char(<n>)
User-specified
Single or multiple byte or
Yes
Row, page dictionary if
unichar(<n>)
character stream, de­
length ≥ 4. Page index, if
pending on the character
length < 4.
type
nchar(<n>)
varchar(<n>)
Yes
Page dictionary if length
≥ 4. Page index, if length
univarchar(<
< 4.
n>)
nvarchar(<n>)
Compression Users Guide
Datatypes Available for Compression
PUBLIC
© 2015 SAP SE or an SAP affiliate company. All rights reserved.
25
Binary Datatypes Eligible for Compression
Datatype
Length, in Bytes
Storage Format
Compressed?
Compression Type
binary(<n>)
User-specified
Byte stream
Yes (length ≥ 4)
Row, page dictionary if
length ≥ 4. Page index, if
length < 4.
varbinary(<n>)
User-specified
Yes (length ≥ 4)
Page dictionary if length
≥ 4. Page index, if length
< 4.
Other Datatypes Eligible for Compression
Datatype
Length, in Bytes
Storage Format
bit
timestamp
8
Byte stream; binary data
xtype_token
User-specified
text pointer
16 bytes of binary
Byte stream. 8 bytes of RID,
data
8 bytes of first text page's
Compressed?
Compression Type
No
N/A
No
N/A
No
N/A
No
N/A
database timestamp value.
26
PUBLIC
© 2015 SAP SE or an SAP affiliate company. All rights reserved.
Compression Users Guide
Datatypes Available for Compression
7
Compressed Data Storage Strategies
Pages in a compressed table may have a combination of row-compressed, page-compressed, and
uncompressed data.
For example, if you create the sales_data table:
create table sales_data
(isbn bigint not null,
au_id varchar(11)not null,
total_sales int not null)
And insert this data:
4750984443, '903-94-9344', 34733
2385837442, '346-94-5593', 50945
2388347442, '346-94-5593', 50945
sales_data is uncompressed:
However, if you alter sales_data for compression:
alter table sales_data
set compression = row
And insert this data:
4783023685, '887-49-9984', 45009
3894350422, '776-45-9045', 89667
3349580094, '884-59-9983', 84855
Compression Users Guide
Compressed Data Storage Strategies
PUBLIC
© 2015 SAP SE or an SAP affiliate company. All rights reserved.
27
Only the new data is compressed:
However, if you alter sales_data again to be uncompressed:
alter table sales_data set compression = none
And insert this data:
6590345093, '439-49-9943', 485844
3458940330, '559-40-3999', 21003
4859390403, '884-30-0200', 790499
28
PUBLIC
© 2015 SAP SE or an SAP affiliate company. All rights reserved.
Compression Users Guide
Compressed Data Storage Strategies
SAP ASE does not compress the new data, but retains the older data in a compressed state:
sp_help reports whether a table has ever contained compressed data. This is the sp_help output for
sales_data:
Name
Owner Object_type Object_status
Create_date
---------- ----- ----------- ------------------------ ------------------sales_data dbo
user table contains compressed data Apr 8 2011 4:36PM
Compression Users Guide
Compressed Data Storage Strategies
PUBLIC
© 2015 SAP SE or an SAP affiliate company. All rights reserved.
29
8
Compressed Columns with Large Objects
SAP ASE lets you create databases and compress columns that use the text, image, unitext, in-row, and
java large object (LOB) datatypes.
LOB columns can contain up to 2,147,483,647 (or 231 -1) bytes of character or binary data. LOB values are
stored on a text page chain. Only text pages are compressed.
In-row LOB compression is used if:
● The table is implicitly or explicitly row- or page-compressed, and,
● Any of the in-row large object columns in the table are implicitly or explicitly LOB compressed.
The table is implicitly or explicitly row- or page-compressed, and, Any of the in-row large object columns in the
table are implicitly or explicitly LOB compressed.
SAP ASE uses the FastLZ (with LZO) and ZLib (with LZW.26) algorithm to compress LOB data. Both are
dictionary-based compression techniques; that is, they replace repeated words on the data page with a status
bit that points to the actual word in an index. The differences are:
● FastLZ – lower CPU usage and execution time.
● ZLib – higher compression ratio.
SAP ASE automatically determines the algorithm to use when you select the compression level. Levels 1 – 9
use the ZLib technique, and levels 100 and 101 use the FastLZ technique.
Generally, the higher the compression level, the more the LOB is compressed. However, the amount of
compression depends on the content of the LOB. The higher the compression level, the more CPU-intensive
the process, so a <compression_level> of 9 provides the best compression ratio, but also the heaviest CPU
usage.
You can combine table-level and column-level compression.
Table 1: Combining Table- and Column-Level Compression
Compression Level
Column is not
Column uses
compressed
<compression_level> Scale
Uncompressed
Uncompressed
Column-level compression
lob_compression = 0
Uncompressed
Uncompressed
Column-level compression
lob_compression is
Column level compression
Uncompressed
Column-level compression
No table-level compres­
No Column Compression
sion
the same as the table-level
compression
The page layout is altered when LOB columns are compressed.
30
PUBLIC
© 2015 SAP SE or an SAP affiliate company. All rights reserved.
Compression Users Guide
Compressed Columns with Large Objects
8.1
Creating a Compressed Database with LOB Datatypes
All tables in a database inherit the compression level you specify for LOB columns.
Procedure
1. Select a compression level to determine the database's compression strategy:
Option
Description
Compression Level
Strategy
1 – 9, where 9 provides the best compression ratio but
heaviest CPU usage
Higher compression ratio (ZLib algorithm)
100 or 101
Lower CPU usage and execution time (FastLZ algorithm)
2. Create a database with LOB datatypes using:
create database <database_name>
[…]
with dml_logging = { minimal | full }
, durability =
{ no_recovery | at_shutdown | full }
, lob_compression = off | <compression_level>
Results
The lob_compression = parameter indicates that all tables in the database inherit the specified level of
compression for LOB columns.
Example
This creates the email_lob_db, which is configured for a LOB compression level of 101:
create database email_lob_db
on email_lob_dev = '50M'
with lob_compression = 101
Compression Users Guide
Compressed Columns with Large Objects
PUBLIC
© 2015 SAP SE or an SAP affiliate company. All rights reserved.
31
8.2
Creating Compressed Tables with LOB Datatypes
You need not compress all columns in a table.
Procedure
1. Select a compression level to determine the table's compression strategy:
Option
Description
Compression level
Strategy
1 – 9, where 9 provides the best compression ratio but
heaviest CPU usage
Higher compression ratio (ZLib algorithm)
100 or 101
Lower CPU usage and execution time (FastLZ algorithm)
2. Create a table with LOB compression using:
create table <table_name> (
<column_name> <data_type>
[compressed = <compression_level> | not compressed]
...
)
[with lob_compression = <compression_level>
The compressed = parameter controls column-level compression; with lob_compression = controls
table-level compression.
Example
This example creates a compressed table that includes LOB data:
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
32
PUBLIC
© 2015 SAP SE or an SAP affiliate company. All rights reserved.
Compression Users Guide
Compressed Columns with Large Objects
8.3
Altering Tables with Compressed LOB Datatypes
Use alter table command to enable or disable a table's compression.
Procedure
1. Select a compression level to determine the compression strategy for the table:
Option
Description
Compression Level
Strategy
1 – 9, where 9 provides the best compression ratio but
heaviest CPU usage
Higher compression ratio (ZLib algorithm)
100 or 101
Lower CPU usage and execution time (FastLZ algorithm)
2. Alter a LOB table's compression level using:
alter table <table_name>
add <column_name> datatype ...
[compressed = <compression_level> | not compressed]
| set
[, lob_compression = off | <compression_level> ]
| modify column_name ...
[compressed = <compression_level> | not compressed ]
Example
This alters the compression level of the titles table to row:
alter table titles set compression = row
Compression Users Guide
Compressed Columns with Large Objects
PUBLIC
© 2015 SAP SE or an SAP affiliate company. All rights reserved.
33
9
Administering Compressed Databases
Administration duties for compressed databases include enabling or disabling session compression, bulkcopying, and dumping and loading compressed data.
Use the:
● compression info pool size configuration parameter to check the memory pool for compression.
● capture compression statistics to enable the monTableCompression monitoring table to begin
capturing compression statistics.
See the System Administration Guide: Volume 1.
9.1
Session-Level Data Compression
Enable and disable compression for a session with the set command.
To enable compression for the current session, use:
set compression {on | off | default}
This command has no effect on uncompressed tables. When you enable compression for a session, all
subsequent data inserted in the table that uses the appropriate datatype is compressed. If you set
compression off, compression for the duration of the session is disabled. When you set compression to
default, the compression configuration you established when you created the table is used.
Session-level compression for LOB compression is not supported.
Stored or system procedures inherit a session’s compression settings. Subprocedures inherit the set
compression command settings executed in the parent procedure. When the procedure ends, the
compression level of the outer session or parent procedure is restored.
set compression changes included with login triggers apply to the session established when you first log in
until you explicitly change the compression level. You need not enable set export_options in the login
trigger to export set compression changes. Once the compression level is exported to a session, it applies
to individual tables. However, set compression is not exported to the immediate parent procedure’s
context if you issue set export_options in a nested procedure before setting issuing set compression.
See Reference Manual: Commands.
34
PUBLIC
© 2015 SAP SE or an SAP affiliate company. All rights reserved.
Compression Users Guide
Administering Compressed Databases
9.2
Copy, Dump, and Load Compressed Data
Use bcp to bulk-copy compressed data in and out of tables.
Pages in a compressed table may have a combination of row-compressed, page-compressed, or
uncompressed rows. Even tables or partitions marked as uncompressed can include data that is a mixture of
different states of compression.
● bcp out – any compressed rows (including those with text data) are decompressed and returned to the
client, either in native or character form.
● bcp in – uncompressed data received from the client is compressed during the insert. bcp in selects
the appropriate compression scheme, which depends on the compression level of the partition into which
you are inserting the row.
When you bulk-copy data out (using bcp out), followed by a bcp in to a compressed table (or partition), all
newly loaded data is compressed, even when the extracted data was stored as uncompressed.
See Utility Guide > Utility Commands Reference > bcp
dump database dumps compressed data directly from disk to archive. If the transaction log contains
compressed LOB data, recover the compressed LOB data with load tran (see the System Administration
Guide: Volume 2 > Developing a Backup and Recovery Plan).
Compression Users Guide
Administering Compressed Databases
PUBLIC
© 2015 SAP SE or an SAP affiliate company. All rights reserved.
35
10 Limits for Database Compression
Database compression includes limitations on replicating compressed data and in-memory databases.
● Generally, compression is restricted for in-memory databases. Loading and recovering compressed
objects in disk-resident or relaxed-durability in-memory databases is permitted. However, access to
compressed objects in the target in-memory database is often restricted. Minimal support is provided for
disabling compression in the target database or in tables defined for compression, so you may revert to
using uncompressed data.
● Compressed LOB columns do not support replication. Issue the following to indicate that a column is not
to be replicated before you compress columns with LOB data that are part of a replicated database:
sp_setrepcol <table_name>, <lob_column_name>, 'do_not_replicate'
See the Replication Server Reference Manual.
36
PUBLIC
© 2015 SAP SE or an SAP affiliate company. All rights reserved.
Compression Users Guide
Limits for Database Compression
Important Disclaimers and Legal Information
Coding Samples
Any software coding and/or code lines / strings ("Code") included in this documentation are only examples and are not intended to be used in a productive system
environment. The Code is only intended to better explain and visualize the syntax and phrasing rules of certain coding. SAP does not warrant the correctness and
completeness of the Code given herein, and SAP shall not be liable for errors or damages caused by the usage of the Code, unless damages were caused by SAP
intentionally or by SAP's gross negligence.
Accessibility
The information contained in the SAP documentation represents SAP's current view of accessibility criteria as of the date of publication; it is in no way intended to be
a binding guideline on how to ensure accessibility of software products. SAP in particular disclaims any liability in relation to this document. This disclaimer, however,
does not apply in cases of wilful misconduct or gross negligence of SAP. Furthermore, this document does not result in any direct or indirect contractual obligations of
SAP.
Gender-Neutral Language
As far as possible, SAP documentation is gender neutral. Depending on the context, the reader is addressed directly with "you", or a gender-neutral noun (such as
"sales person" or "working days") is used. If when referring to members of both sexes, however, the third-person singular cannot be avoided or a gender-neutral noun
does not exist, SAP reserves the right to use the masculine form of the noun and pronoun. This is to ensure that the documentation remains comprehensible.
Internet Hyperlinks
The SAP documentation may contain hyperlinks to the Internet. These hyperlinks are intended to serve as a hint about where to find related information. SAP does
not warrant the availability and correctness of this related information or the ability of this information to serve a particular purpose. SAP shall not be liable for any
damages caused by the use of related information unless damages have been caused by SAP's gross negligence or willful misconduct. All links are categorized for
transparency (see: http://help.sap.com/disclaimer).
Compression Users Guide
Important Disclaimers and Legal Information
PUBLIC
© 2015 SAP SE or an SAP affiliate company. All rights reserved.
37
www.sap.com/contactsap
© 2015 SAP SE or an SAP affiliate company. All rights reserved.
No part of this publication may be reproduced or transmitted in any
form or for any purpose without the express permission of SAP SE
or an SAP affiliate company. The information contained herein may
be changed without prior notice.
Some software products marketed by SAP SE and its distributors
contain proprietary software components of other software
vendors. National product specifications may vary.
These materials are provided by SAP SE or an SAP affiliate company
for informational purposes only, without representation or warranty
of any kind, and SAP or its affiliated companies shall not be liable for
errors or omissions with respect to the materials. The only
warranties for SAP or SAP affiliate company products and services
are those that are set forth in the express warranty statements
accompanying such products and services, if any. Nothing herein
should be construed as constituting an additional warranty.
SAP and other SAP products and services mentioned herein as well
as their respective logos are trademarks or registered trademarks
of SAP SE (or an SAP affiliate company) in Germany and other
countries. All other product and service names mentioned are the
trademarks of their respective companies.
Please see http://www.sap.com/corporate-en/legal/copyright/
index.epx for additional trademark information and notices.
Was this manual useful for you? yes no
Thank you for your participation!

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

Download PDF

advertising