如何解决部署期间的 SSRS 死锁
我想知道是否有人可以提供帮助。我没有从 MS 那里得到太多帮助。
场景
- 一个报表服务器(带有 SSRS 2019 的 sql 2019)具有多个文件夹,如这张图片Report Server
- 运行 Powershell 脚本(见下文 - 请注意,我确实尝试了 ReportingServicesTools,结果相同)
$ReportFolderName = "/ReportFolder_SSRS";
$reportserverIP = "localhost";
$ReportsUserName = "ReportUser";
$ReportsUserPass = "ReportUserPassword";
$ReportFolderName = "/$($ReportFolderName)"
$ReportFolderName = $ReportFolderName.Replace("//","/");
if([System.String]::IsNullOrWhiteSpace($ReportsUserName) -or [System.String]::IsNullOrWhiteSpace($ReportsUserPass))
{
$Proxy = New-WebServiceProxy -Uri "http://$($reportserverIP)/reportserver/ReportService2010.asmx?WSDL" -UseDefaultCredential -ErrorAction Stop;
}
else
{
[System.Management.Automation.PSCredential]$Cred = $null;
[securestring]$Secure = ConvertTo-securestring -String $ReportsUserPass -AsPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential -ArgumentList $ReportsUserName,$Secure;
$Proxy = New-WebServiceProxy -Uri "http://$($reportserverIP)/reportserver/ReportService2010.asmx?WSDL" -Credential $Cred -ErrorAction Stop;
}
$Deleteall = @(Get-RsFolderContent -reportserverUri "http://$($reportserverIP)/reportserver/" -Path "$($ReportFolderName)")
$CountReports = $($Deleteall | Where-Object { $_.TypeName -eq "Report" }).Count;
$CountDataSets = $($Deleteall | Where-Object { $_.TypeName -ne "Report" }).Count;
Write-Host "Deleting Reports from $($ReportFolderName)"
foreach($item in $Deleteall)
{
$count++;
Write-Host "[$($item.TypeName)] Delete $($item.Name) from $($item.Path) ... ";
$Proxy.DeleteItem($item.Path)
}
Write-Host "##[section] Deleted $($CountReports) Report$(if ($CountReports -ne 1) {"s"}) and $($CountDataSets) Data Source$(if ($CountDataSets -ne 1) {"s"})";
通过我的测试,我部署到 4 个站点,但其中多达 3 个将失败并出现以下错误
2021-02-19T09:05:00.7668607Z ##[error] 使用“1”参数调用“DeleteItem”的异常:“System.Web.Services.Protocols.soapException:报表服务器中发生错误数据库。这可能是由于数据库中的连接失败、超时或磁盘空间不足。---> Microsoft.ReportingServices.Diagnostics.Utilities.reportserverStorageException: 报表服务器数据库中发生错误。这可能是由于连接造成的数据库中出现故障、超时或磁盘不足的情况。---> System.Data.sqlClient.sqlException: 事务(进程 ID 65)在锁定资源上与另一个进程发生死锁,并已被选为死锁牺牲品。重新运行事务。
我们增加了超时时间,重新安装了报表服务器和报表服务,以确保不会发生损坏并且代理正确无误。
死锁发生在随机 ID 并且不特定于该 ID 过程
这发生在上面的 Write-RsCatalogItem 和 Remove-RsCatalogItem 中,并且仅在报表服务器发生多次部署时发生。
任何帮助将不胜感激
** 编辑:这是我们运行的 1222 跟踪的提取,它告诉我们已经知道的内容。
02/19/2021 12:20:46,spid23s,UnkNown,waiter id=process195e1037468 mode=S requestType=wait
02/19/2021 12:20:46,waiter-list
02/19/2021 12:20:46,owner id=process195e106f468 mode=X
02/19/2021 12:20:46,owner-list
02/19/2021 12:20:46,keylock hobtid=72057594052280320 dbid=5 objectname=Reports.dbo.Catalog indexname=IX_Policy id=lock195c438e080 mode=X associatedobjectId=72057594052280320
02/19/2021 12:20:46,waiter id=process195e106f468 mode=U requestType=wait
02/19/2021 12:20:46,owner id=process195e1037468 mode=X
02/19/2021 12:20:46,keylock hobtid=72057594047299584 dbid=5 objectname=Reports.dbo.SnapshotData indexname=PK_SnapshotData id=lock195d11c6280 mode=X associatedobjectId=72057594047299584
02/19/2021 12:20:46,resource-list
02/19/2021 12:20:46,Proc [Database Id = 5 Object Id = 1933249942]
02/19/2021 12:20:46,inputbuf
02/19/2021 12:20:46,EXEC CleanorphanedPolicie
02/19/2021 12:20:46,frame procname=Reports.dbo.DeleteObject line=194 stmtstart=10482 stmtend=10532 sqlhandle=0x03000500960d3b7369c60401d1ac000001000000000000000000000000000000000000000000000000000000
02/19/2021 12:20:46,NOT EXISTS (SELECT ItemID FROM [Catalog] WHERE [Catalog].[PolicyID] = [Policies].[PolicyID]
02/19/2021 12:20:46,AND
02/19/2021 12:20:46,[Policies].[PolicyFlag] = 0
02/19/2021 12:20:46,WHERE
02/19/2021 12:20:46,[Policies]
02/19/2021 12:20:46,DELETE
02/19/2021 12:20:46,frame procname=Reports.dbo.CleanorphanedPolicies line=5 stmtstart=196 stmtend=524 sqlhandle=0x030005001f6768460dc60401d1ac000001000000000000000000000000000000000000000000000000000000
02/19/2021 12:20:46,executionStack
02/19/2021 12:20:46,process id=process195e1037468 taskpriority=0 logused=23524 waitresource=KEY: 5:72057594052280320 (2b682d85aa08) waittime=2373 ownerId=6759604 transactionname=user_transaction lasttranstarted=2021-02-19T12:20:44.180 XDES=0x195e017c490 lockMode=S schedulerid=4 kpid=74580 status=suspended spid=51 sbid=0 ecid=0 priority=0 trancount=2 lastbatchstarted=2021-02-19T12:20:44.190 lastbatchcompleted=2021-02-19T12:20:44.190 lastattention=1900-01-01T00:00:00.190 clientapp=Report Server hostname={Hidden} hostpid=74372 loginname=ReportUser isolationlevel=read committed (2) xactid=6759604 currentdb=5 lockTimeout=4294967295 clientoption1=671088672 clientoption2=128056
02/19/2021 12:20:46,(R.Path = @Path OR R.Path LIKE @Prefix ESCAPE '*'
02/19/2021 12:20:46,INNER JOIN [SnapshotData] AS SD ON R.Intermediate = SD.SnapshotDataID
02/19/2021 12:20:46,Catalog AS R WITH (XLOCK)
02/19/2021 12:20:46,FROM
02/19/2021 12:20:46,TransientRefcount = TransientRefcount + case when R.Type = 8 then 1 ELSE 0 END
02/19/2021 12:20:46,ExpirationDate = case when R.Type = 8 then DATEADD(d<c/> 14<c/> GETDATE()) ELSE ExpirationDate END<c/>
02/19/2021 12:20:46,-- to fix VSTS 384486 keep shared dataset compiled deFinition for 14 days
02/19/2021 12:20:46,SET PermanentRefcount = PermanentRefcount - 1<c/>
02/19/2021 12:20:46,UPDATE SnapshotData
02/19/2021 12:20:46,frame procname=Reports.dbo.DeleteObject line=54 stmtstart=2638 stmtend=3638 sqlhandle=0x03000500960d3b7369c60401d1ac000001000000000000000000000000000000000000000000000000000000
02/19/2021 12:20:46,process id=process195e106f468 taskpriority=0 logused=0 waitresource=KEY: 5:72057594047299584 (7166b320963a) waittime=2382 ownerId=6759842 transactionname=user_transaction lasttranstarted=2021-02-19T12:20:44.210 XDES=0x195d5adc490 lockMode=U schedulerid=11 kpid=55224 status=suspended spid=55 sbid=0 ecid=0 priority=0 trancount=2 lastbatchstarted=2021-02-19T12:20:44.213 lastbatchcompleted=2021-02-19T12:20:44.213 lastattention=1900-01-01T00:00:00.213 clientapp=Report Server hostname={Hidden} hostpid=74372 loginname=ReportUser isolationlevel=read committed (2) xactid=6759842 currentdb=5 lockTimeout=4294967295 clientoption1=671088672 clientoption2=128056
02/19/2021 12:20:46,process-list
02/19/2021 12:20:46,deadlock victim=process195e106f468
02/19/2021 12:20:46,deadlock-list
02/19/2021 12:20:44,spid40s,waiter id=process195e1037468 mode=S requestType=wait
02/19/2021 12:20:44,waiter-list
02/19/2021 12:20:44,owner id=process195e105eca8 mode=X
02/19/2021 12:20:44,owner-list
02/19/2021 12:20:44,keylock hobtid=72057594052280320 dbid=5 objectname=Reports.dbo.Catalog indexname=IX_Policy id=lock195ab386a80 mode=X associatedobjectId=72057594052280320
02/19/2021 12:20:44,waiter id=process195e105eca8 mode=U requestType=wait
02/19/2021 12:20:44,owner id=process195e1037468 mode=X
02/19/2021 12:20:44,keylock hobtid=72057594047299584 dbid=5 objectname=Reports.dbo.SnapshotData indexname=PK_SnapshotData id=lock195b5e2ee00 mode=X associatedobjectId=72057594047299584
02/19/2021 12:20:44,resource-list
02/19/2021 12:20:44,Proc [Database Id = 5 Object Id = 1933249942]
02/19/2021 12:20:44,inputbuf
02/19/2021 12:20:44,EXEC CleanorphanedPolicie
02/19/2021 12:20:44,frame procname=Reports.dbo.DeleteObject line=194 stmtstart=10482 stmtend=10532 sqlhandle=0x03000500960d3b7369c60401d1ac000001000000000000000000000000000000000000000000000000000000
02/19/2021 12:20:44,NOT EXISTS (SELECT ItemID FROM [Catalog] WHERE [Catalog].[PolicyID] = [Policies].[PolicyID]
02/19/2021 12:20:44,AND
02/19/2021 12:20:44,[Policies].[PolicyFlag] = 0
02/19/2021 12:20:44,WHERE
02/19/2021 12:20:44,[Policies]
02/19/2021 12:20:44,DELETE
02/19/2021 12:20:44,frame procname=Reports.dbo.CleanorphanedPolicies line=5 stmtstart=196 stmtend=524 sqlhandle=0x030005001f6768460dc60401d1ac000001000000000000000000000000000000000000000000000000000000
02/19/2021 12:20:44,executionStack
02/19/2021 12:20:44,process id=process195e1037468 taskpriority=0 logused=28364 waitresource=KEY: 5:72057594052280320 (ed76754105b8) waittime=4998 ownerId=6758288 transactionname=user_transaction lasttranstarted=2021-02-19T12:20:36.750 XDES=0x195e017c490 lockMode=S schedulerid=4 kpid=74580 status=suspended spid=51 sbid=0 ecid=0 priority=0 trancount=2 lastbatchstarted=2021-02-19T12:20:36.757 lastbatchcompleted=2021-02-19T12:20:36.753 lastattention=1900-01-01T00:00:00.753 clientapp=Report Server hostname={Hidden} hostpid=74372 loginname=ReportUser isolationlevel=read committed (2) xactid=6758288 currentdb=5 lockTimeout=4294967295 clientoption1=671088672 clientoption2=128056
02/19/2021 12:20:44,(R.Path = @Path OR R.Path LIKE @Prefix ESCAPE '*'
02/19/2021 12:20:44,INNER JOIN [SnapshotData] AS SD ON R.Intermediate = SD.SnapshotDataID
02/19/2021 12:20:44,Catalog AS R WITH (XLOCK)
02/19/2021 12:20:44,FROM
02/19/2021 12:20:44,TransientRefcount = TransientRefcount + case when R.Type = 8 then 1 ELSE 0 END
02/19/2021 12:20:44,ExpirationDate = case when R.Type = 8 then DATEADD(d<c/> 14<c/> GETDATE()) ELSE ExpirationDate END<c/>
02/19/2021 12:20:44,-- to fix VSTS 384486 keep shared dataset compiled deFinition for 14 days
02/19/2021 12:20:44,SET PermanentRefcount = PermanentRefcount - 1<c/>
02/19/2021 12:20:44,UPDATE SnapshotData
02/19/2021 12:20:44,frame procname=Reports.dbo.DeleteObject line=54 stmtstart=2638 stmtend=3638 sqlhandle=0x03000500960d3b7369c60401d1ac000001000000000000000000000000000000000000000000000000000000
02/19/2021 12:20:44,process id=process195e105eca8 taskpriority=0 logused=0 waitresource=KEY: 5:72057594047299584 (a7101ea26f8a) waittime=4998 ownerId=6758993 transactionname=user_transaction lasttranstarted=2021-02-19T12:20:38.020 XDES=0x195cacac490 lockMode=U schedulerid=9 kpid=76660 status=suspended spid=60 sbid=0 ecid=0 priority=0 trancount=2 lastbatchstarted=2021-02-19T12:20:38.020 lastbatchcompleted=2021-02-19T12:20:38.020 lastattention=1900-01-01T00:00:00.020 clientapp=Report Server hostname={Hidden} hostpid=74372 loginname=ReportUser isolationlevel=read committed (2) xactid=6758993 currentdb=5 lockTimeout=4294967295 clientoption1=671088672 clientoption2=128056
02/19/2021 12:20:44,process-list
02/19/2021 12:20:44,deadlock victim=process195e105eca8
02/19/2021 12:20:44,deadlock-list
02/19/2021 12:20:39,spid26s,waiter id=process195e1037468 mode=S requestType=wait
02/19/2021 12:20:39,waiter-list
02/19/2021 12:20:39,owner id=process195e106f468 mode=X
02/19/2021 12:20:39,owner-list
02/19/2021 12:20:39,keylock hobtid=72057594052280320 dbid=5 objectname=Reports.dbo.Catalog indexname=IX_Policy id=lock195aabfe180 mode=X associatedobjectId=72057594052280320
02/19/2021 12:20:39,waiter id=process195e106f468 mode=U requestType=wait
02/19/2021 12:20:39,owner id=process195e1037468 mode=X
02/19/2021 12:20:39,keylock hobtid=72057594047299584 dbid=5 objectname=Reports.dbo.SnapshotData indexname=PK_SnapshotData id=lock195b5e2ee00 mode=X associatedobjectId=72057594047299584
02/19/2021 12:20:39,resource-list
02/19/2021 12:20:39,Proc [Database Id = 5 Object Id = 1933249942]
02/19/2021 12:20:39,inputbuf
02/19/2021 12:20:39,EXEC CleanorphanedPolicie
02/19/2021 12:20:39,frame procname=Reports.dbo.DeleteObject line=194 stmtstart=10482 stmtend=10532 sqlhandle=0x03000500960d3b7369c60401d1ac000001000000000000000000000000000000000000000000000000000000
02/19/2021 12:20:39,NOT EXISTS (SELECT ItemID FROM [Catalog] WHERE [Catalog].[PolicyID] = [Policies].[PolicyID]
02/19/2021 12:20:39,AND
02/19/2021 12:20:39,[Policies].[PolicyFlag] = 0
02/19/2021 12:20:39,WHERE
02/19/2021 12:20:39,[Policies]
02/19/2021 12:20:39,DELETE
02/19/2021 12:20:39,frame procname=Reports.dbo.CleanorphanedPolicies line=5 stmtstart=196 stmtend=524 sqlhandle=0x030005001f6768460dc60401d1ac000001000000000000000000000000000000000000000000000000000000
02/19/2021 12:20:39,executionStack
02/19/2021 12:20:39,process id=process195e1037468 taskpriority=0 logused=28364 waitresource=KEY: 5:72057594052280320 (d8f7d57a33e8) waittime=2187 ownerId=6758288 transactionname=user_transaction lasttranstarted=2021-02-19T12:20:36.750 XDES=0x195e017c490 lockMode=S schedulerid=4 kpid=74580 status=suspended spid=51 sbid=0 ecid=0 priority=0 trancount=2 lastbatchstarted=2021-02-19T12:20:36.757 lastbatchcompleted=2021-02-19T12:20:36.753 lastattention=1900-01-01T00:00:00.753 clientapp=Report Server hostname={Hidden} hostpid=74372 loginname=ReportUser isolationlevel=read committed (2) xactid=6758288 currentdb=5 lockTimeout=4294967295 clientoption1=671088672 clientoption2=128056
02/19/2021 12:20:39,(R.Path = @Path OR R.Path LIKE @Prefix ESCAPE '*'
02/19/2021 12:20:39,INNER JOIN [SnapshotData] AS SD ON R.Intermediate = SD.SnapshotDataID
02/19/2021 12:20:39,Catalog AS R WITH (XLOCK)
02/19/2021 12:20:39,FROM
02/19/2021 12:20:39,TransientRefcount = TransientRefcount + case when R.Type = 8 then 1 ELSE 0 END
02/19/2021 12:20:39,ExpirationDate = case when R.Type = 8 then DATEADD(d<c/> 14<c/> GETDATE()) ELSE ExpirationDate END<c/>
02/19/2021 12:20:39,-- to fix VSTS 384486 keep shared dataset compiled deFinition for 14 days
02/19/2021 12:20:39,SET PermanentRefcount = PermanentRefcount - 1<c/>
02/19/2021 12:20:39,UPDATE SnapshotData
02/19/2021 12:20:39,frame procname=Reports.dbo.DeleteObject line=54 stmtstart=2638 stmtend=3638 sqlhandle=0x03000500960d3b7369c60401d1ac000001000000000000000000000000000000000000000000000000000000
02/19/2021 12:20:39,process id=process195e106f468 taskpriority=0 logused=0 waitresource=KEY: 5:72057594047299584 (a7101ea26f8a) waittime=2253 ownerId=6758401 transactionname=user_transaction lasttranstarted=2021-02-19T12:20:36.783 XDES=0x195d5adc490 lockMode=U schedulerid=11 kpid=55224 status=suspended spid=55 sbid=0 ecid=0 priority=0 trancount=2 lastbatchstarted=2021-02-19T12:20:36.783 lastbatchcompleted=2021-02-19T12:20:36.783 lastattention=1900-01-01T00:00:00.783 clientapp=Report Server hostname={Hidden} hostpid=74372 loginname=ReportUser isolationlevel=read committed (2) xactid=6758401 currentdb=5 lockTimeout=4294967295 clientoption1=671088672 clientoption2=128056
02/19/2021 12:20:39,process-list
02/19/2021 12:20:39,deadlock victim=process195e106f468
02/19/2021 12:20:39,deadlock-list
02/19/2021 12:17:27,spid58,DBCC TRACEON 1222<c/> server process ID (SPID) 58. This is an informational message only; no user action is required.
xml_report
<deadlock>
<victim-list> <victimProcess id="process195e105f468" /> </victim-list>
<process-list>
<process
id="process195e105f468"
taskpriority="0"
logused="508"
waitresource="KEY: 5:72057594045136896 (0a1f1722cb01)"
waittime="691"
ownerId="14764658"
transactionname="user_transaction"
lasttranstarted="2021-02-22T08:42:24.593"
XDES="0x195d5b28490"
lockMode="U"
schedulerid="9"
kpid="36768"
status="suspended"
spid="68"
sbid="0"
ecid="0"
priority="0"
trancount="2"
lastbatchstarted="2021-02-22T08:42:24.597"
lastbatchcompleted="2021-02-22T08:42:24.597"
lastattention="1900-01-01T00:00:00.597"
clientapp="Report Server"
hostname="{HOSTNAME HIDDEN}"
hostpid="66240"
loginname="{REPORTS USER HIDDEN}"
isolationlevel="read committed (2)"
xactid="14764658"
currentdb="5"
lockTimeout="4294967295"
clientoption1="671088672"
clientoption2="128056"
>
<executionStack>
<frame procname="Reports.dbo.DeleteObject" line="92" stmtstart="5106" stmtend="5602" sqlhandle="0x03000500960d3b7369c60401d1ac000001000000000000000000000000000000000000000000000000000000">
UPDATE [DataSource] SET [Flags] = [Flags] & 0x7FFFFFFD,-- broken link [Link] = NULL FROM [Catalog] AS C INNER JOIN [DataSource] AS DS ON C.[ItemID] = DS.[Link] WHERE (C.Path = @Path OR C.Path LIKE @Prefix ESCAPE
'*'
</frame>
</executionStack>
<inputbuf> Proc [Database Id = 5 Object Id = 1933249942] </inputbuf>
</process>
<process
id="process195e1067088"
taskpriority="0"
logused="32272"
waitresource="KEY: 5:72057594052280320 (ec7e3c594ed4)"
waittime="689"
ownerId="14764660"
transactionname="user_transaction"
lasttranstarted="2021-02-22T08:42:24.593"
XDES="0x195d9c00490"
lockMode="S"
schedulerid="10"
kpid="38608"
status="suspended"
spid="69"
sbid="0"
ecid="0"
priority="0"
trancount="2"
lastbatchstarted="2021-02-22T08:42:24.597"
lastbatchcompleted="2021-02-22T08:42:24.597"
lastattention="1900-01-01T00:00:00.597"
clientapp="Report Server"
hostname="{HOSTNAME HIDDEN}"
hostpid="66240"
loginname="{REPORTS USER HIDDEN}"
isolationlevel="read committed (2)"
xactid="14764660"
currentdb="5"
lockTimeout="4294967295"
clientoption1="671088672"
clientoption2="128056"
>
<executionStack>
<frame procname="Reports.dbo.CleanorphanedPolicies" line="5" stmtstart="196" stmtend="524" sqlhandle="0x030005001f6768460dc60401d1ac000001000000000000000000000000000000000000000000000000000000">
DELETE [Policies] WHERE [Policies].[PolicyFlag] = 0 AND NOT EXISTS (SELECT ItemID FROM [Catalog] WHERE [Catalog].[PolicyID] = [Policies].[PolicyID]
</frame>
<frame procname="Reports.dbo.DeleteObject" line="194" stmtstart="10482" stmtend="10532" sqlhandle="0x03000500960d3b7369c60401d1ac000001000000000000000000000000000000000000000000000000000000">
EXEC CleanorphanedPolicie
</frame>
</executionStack>
<inputbuf> Proc [Database Id = 5 Object Id = 1933249942] </inputbuf>
</process>
</process-list>
<resource-list>
<keylock hobtid="72057594045136896" dbid="5" objectname="Reports.dbo.DataSource" indexname="PK_DataSource" id="lock195bdb35180" mode="X" associatedobjectId="72057594045136896">
<owner-list> <owner id="process195e1067088" mode="X" /> </owner-list> <waiter-list> <waiter id="process195e105f468" mode="U" requestType="wait" /> </waiter-list>
</keylock>
<keylock hobtid="72057594052280320" dbid="5" objectname="Reports.dbo.Catalog" indexname="IX_Policy" id="lock195c444a200" mode="X" associatedobjectId="72057594052280320">
<owner-list> <owner id="process195e105f468" mode="X" /> </owner-list> <waiter-list> <waiter id="process195e1067088" mode="S" requestType="wait" /> </waiter-list>
</keylock>
</resource-list>
</deadlock>
*** 编辑更多:我还应该在 sql Webservice URL 方法和 sql 2019 Web API 方法中添加这种情况。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。