ArcGIS Desktop

  • ArcGIS Pro
  • ArcMap

  • My Profile
  • 帮助
  • Sign Out
ArcGIS Desktop

ArcGIS Online

专为贵组织打造的制图平台

ArcGIS Desktop

全面的专业性 GIS

ArcGIS Enterprise

面向企业的 GIS

ArcGIS Developers

用于构建位置感知应用程序的工具

ArcGIS Solutions

适用于行业的免费模板地图和应用程序

ArcGIS Marketplace

获取适用于组织的应用程序和数据

  • 文档
  • 支持
Esri
  • 登录
user
  • 我的个人资料
  • 登出

ArcMap

  • 主页
  • 入门
  • 地图
  • 分析
  • 管理数据
  • 工具
  • 扩展模块

在 SQL Server 中为 Reviewer 工作空间使用数据压缩

获得 Production Mapping 许可后可用。

  • 行级压缩
  • Unicode 压缩
  • 页面级压缩
  • 估算压缩程度
  • 压缩和 TDE

利用表和索引的行与页面压缩,可以通过减少数据库大小来节省存储空间。数据压缩的缺点是会增加 CPU 使用率,因为必须对数据进行压缩并在访问时解压缩。不能将数据压缩用于系统表,而且只有企业版和开发版的 SQL Server 支持数据压缩。

可针对下列内容配置数据压缩:

  • 聚类表
  • 堆表(堆是指不含聚类索引的表)
  • 非聚类索引
  • 索引视图
  • 分区表或索引的各个分区

在使用 SQL Server 时,共有三种可用的数据压缩形式:行级压缩、Unicode 压缩和页面级压缩。

要了解有关堆的详细信息,请参阅 MSDN 库中的堆(不含聚类索引的表)。

行级压缩

行级压缩通过为长度固定的数据使用更为有效的存储格式来实现。

行级压缩使用下列策略节省空间:

  • 将长度固定的数字数据类型和 CHAR 数据类型视为长度可变的数据类型进行存储
  • 不存储 NULL 或 0 值
  • 减少存储数据时所需的元数据

虽然没有减少数据使用的空间量,但行级压缩不会带来页面级压缩的存储改善。行级压缩的优势在于它需要的 CPU 使用率比页面级压缩更少。可使用以下语法通过行级压缩来压缩表:

ALTER TABLE tableName REBUILD WITH (DATA_COMPRESSION=ROW)

例如,要通过行压缩来重新构建 REVDB 数据库 rev.TableA 表的所有分区,可使用以下查询:

USE [REVDB] ALTER TABLE [rev].[TableA] REBUILD PARTITION = ALL
WITH (DATA_COMPRESSION = ROW)

可使用以下语法通过行级压缩来配置索引:

ALTER INDEX indexName ON tableName REBUILD PARTITION ALL WITH (DATA_COMPRESSION=ROW)

要了解有关行级压缩的详细信息,请参阅 MSDN 库中的行压缩实现。

Unicode 压缩

利用 Unicode 压缩,数据库引擎可以压缩存储在页面或行压缩对象中的 unicode 值。可将 Unicode 压缩用于长度固定的 nchar(n) 和 nvarchar(n) 数据类型。在启用行和页面压缩后,会在适当时自动使用 Unicode 压缩。

要了解有关 Unicode 压缩的详细信息,请参阅 MSDN 库中的 Unicode 压缩实现。

页面级压缩

页面级压缩通过对重复值和通用前缀仅存储一次,然后在表中其他位置参考这些值的方法来压缩数据。当将页面压缩应用于表时,也将应用行压缩技术。页面级压缩使用以下策略:

  • 应用行级压缩可实现页面中所存储行数的最大化。
  • 通过将重复数据模式替换为参考以应用列前缀压缩。该数据存储于页眉中。
  • 字典压缩会扫描重复值并将该信息存储在页眉中。

页面压缩的效益取决于所压缩数据的类型。涉及许多重复值的数据相比于由更多唯一值进行填充的数据,前者的压缩程度更高。可使用以下常用语法来应用页面级压缩:

ALTER TABLE name REBUILD WITH (DATA_COMPRESSION=PAGE)

例如,要通过页面压缩来重新构建 REVDB 数据库 rev.TableA 表的所有分区,可使用以下查询:

USE [REVDB] ALTER TABLE [rev].[TableA] REBUILD PARTITION = ALL
WITH(DATA_COMPRESSION = PAGE)

可使用以下语法通过页面级压缩来配置索引:

ALTER INDEX indexName ON tableName REBUILD PARTITION ALL WITH (DATA_COMPRESSION=PAGE)

要了解有关页面级压缩的详细信息,请参阅 MSDN 库中的页面压缩实现。

如果表或索引已分区,则可基于每个分区配置压缩。如果使用 ALTER PARTITION 语句拆分分区,则新分区将继承原始分区的数据压缩属性。如果对两个分区进行合并,则生成的分区将具有目标分区的压缩属性。虽然通过压缩的确可以在页面中存储更多的行,但并不会更改表或索引的最大行大小。如果最大行大小和压缩开销超出 8,060 字节,则无法启用表以进行压缩。索引的默认压缩设置为“无”,并且必须在创建索引时指定索引压缩属性。非聚类索引不会继承表的压缩属性,但堆中创建的聚类索引会继承该堆的压缩状态。数据压缩仅在源中应用,因此在从压缩源中导出数据时,SQL Server 将以未压缩的行格式输出数据。将未压缩的数据导入到启用了压缩的目标表中,会对数据进行压缩。

要了解有关数据压缩的详细信息,请参阅 MSDN 库中的数据压缩。

要使用数据压缩向导更改表和索引的压缩设置,请执行以下步骤:

  1. 启动 SQL Server Management Studio。
  2. 右键单击要压缩的表或索引,单击存储,然后单击管理压缩。

    将显示欢迎使用数据压缩向导对话框。

  3. 单击下一步。

    将显示选择压缩类型对话框。

  4. 选择压缩类型。

    可以选择对所有分区使用相同的压缩类型,也可以基于每个分区在“行”、“页面”和“无”中进行选择。

  5. 单击计算以确定当前空间使用率和压缩后使用率之间的差值。

    将显示选择输出选项对话框。

  6. 选择是创建脚本、立即执行操作还是根据计划执行选项。
  7. 单击 Next。
  8. 单击 Finish。

要了解有关数据压缩向导的详细信息,请参阅 MSDN 库中的数据压缩向导帮助。

估算压缩程度

确定某一对象压缩效益的最佳方法是使用 sp_estimate_data_compression_savings 存储过程。压缩效益取决于诸如数据唯一性等因素。sp_estimate_data_compression_savings 存储过程仅在企业版 SQL Server 中可用。

存储过程的语法如下:

sp_estimate_data_compression_savings[ @schema_name = ] 'schema_name', [ @object_name = ]
'object_name', [@index_id = ] index_id,[@partition_number = ] partition_number,
[@data_compression = ] 'data_compression'

例如,要配置对 REVDB 数据库中的 rev.TableA 表进行行压缩的压缩效益的预估值,可执行以下 Transact-SQL 语句:

USE REVDB;
GO EXEC sp_estimate_data_compression_savings 'rev', 'TableA', NULL, NULL, 'ROW';
GO

要配置对该表进行页面压缩的压缩效益的预估值,可执行以下 Transact-SQL 语句:

USE REVDB;
GO EXEC sp_estimate_data_compression_savings 'rev', 'TableA', NULL, NULL, 'PAGE';
GO

要了解更多有关如何估计压缩节约值的详细信息,请参阅 MSDN 库中的估计数据压缩节约值 (Transact-SQL)。

您可针对检查器用户表和索引使用以下 SQL 脚本,也可用此脚本来生成用于为这些表格和索引设置页面压缩的 SQL 语句。

--Verify REV Schema Storage USE [revdb] GO
--List all tables SELECT USER_NAME(o.uid) [owner], o.name,o.id,o.type,o.status FROM sysobjects o WHERE USER_NAME(o.uid) = 'rev' AND o.type <> 'S' and o.type = 'U' ORDER BY o.name,o.type;
GO
--List all indexes SELECT USER_NAME(o.uid) [owner], OBJECT_NAME(i.id) [table], i.name [index],o.type [type] FROM sysindexes i inner join sysobjects o ON i.id = o.id WHERE USER_NAME(o.uid) = 'rev' AND o.type <> 'S' and o.type = 'U' and i.indid = 1 ORDER BY USER_NAME(o.uid),OBJECT_NAME(i.id),i.name;
GO
--Table page compression
--Example:
ALTER TABLE REVDB.REVTABLELINE REBUILD WITH (DATA_COMPRESSION = PAGE);
GO
--Generate script to set table page compression:
SELECT 'ALTER TABLE ' + USER_NAME(o.uid) + '.' + o.name + ' REBUILD WITH (DATA_COMPRESSION = PAGE);' [TXTSQL] FROM sysobjects o WHERE USER_NAME(o.uid) = 'rev' AND o.type <> 'S' and o.type = 'U' ORDER BY o.name,o.type;
GO
--Index page compression
--Example:
ALTER INDEX R125_pk ON REVDB.REVTABLELINE REBUILD WITH ( DATA_COMPRESSION = PAGE ) ;
GO
--Generate script to set index page compression:
SELECT 'ALTER INDEX ' + i.name + ' ON ' + USER_NAME(o.uid) + '.' + OBJECT_NAME(i.id) + ' REBUILD WITH ( DATA_COMPRESSION = PAGE );' [TXTSQL] FROM sysindexes i inner join sysobjects o ON i.id = o.id WHERE USER_NAME(o.uid) = 'rev' 
AND i.name NOT LIKE '_WA%' --AND o.type <> 'S' and o.type = 'U' and i.indid = 1 ORDER BY USER_NAME(o.uid),OBJECT_NAME(i.id),i.name; GO

压缩和 TDE

数据库文件的加密是在页面级别执行的。已加密数据库中的页面将在写入磁盘之前进行加密,并在读取到内存时进行解密。TDE 不会增加已加密数据库的大小。

要了解有关 TDE 的详细信息,请参阅 MSDN 库中的 SQL Server - 透明数据加密 (TDE)。

加密后的数据压缩要明显少于等效的未加密数据。如果使用 TDE 加密数据库,则备份压缩无法对备份存储进行显著压缩。因此,不建议将 TDE 和备份压缩一起使用。

要了解有关压缩的详细信息,请参阅 MSDN 库中的 SQL Server - 数据压缩。

ArcGIS Desktop

  • 主页
  • 文档
  • 支持

ArcGIS

  • ArcGIS Online
  • ArcGIS Desktop
  • ArcGIS Enterprise
  • ArcGIS
  • ArcGIS Developer
  • ArcGIS Solutions
  • ArcGIS Marketplace

关于 Esri

  • 关于我们
  • 招贤纳士
  • Esri 博客
  • 用户大会
  • 开发者峰会
Esri
分享您的想法。
Copyright © 2021 Esri. | 隐私政策 | 法律声明