我正在寻找复制快照超过我们预测的 5 倍的解释
在复制失败后,我们正在尝试使用新快照重新初始化订阅。数据库大小为 135GB,数据库中的一个表为 60GB - 我们已将本文排除在出版物之外。这意味着我们预计快照大小约为 75GB。
我们曾多次尝试创建快照,但由于磁盘空间不足而失败。昨晚快照用 340GB 的可用空间填充了一个磁盘。
我欢迎对这么大的快照做出任何解释。
在检查可能的原因时,我注意到快照格式设置为“字符 - 如果发布者或订阅者未运行 SQL Server,则需要”。尽管事实上这种跨国复制的两端都是本机 SQL Server。格式之间的大小是否不同?
提前致谢。
Native mode file Size:105 MB
C:>bcp IVM_ArchiveTest.dbo.Event out D:\NOBACKUP\UseOnce\EventNative.dat -T -n
218977 rows copied. Network packet size (bytes): 4096 Clock Time (ms.)
Total : 7878 Average : (27796.01 rows per sec.)
Character mode file Size:66 MB
C:\>bcp IVM_ArchiveTest.dbo.Event out D:\NOBACKUP\UseOnce\EventChar.dat -T -c
218977 rows copied. Network packet size (bytes): 4096 Clock Time (ms.)
Total : 1654 Average : (132392.38 rows per sec.)
请注意,任何数据的字符表示几乎总是会超过原始大小。根据类型,它可能会大大超过。例如。一个 int 列占用 4 个字节,但
1000000
Unicode 的字符表示需要约 16 个字节,包括分隔符。那就是 x4 的增长。日期、浮点数、数字通常都会增加,甚至比 x4 还要大。本机格式替代方案是 bcp 实用程序本机格式(因为快照是使用 bcp 应用的)。在比较单个值时,这种格式仅比本机 SQL 存储稍长,但实际上它可能导致文件比 SQL Server 所需的存储更小,因为 bcp 文件很密集:没有页头开销,也没有部分填充的页面(碎片,填充因子)。请参阅使用本机格式导入或导出数据。
此外,您还应该压缩快照。请参阅增强一般复制性能:
@RemusRusanu 最好地解释了 bcp 的本机和字符模式。为此我+1。
为了处理您的情况,您可以采取两种不同的方法中的任何一种。
第一个是从备份初始化订阅。请参阅如何:从备份初始化事务订阅服务器(复制 Transact-SQL 编程)。这是不言自明的,BOL 对此有很好的描述。
Kendal Van Dyke在博客中介绍了第二种方法,即通过手动应用快照来减少事务复制同步时间,这种方法非常棒,可以节省时间和生命。它有点手动过程,但我已经处理了它,这是一种双赢的方法。