当前位置: 首页 > 面试题库 >

如何确定阻塞期间associatedObjectId代表什么对象?

程正阳
2023-03-14
问题内容

我从另一个团队那里得到了有关在SQL Server中进行阻止的报告。看结果

  Exec sp_who2

并从Glenn Berry的博客中查询

SELECT blocking.session_id AS blocking_session_id
       ,blocked.session_id AS blocked_session_id
       ,waitstats.wait_type AS blocking_resource
       ,waitstats.wait_duration_ms
       ,waitstats.resource_description
       ,blocked_cache.text AS blocked_text
       ,blocking_cache.text AS blocking_text
    FROM sys.dm_exec_connections AS blocking
    INNER JOIN sys.dm_exec_requests blocked
        ON blocking.session_id = blocked.blocking_session_id
    CROSS APPLY sys.dm_exec_sql_text(blocked.sql_handle) blocked_cache
    CROSS APPLY sys.dm_exec_sql_text(blocking.most_recent_sql_handle) blocking_cache
    INNER JOIN sys.dm_os_waiting_tasks waitstats
        ON waitstats.session_id = blocked.session_id

我希望不能发现任何被阻止的东西。多次运行,我开始发现有些东西出现了,但是下次运行查询时,blcoking消失了。

我创建了临时表 SELECT INTO

       ,blocking_cache.text AS blocking_text
    INTO #TempBlockingTable
    FROM sys.dm_exec_connections AS blocking

之后,将查询修改为INSERT INTO SELECT。现在,我可以运行查询多次,而不必担心结果会消失。

我一直运行查询大约10秒钟,直到最终得到一些结果。

 SELECT * FROM #TempBlockingTable

看着resource_description柱,从sys.dm_os_waiting_tasks我发现,数据显示在下面的格式。

 <type-specific-description> id=lock<lock-hex-address> mode=<mode> associatedObjectId=<associated-obj-id>

sys.dm_os_waiting_tasks http://technet.microsoft.com/zh-
cn/library/ms188743.aspx
上的Microsoft文档没有针对的定义associatedObjectId


问题答案:

答案实际上来自Aaron
Bertrand在Google网上论坛中找到的答案。要获得成功OBJECT_NAMEassociatedObjectId您需要运行以下查询

SELECT OBJECT_NAME([object_id])
    FROM sys.partitions
    WHERE partition_id = 456489945132196

此数字456489945132196表示associatedObjectIdfromresource_description列中from的值sys.dm_os_waiting_tasks



 类似资料:
  • 我正在用NetLogo制作一个模型,我很难理解一个时间步的实际含义。我正在研究的与狼羊捕食模型类似。该模型中的一个时间步代表什么?由于每个代理都有机会在每个时间步进行复制,我本以为这大约需要一年的时间。但是代理在每个时间步只移动一个步骤(一个补丁到另一个补丁),所以这似乎远远少于一年。我希望我的模型能最好地代表现实,所以我想准确地计算出每个时间步是什么。 抱歉,如果这是一个明显的问题,但这是我一直

  • 问题内容: 我有一个进程A,它在内存中包含一个带有一组记录(recordA,recordB等的表)的表。 现在,此过程可以启动许多影响记录的线程,有时我们可以有2个线程尝试访问同一记录- 必须拒绝这种情况。具体来说,如果一条记录被一个线程锁定,我希望另一个线程中止(我不想阻止或等待)。 目前,我正在执行以下操作: 但这引起了我的问题…因为Process1在执行操作时,如果Process2进入其中,

  • 在完成Coursera课程中关于反应式编程的一些练习和视频时,我看到了一个方法的定义,该方法可以“排序”未来的

  • 我正在尝试通过对象读取命令。为了检查输入语法,我使用<code>sc。hasNext()(对于缺少命令的情况)。它已经在很多情况下运行良好,但现在我看到了JavaAPI中描述的“MAY block and wait for Input”的情况。 方法何时阻塞,我如何控制它?有趣的是,在街区前的3个案例中,它工作得非常好。此外,JavaAPI还将描述为检查是否存在另一个Input的正确方法,从而使方

  • 线程实例的join()方法可用于将一个线程的执行开始“连接”到另一个线程的执行结束,这样一个线程在另一个线程结束之前不会开始运行。如果对线程实例调用join(),则当前运行的线程将阻塞,直到线程实例完成执行 但是如果我有多个线程并且当我在循环内部调用join时。所有线程并行运行。但是根据连接的概念,首先连接的线程应该完成,然后只有主线程才允许连接其他线程。 } 在上面的代码中,如果第一个线程被连接

  • 如另一个问题中所述,当使用Undertow时,所有处理都应该在专用的工作线程池中完成,如下所示: 我知道可用于显式地告诉Undertow在专用的线程池中调度请求以阻止请求。我们可以通过将包装在实例中来修改上面的示例,如下所示: 调用此方法将exchange置于阻塞模式,并创建一个BlockingHttpExchange对象来存储流。当交换处于阻塞模式时,输入流方法变得可用,除了阻塞和非阻塞模式之间