【问题标题】:Service Broker - Measure how long do messages persist in sys.transmission_queueService Broker - 测量消息在 sys.transmission_queue 中保留多长时间
【发布时间】:2018-04-10 11:45:52
【问题描述】:

我是否可以测量消息在 sys.transmission_queue 中保留多长时间,例如给定时期的平均数字?

【问题讨论】:

  • enqueue_time 不适合你吗?
  • 如果我有幸在队列中捕捉到它,只会给我时间将它添加到队列中,我需要准确报告一个小时队列的流量和平均时间消息在那里花费
  • 您可以通过查询与 SB 相关的性能计数器来拼凑一些东西;试试select * from sys.dm_os_performance_counters where object_name like '%broker statistics%'。我认为,平均时间没有现成的计数器。

标签: sql-server service-broker


【解决方案1】:

延长活动来救援!首先,定义以下会话:

CREATE EVENT SESSION [broker_transmission_queue] ON SERVER 
ADD EVENT sqlserver.broker_dialog_transmission_queue_dequeue,
ADD EVENT sqlserver.broker_dialog_transmission_queue_enqueue
ADD TARGET package0.ring_buffer
GO

在您的服务代理工作负载运行时让它运行一段时间。然后,运行以下查询:

WITH e AS (
    SELECT e.query('.') AS event
    FROM (
        select CAST(dxst.target_data AS XML) AS target_data
        FROM sys.dm_xe_session_targets AS dxst
        JOIN sys.dm_xe_sessions AS dxs
            ON dxst.event_session_address = dxs.address
        WHERE dxs.name = 'broker_transmission_queue'
            AND dxst.target_name = 'ring_buffer'
    ) AS t
    CROSS APPLY t.target_data.nodes('/RingBufferTarget/event') AS tgt(e)
), parsed AS (
    SELECT event.value('(event/data[@name="dialog_id"])[1]', 'uniqueidentifier') AS dialog_id, 
    event.value('(event/data[@name="message_sequence_number"])[1]', 'bigint') AS message_sequence_number,
    event.value('(event/@timestamp)[1]', 'datetime2') AS timestamp,
    event.value('(event/@name)[1]', 'sysname') AS event_name
    FROM e
)
SELECT b.timestamp, e.timestamp, DATEDIFF(MILLISECOND, b.timestamp, e.timestamp )
FROM parsed AS b
JOIN parsed AS e
    ON e.dialog_id = b.dialog_id
    AND e.message_sequence_number = b.message_sequence_number
    AND b.event_name = 'broker_dialog_transmission_queue_enqueue'
    AND e.event_name = 'broker_dialog_transmission_queue_dequeue'

本质上,我们在入队和出队事件之间匹配 (conversation_handle, sequence_number) 元组。一旦你完成了匹配,你就可以做任何你想做的数学运算(计数、平均值等)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-08
    • 1970-01-01
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    • 2016-11-06
    • 2013-10-01
    相关资源
    最近更新 更多