【问题标题】:Identity insert - performance身份插入 - 性能
【发布时间】:2010-10-26 07:44:19
【问题描述】:

我有一个解决方案,我在其中插入使用 GUID 而不是标识的行。 Guid 是在 c# 中生成的。

我有另一个解决方案,其中表、索引等是相同的,但我使用身份而不是 GUID,让 Sql-server 生成它们。

在后一种情况下,我遇到了性能问题....想法?

编辑

真的很抱歉!我回到家安装了分析器,发现我正在比较苹果和梨……我身边的一个大小姐。我正在调用不同的sql。现在持续时间大致相同。

【问题讨论】:

  • 嘿,丹尼尔,您能说明一下您所说的性能问题对我们所有人的含义吗?您在插入时看到的 IO 速度是多少,每秒插入多少次等。
  • 我知道这个问题有点含糊。我无法访问正确的代码。我将在今天晚些时候提供统计数据等...对不起!
  • 但是像父行:1000,子行大约是:10 000; Guid 解决方案需要 0.6 秒,身份解决方案需要 2.5 秒。
  • 了解表架构和您有哪些索引会有所帮助:可能存在影响的集群或填充因子问题,但查看完整表架构 + 示例插入语句会有所帮助更好地评估这一点。

标签: sql-server insert identity


【解决方案1】:

老实说,我希望性能问题与 guid 作为身份有关。使用 guid 时,如果使用 newid() 而不是 newsequentialid(),则可能会出现页面拆分,因为新记录被插入到表的中间而不是末尾。

【讨论】:

    【解决方案2】:

    为了帮助您解决问题,我们首先需要有关您的配置和性能指标的更多信息。

    环境:

    • 您运行的是哪个版本的 SQL Server?
    • 什么是 CPU 和 RAM 规格?
    • 您的存储子系统的配置是什么?
    • 提供表架构和关联的索引定义。
    • 提供测试代码演示如何执行插入。

    性能:

    • 您在插入期间在服务器上看到了什么 wait_types,即 SQL Server 正在等待什么资源?您是 CPU 受限/磁盘受限还是页面争用。
    • wait_types 是否会根据您使用 Identity Vs GUID 运行测试的时间而有所不同?

    最初的假设/推测:

    您可能会在执行身份插入时看到页面争用,因为索引中的前导列不断增加,竞争资源将是 B 树中的最后一页。

    这当然只是一个理论,直到我们从您那里获得更多细节可供使用。

    【讨论】:

    • 正如我所说。我会提供统计数据。如果我在删除索引时有相同的测量值,理论不会失败吗?
    猜你喜欢
    • 2020-02-12
    • 2012-09-28
    • 2011-06-09
    • 1970-01-01
    • 1970-01-01
    • 2018-02-01
    • 2017-03-20
    • 1970-01-01
    相关资源
    最近更新 更多