sql-server – 阻塞进程报告中的空阻塞进程
|
我正在使用扩展事件收集阻止的进程报告,并且由于某些原因,在某些报告中阻塞进程节点为空.这是完整的xml: <blocked-process-report monitorLoop="383674">
<blocked-process>
<process id="processa7bd5b868" taskpriority="0" logused="106108620" waitresource="KEY: 6:72057613454278656 (8a2f7bc2cd41)" waittime="25343" ownerId="1051989016" transactionname="user_transaction" lasttranstarted="2017-03-20T09:30:38.657" XDES="0x21f382d9c8" lockMode="X" schedulerid="7" kpid="15316" status="suspended" spid="252" sbid="0" ecid="0" priority="0" trancount="2" lastbatchstarted="2017-03-20T09:39:15.853" lastbatchcompleted="2017-03-20T09:39:15.850" lastattention="1900-01-01T00:00:00.850" clientapp="Microsoft Dynamics AX" hostname="***" hostpid="1348" loginname="***" isolationlevel="read committed (2)" xactid="1051989016" currentdb="6" lockTimeout="4294967295" clientoption1="671088672" clientoption2="128056">
<executionStack>
<frame line="1" stmtstart="40" sqlhandle="0x02000000f7def225b0edaecd8744b453ce09bdcff9b291f50000000000000000000000000000000000000000" />
<frame line="1" sqlhandle="0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" />
</executionStack>
<inputbuf>
(@P1 bigint,@P2 int)DELETE FROM DIMENSIONFOCUSUNPROCESSEDTRANSACTIONS WHERE ((PARTITION=5637144576) AND ((FOCUSDIMENSIONHIERARCHY=@P1) AND (STATE=@P2))) </inputbuf>
</process>
</blocked-process>
<blocking-process>
<process />
</blocking-process>
</blocked-process-report>
这个hobt_id所属的索引的索引定义是 CREATE UNIQUE CLUSTERED INDEX [I_7402FOCUSDIMENSIONHIERARCHYIDX] ON [dbo].[DIMENSIONFOCUSUNPROCESSEDTRANSACTIONS]
(
[PARTITION] ASC,[FOCUSDIMENSIONHIERARCHY] ASC,[STATE] ASC,[GENERALJOURNALENTRY] ASC
)WITH (PAD_INDEX = OFF,STATISTICS_NORECOMPUTE = OFF,SORT_IN_TEMPDB = OFF,IGNORE_DUP_KEY = OFF,DROP_EXISTING = OFF,ONLINE = OFF,ALLOW_ROW_LOCKS = ON,ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
没有涉及分区,这是表定义: CREATE TABLE [dbo].[DIMENSIONFOCUSUNPROCESSEDTRANSACTIONS](
[FOCUSDIMENSIONHIERARCHY] [bigint] NOT NULL DEFAULT ((0)),[GENERALJOURNALENTRY] [bigint] NOT NULL DEFAULT ((0)),[STATE] [int] NOT NULL DEFAULT ((0)),[RECVERSION] [int] NOT NULL DEFAULT ((1)),[PARTITION] [bigint] NOT NULL DEFAULT ((5637144576.)),[RECID] [bigint] NOT NULL,CONSTRAINT [I_7402RECID] PRIMARY KEY NONCLUSTERED
(
[RECID] ASC
)WITH (PAD_INDEX = OFF,ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[DIMENSIONFOCUSUNPROCESSEDTRANSACTIONS] WITH CHECK ADD CHECK (([RECID]<>(0)))
GO
在整个数据库中的任何表上都没有定义触发器或外键. 确切的SQL Server构建是:
扩展事件非常简单,只需记录被阻止的进程报告: CREATE EVENT SESSION [Dynperf_Blocking_Data] ON SERVER
ADD EVENT sqlserver.blocked_process_report(
ACTION(package0.collect_system_time,sqlserver.client_hostname,sqlserver.context_info)),ADD EVENT sqlserver.lock_escalation(
ACTION(package0.collect_system_time,ADD EVENT sqlserver.xml_deadlock_report(
ACTION(package0.collect_system_time,sqlserver.context_info))
ADD TARGET package0.event_file(SET filename=N'F:SQLTraceDynamics_Blocking.xel',max_file_size=(100),max_rollover_files=(10))
WITH (MAX_MEMORY=32768 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=5 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=PER_NODE,TRACK_CAUSALITY=ON,STARTUP_STATE=ON)
GO
数据库在Read Committed Snapshot Isolation中配置,并且最大并行度设置为1.这是服务器配置: +------------------------------------+-------+ | name | value | +------------------------------------+-------+ | access check cache bucket count | 0 | | access check cache quota | 0 | | Ad Hoc Distributed Queries | 0 | | affinity I/O mask | 0 | | affinity mask | 0 | | affinity64 I/O mask | 0 | | affinity64 mask | 0 | | Agent XPs | 1 | | allow updates | 0 | | backup compression default | 1 | | blocked process threshold (s) | 2 | | c2 audit mode | 0 | | clr enabled | 0 | | common criteria compliance enabled | 0 | | contained database authentication | 0 | | cost threshold for parallelism | 5 | | cross db ownership chaining | 0 | | cursor threshold | -1 | | Database Mail XPs | 1 | | default full-text language | 1033 | | default language | 0 | | default trace enabled | 1 | | disallow results from triggers | 0 | | EKM provider enabled | 0 | | filestream access level | 0 | | fill factor (%) | 0 | | ft crawl bandwidth (max) | 100 | | ft crawl bandwidth (min) | 0 | | ft notify bandwidth (max) | 100 | | ft notify bandwidth (min) | 0 | | index create memory (KB) | 0 | | in-doubt xact resolution | 0 | | lightweight pooling | 0 | | locks | 0 | | max degree of parallelism | 1 | | max full-text crawl range | 4 | | max server memory (MB) | 65536 | | max text repl size (B) | 65536 | | max worker threads | 0 | | media retention | 0 | | min memory per query (KB) | 1024 | | min server memory (MB) | 0 | | nested triggers | 1 | | network packet size (B) | 4096 | | Ole Automation Procedures | 0 | | open objects | 0 | | optimize for ad hoc workloads | 1 | | PH timeout (s) | 60 | | precompute rank | 0 | | priority boost | 0 | | query governor cost limit | 0 | | query wait (s) | -1 | | recovery interval (min) | 0 | | remote access | 1 | | remote admin connections | 0 | | remote login timeout (s) | 10 | | remote proc trans | 0 | | remote query timeout (s) | 600 | | Replication XPs | 0 | | scan for startup procs | 1 | | server trigger recursion | 1 | | set working set size | 0 | | show advanced options | 1 | | SMO and DMO XPs | 1 | | transform noise words | 0 | | two digit year cutoff | 2049 | | user connections | 0 | | user options | 0 | | xp_cmdshell | 0 | +------------------------------------+-------+ 我运行了一段时间的服务器端跟踪,我在跟踪文件中获得了与使用扩展事件相同的空节点. <blocked-process-report monitorLoop="1327922">
<blocked-process>
<process id="processbd9839848" taskpriority="0" logused="1044668" waitresource="KEY: 5:72057597098328064 (1d7966fe609a)" waittime="316928" ownerId="3415555263" transactionname="user_transaction" lasttranstarted="2017-03-27T07:59:29.290" XDES="0x1c1c0c3b0" lockMode="U" schedulerid="3" kpid="25236" status="suspended" spid="165" sbid="0" ecid="0" priority="0" trancount="2" lastbatchstarted="2017-03-27T07:59:47.873" lastbatchcompleted="2017-03-27T07:59:47.873" lastattention="2017-03-27T07:58:01.490" clientapp="Microsoft Dynamics AX" hostname="***" hostpid="11072" loginname="***" isolationlevel="read committed (2)" xactid="3415555263" currentdb="5" lockTimeout="4294967295" clientoption1="671088672" clientoption2="128056">
<executionStack>
<frame line="1" stmtstart="236" stmtend="676" sqlhandle="0x020000004d6830193d42a167edd195c201f40bb772e9ece20000000000000000000000000000000000000000"/>
</executionStack>
<inputbuf>
(@P1 numeric(32,16),@P2 int,@P3 bigint,@P4 nvarchar(5),@P5 nvarchar(36),@P6 int,@P7 numeric(32,@P8 bigint,@P9 int)UPDATE PRODCALCTRANS SET REALCOSTAMOUNT=@P1,RECVERSION=@P2 WHERE (((((((PARTITION=@P3) AND (DATAAREAID=@P4)) AND (COLLECTREFPRODID=@P5)) AND (COLLECTREFLEVEL=@P6)) AND (LINENUM=@P7)) AND (RECID=@P8)) AND (RECVERSION=@P9)) </inputbuf>
</process>
</blocked-process>
<blocking-process>
<process/>
</blocking-process>
</blocked-process-report>
有没有人对这些报道有解释?阻止查询的是什么? 如果我在锁定早已消失后查看报告,有没有办法找出发生了什么? 添加可能有用的一件事是这些查询是通过sp_cursorprepare和sp_cursorexecute运行的 到目前为止,我还没有能够重现它,它似乎是随机发生的,但经常发生. 它发生在几个(不同构建版本)和几个表/查询的实例上,所有这些都与Dynamics AX相关. 当时在后台没有发生索引或其他数据库维护作业. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
