sql-server-2008 – 使用带有快速加载目标的表锁选项有什么后果?

我正在尝试加速事实表加载,作为整体性能项目的一部分.该表仅约1.2亿行,每晚约10万.该表非常重要.

目前我正在使用SSIS快速加载OLE DB目标,加载100,000行大约需要15分钟.对于我来说,插入100k行似乎非常高,所以我更改了包以将其结果转储到临时表中,然后从该临时表中将T-sql插入到事实表中.插入件现在运行不到1分钟.

我发现很简单,一个普通的旧T-sql插件比SSIS Fast Load快,所以我开始查看在OLEDB目的地上检查了哪些盒子.事实证明没有检查表锁.当我选中此选项时,SSIS负载现在不到1分钟.
我的问题是:

>选中Table Lock会有什么影响?
>认情况下,T-sql insert语句是否发出表锁,这就是为什么它最初更快?

解决方法

好吧,我认为解释很简单(参见更详细的参考文献 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/.

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 'EastRiver' 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...