AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 50183
Accepted
reticentKoala
reticentKoala
Asked: 2013-09-20 01:59:06 +0800 CST2013-09-20 01:59:06 +0800 CST 2013-09-20 01:59:06 +0800 CST

复制快照大小过大导致失败

  • 772

我正在寻找复制快照超过我们预测的 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.) 
sql-server replication
  • 2 2 个回答
  • 4041 Views

2 个回答

  • Voted
  1. Best Answer
    Remus Rusanu
    2013-09-20T02:21:02+08:002013-09-20T02:21:02+08:00

    请注意,任何数据的字符表示几乎总是会超过原始大小。根据类型,它可能会大大超过。例如。一个 int 列占用 4 个字节,但1000000Unicode 的字符表示需要约 16 个字节,包括分隔符。那就是 x4 的增长。日期、浮点数、数字通常都会增加,甚至比 x4 还要大。

    本机格式替代方案是 bcp 实用程序本机格式(因为快照是使用 bcp 应用的)。在比较单个值时,这种格式仅比本机 SQL 存储稍长,但实际上它可能导致文件比 SQL Server 所需的存储更小,因为 bcp 文件很密集:没有页头开销,也没有部分填充的页面(碎片,填充因子)。请参阅使用本机格式导入或导出数据。

    此外,您还应该压缩快照。请参阅增强一般复制性能:

    • 除非需要字符模式快照,否则请使用本机模式快照。对所有订阅服务器使用默认的本机模式快照,但非 SQL Server 订阅服务器和运行 SQL Server Compact 的订阅服务器需要字符模式快照。
    • 为发布使用单个快照文件夹。指定与快照位置相关的发布属性时,您可以选择将快照文件生成到默认快照文件夹、备用快照文件夹或两者。当快照代理运行时,在这两个位置生成快照文件需要额外的磁盘空间和更多的处理。
    • 将快照文件夹放在 Distributor 的本地驱动器上,该驱动器不用于存储数据库或日志文件。快照代理将数据顺序写入快照文件夹。将快照文件夹放置在与任何数据库或日志文件不同的驱动器上可减少磁盘之间的争用,并有助于更快地完成快照过程。
    • 在订阅服务器上创建订阅数据库时,请考虑指定简单或批量日志的恢复模式。这允许在订阅服务器上应用快照期间执行的批量插入的最小记录。将快照应用到订阅数据库后,如有必要,您可以更改为不同的恢复模式(复制的数据库可以使用任何恢复模式)。有关选择恢复模式的详细信息,请参阅还原和恢复概述 (SQL Server)。
    • 考虑使用备用快照文件夹和压缩快照在低带宽网络的可移动媒体上。压缩备用快照文件夹中的快照文件可以减少对快照磁盘存储的要求,并使在可移动媒体上传输快照文件变得更加容易。在某些情况下,压缩快照可以提高通过网络传输快照文件的性能。但是,压缩快照需要快照代理在生成快照文件时以及分发代理或合并代理在应用快照文件时进行额外处理。在某些情况下,这可能会减慢快照生成速度并增加应用快照所需的时间。此外,如果发生网络故障,压缩快照将无法恢复;因此它们不适用于不可靠的网络。在跨网络使用压缩快照时,请仔细考虑这些权衡。有关详细信息,请参阅备用快照文件夹位置和压缩快照。
    • 7
  2. Kin Shah
    2013-09-20T13:42:56+08:002013-09-20T13:42:56+08:00

    @RemusRusanu 最好地解释了 bcp 的本机和字符模式。为此我+1。

    为了处理您的情况,您可以采取两种不同的方法中的任何一种。

    第一个是从备份初始化订阅。请参阅如何:从备份初始化事务订阅服务器(复制 Transact-SQL 编程)。这是不言自明的,BOL 对此有很好的描述。

    Kendal Van Dyke在博客中介绍了第二种方法,即通过手动应用快照来减少事务复制同步时间,这种方法非常棒,可以节省时间和生命。它有点手动过程,但我已经处理了它,这是一种双赢的方法。

    • 3

相关问题

  • 运行时间偏移延迟复制的最佳实践

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

  • PostgreSQL 9.0 Replication 和 Slony-I 有什么区别?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    授予用户对所有表的访问权限

    • 5 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve