gpt4 book ai didi

sql-server-2008 - 将表锁定选项与快速加载目标一起使用会有什么后果?

转载 作者:行者123 更新时间:2023-12-04 03:58:38 25 4
gpt4 key购买 nike

作为整体性能项目的一部分,我试图加快事实表的加载速度。该表大约每天晚上添加1.2亿行,大约10万行。该表的索引很大。

当前,我正在使用SSIS快速加载OLE DB目标,并且加载100,000行大约需要15分钟。对我来说,插入10万行看起来确实很高,所以我更改了程序包以将其结果转储到登台表中,然后从该登台表中将T-SQL插入事实表中。现在,插入件将在不到1分钟的时间内运行。

我发现一个普通的旧T-SQL插入比SSIS快速加载要快,这很奇怪,因此我开始查看在OLEDB目标位置上选中了哪些框。事实证明未选中“表锁定”。当我选中此选项时,SSIS负载现在不到1分钟。
我的问题是:

  • 保留表锁定的含义是什么?
  • T-SQL插入语句默认情况下是否发出表锁,这就是为什么它最初速度更快的原因?
  • 最佳答案

    好吧,我认为解释很简单(请参阅更详细的引用here):

    对于第一个问题:

    Table Lock – By default this setting is checked and the recommendation is to let it be checked unless the same table is being used by some other process at same time. It specifies a table lock will be acquired on the destination table instead of acquiring multiple row level locks, which could turn into lock escalation problems.



    至于insert语句,考虑到需要插入的行数量很多,那么SQL Server很可能会选择锁定表。

    要确认这一点,您可以使用 sys.dm_tran_locks DMV检查在表上持有哪种类型的锁。以下是一些有关如何解释结果的好示例(以及有关锁定升级的好阅读): http://aboutsqlserver.com/2012/01/11/locking-in-microsoft-sql-server-part-12-lock-escalation/

    关于sql-server-2008 - 将表锁定选项与快速加载目标一起使用会有什么后果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16654308/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com