【问题标题】:SpeedUp Database Updates加速数据库更新
【发布时间】:2008-11-27 08:11:26
【问题描述】:

有一个 SqlServer2000 数据库我们必须在周末更新。

它的大小几乎是 10G。

更新范围从架构更改、主键更新到更新、更正或插入的数百万条记录。

周末对这份工作来说是不够的。

我们为这项工作设置了一个专用服务器, 打开数据库 SINGLE_USER 进行了我们能想到的任何优化:删除/重新创建索引、关系等。

您能提出任何建议来加快这个过程吗?

SQL SERVER 2000 是不可否定的(不是我的决定)。更新是通过定制程序而不是 BULK INSERT 运行的。

编辑:

架构更新由查询分析器 TSQL 脚本完成(每个版本更新一个脚本)

数据更新由 C# .net 3.5 app 完成。

数据来自一堆文本文件(有很多问题)并写入本地数据库。

计算机未连接到任何网络。

【问题讨论】:

    标签: sql-server migration


    【解决方案1】:

    虽然删除多余的索引可能会有所帮助,但您需要确保保留这些索引,以便升级脚本能够轻松找到需要更新的行。

    否则,请确保您在服务器中有足够的内存(尽管 SQL Server 2000 Standard 限制为 2 GB),并且如果需要预增长您的 MDF 和 LDF 文件以应对任何增长。

    如果可能,您的自定义程序应该将更新作为集合而不是逐行处理。

    编辑: 理想情况下,尝试找出导致性能不佳的操作。如果是架构更改,可能是因为您使列变大并导致发生大量页面拆分。但是,出于同样的原因,在插入和更新时也可能发生页面拆分 - 该行不再适合页面。

    如果您的 C# 应用程序是瓶颈,您是否可以先将更改运行到临时表中(在您的维护窗口之前),然后对实际表执行一次更新? 100 万行的单次更新将比应用程序进行 100 万次更新调用更有效。诚然,如果您需要在本周末进行此操作,您可能没有太多时间进行设置。

    【讨论】:

      【解决方案2】:

      这个“定制程序”究竟是什么样的?即它如何与数据交谈?最小化网络 IO 量(从数据库服务器到应用程序)将是一个好的开始......通常这可能意味着在 TSQL 中做很多工作,但即使只是在数据库服务器上运行应用程序也可能会有所帮助。 ..

      如果应用正在重写大块数据,它可能仍然能够使用批量插入来提交新的表数据。通过命令行(bcp 等)或通过代码(.NET 中的SqlBulkCopy)。这通常比单个插入等更快。

      但这真的取决于这个“定制程序”。

      【讨论】:

        猜你喜欢
        • 2020-10-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-12
        • 2011-09-27
        • 2021-09-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多