回答

收藏

什么阻止?(nolock)用TableName选出top 1 *返回结果?

技术问答 技术问答 216 人阅读 | 0 人回复 | 2023-09-14

我目前正在执行以下句子
9 J. S, s. h3 y6 U5 G7 W3 uselect * into adhoc..san_savedi from dps_san..savedi_record这需要很长时间,我想看看它走了多远,所以我运行它:
/ r6 M) h2 H8 a: fselect count(*) from adhoc..san_savedi with (nolock)没有及时返回任何东西,所以我做到了:
7 n  U4 L7 o  h4 z9 eselect top 1 * from adhoc..san_savedi with (nolock)即便如此,它似乎也在无限期内运行。我能理解是否有数百万的记录需要count(*)花了很长时间,但我不明白为什么考虑到我的指定nolock,为什么不立即返回前1条记录?
! ^- x8 g* O$ Z# _2 ^# O以完全公开的名义,dps_san从链接服务器odbc从连接中拉出的视图。我想这不会影响为什么我不能回到第一行,只是把它扔出去,以防我错了。
3 j3 j; d9 B1 F$ ~/ _3 n因此,我想知道是什么导致了这个句子的失败?# ?$ J9 g2 |# I3 ?: y1 V  N
编辑:* x4 ^- {9 ]$ @  d) d
如上所述,是的dps_san..savedi_record是视图。这就是它的作用:
. ~' `5 B; a, g; M2 Kselect * from DPS_SAN..root.SAVEDI_RECORD只是别名,不分组/排序/等。,所以我觉得问题不在这里,但是如果我错了,请告诉我。! G5 ?# W( w2 g+ X8 o2 N5 Q. N4 G
                                                                  T5 i5 Y$ _' i: _5 G7 k# V( x4 P
    解决方案:                                                               
( ]9 U: S; n: Z) y- r3 Z! E- D* M                                                                SELECT具有的查询NOLOCK事实上,它们仍然不需要任何锁SCH-S表面有(模式稳定)锁(而且因为是堆,也需要hobt锁)。! f: Q, R0 f, H+ S' u
另外,SELECTSQL Server它甚至必须在开始之前为这个句子编译一个计划,这也需要它SCH-S锁定表格。
5 W, A; R4 j$ A  e8 L, y! V当你的长期事务通过时SELECT ... INTO当它创建表时,它将对表持有不兼容SCH-M锁,直到句子完成。
" O& @# s1 Q, k1 ]6 V9 A' j! |您可以通过查看验证这一点sys.dm_os_waiting_tasks ,而    同时    封闭期间的周期。
' Y# p% Y8 e+ U; Y6 }+ N% R" k当我在一个连接中尝试以下操作时
3 X; @( u% I( ]; x2 DBEGIN TRANSELECT *INTO NewTFROM master..spt_values/*Remember to rollback/commit this later*/然后执行(或者只是试着查看估计的执行计划)6 D! C2 }7 m! g# j, G
SELECT *FROM NewTWITH (NOLOCK)一秒钟后,阅读查询被阻止。
9 E( T% M5 n* p% fSELECT wait_type,      resource_descriptionFROM sys.dm_os_waiting_tasksWHERE session_id = 确实显示等待类型SCH_S是阻塞资源SCH-M* K3 ]$ w; P6 W
wait_type        resource_description---------------- -------------------------------------------------------------------------------------------------------------------------------LCK_M_SCH_S      objectlock lockPartition=0 objid=461960722 subresource=FULL dbid=1 id=lock4a8a540 mode=Sch-M associatedObjectId=461960722
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则