SQL Server Parallel Data Warehouse (PDW) 使用临时数据库在加载过程中临时存储数据。 默认情况下,SQL Server PDW 使用目标数据库作为临时数据库,这可能会导致表碎片。 若要减少表碎片,可以创建用户定义的临时数据库。 或者,当从加载失败进行回滚不成问题时,可以使用 fastappend 加载模式通过跳过临时表并直接加载到目标表中来提高性能。
临时数据库基本信息
临时数据库是用户创建的 PDW 数据库,可在将数据加载到设备时临时存储数据。 为加载指定临时数据库时,设备首先将数据复制到临时数据库,然后将来自临时数据库中的临时表中的数据复制到目标数据库中的永久表。
如果未为加载指定临时数据库,分析平台系统 (PDW) 会在目标数据库中创建临时表,并在将数据插入永久目标表中的加载的数据之前,使用它们来存储加载的数据。
当负载使用 fastappend 模式时,分析平台系统 (PDW) 会完全跳过使用临时表,并将数据直接追加到目标表。 fastappend 模式可改善 ELT 方案的加载性能,其中从应用程序角度来看,数据会加载到临时表中。 例如,ELT 进程可以将数据加载到临时表中,通过清理和删除重复来处理数据,然后将数据插入目标事实数据表。 在这种情况下,PDW 不必先将数据加载到内部临时表中,然后再将数据插入应用程序的临时表中。 fastappend 模式可避免额外的加载步骤,从而显著提高了加载性能。 若要使用 fastappend 模式,你必须使用多事务模式,这意味着从失败或中止的加载中恢复必须由你自己的加载进程处理。
临时数据库的优势
临时数据库的主要优势是减少表碎片。 如果未使用临时数据库,数据将加载到目标数据库中的临时表中。 在目标数据库中创建和删除临时表时,临时表和永久表的页面将实现交错。 随着时间的推移,会出现表碎片并降低性能。 相比之下,临时数据库可确保在单独的文件空间中创建和删除临时表,而不是永久表。
临时数据库表结构
每个数据库表的存储结构取决于目标表。
对于加载到堆或聚集列存储索引的情况,临时表是堆。
对于加载到行存储聚集索引的情况,临时表是行存储聚集索引。
权限
需要对临时数据库具有 CREATE 权限(用于创建临时表)。
创建临时数据库的最佳做法
每个设备只能有一个临时数据库。 临时数据库可由所有目标数据库的所有加载作业共享。
临时数据库的大小为客户特定。 最初,首次填充设备时,临时数据库应足够大,以适应初始加载作业。 这些加载作业往往很大,因为多个加载可以同时发生。 初始加载作业完成且系统处于生产状态之后,每个加载作业的大小可能缩小。 负载较小时,可以减小临时数据库的大小,以适应较小的负载大小。 若要减小大小,可以删除临时数据库,并使用较小的分配再次创建该数据库,也可以使用 ALTER DATABASE 语句。
创建临时数据库时,请使用以下指南。
复制表的大小应是将同时加载的所有复制表的估计大小(每个计算节点)。 大小通常为 25-30 GB。
分布式表的大小应是将同时加载的所有分布式表的估计大小(每个设备)。
日志大小通常类似于复制表的大小。
示例
A. 创建临时数据库
以下示例创建了一个临时数据库 Stagedb,可用于设备上的所有负载。 假设你估计将同时加载五个复制表,其中每个复制表的大小为 5 GB。 此并发会导致为复制大小至少分配 25 GB。 假设你估计将同时加载六个大小分别为 100、200、400、500、500 和 550 GB 的分布式表。 此并发会导致为分布式表的大小至少分配 2250 GB。
CREATE DATABASE Stagedb
WITH (
AUTOGROW = ON,
REPLICATED_SIZE = 25 GB,
DISTRIBUTED_SIZE = 2250 GB,
LOG_SIZE = 25 GB
);