活动合约
查询期望的字段
| 字段 | 类型 | 为什么存在 |
|---|---|---|
| timestamp_utc | Timestamp | 当观察到锁等待时。 |
| database_name | Utf8 | 批准的逻辑数据库名称。 |
| blocked_query_fingerprint | Utf8 | 被阻止的应用程序操作的标准化标签。 |
| blocking_query_fingerprint | Utf8 | 持有锁的操作的标准化标签。 |
| lock_type | Utf8 | 受控锁类别。 |
| wait_ms | Float64 | 观察到的锁定等待时间(以毫秒为单位)。 |
| resolved | Boolean | 等待是否结束而不保持阻塞。 |
| deadlock_detected | Boolean | 数据库是否报告死锁结果。 |
| transaction_id | Utf8 | 应用程序安全的事务标识符。 |
| environment | Utf8 | 部署环境。 |
DataFusion SQL
复制查询
sql
SELECT
database_name,
blocked_query_fingerprint,
blocking_query_fingerprint,
COUNT(*) AS lock_wait_incidents,
COUNT(DISTINCT transaction_id) AS affected_transactions,
AVG(wait_ms) AS average_wait_ms,
MAX(wait_ms) AS maximum_wait_ms,
SUM(CASE WHEN NOT resolved THEN 1 ELSE 0 END) AS unresolved_incidents,
SUM(CASE WHEN deadlock_detected THEN 1 ELSE 0 END) AS deadlocks
FROM database_lock_wait_events
WHERE timestamp_utc >= now() - INTERVAL '7 days'
AND environment = 'production'
GROUP BY
database_name,
blocked_query_fingerprint,
blocking_query_fingerprint
HAVING COUNT(*) >= 3
ORDER BY deadlocks DESC, maximum_wait_ms DESC;此只读查询是针对空类型表计划和执行的 阿帕奇 DataFusion 45.2.0。确定性样本输出是综合的并单独审查;根据您自己的数据验证字段类型、阈值和业务定义。 阅读测试方法。
查询结果
阻塞操作的最大锁等待时间
订单更新显示更长的等待时间、未解决的事件和检测到的死锁。
UPDATE orders SET status = ?
3,200 ms
comparison 2 ms
REFRESH customer_summary
700 ms
comparison 0 ms
| database_name | blocked_query_fingerprint | blocking_query_fingerprint | lock_wait_incidents | affected_transactions | average_wait_ms | maximum_wait_ms | unresolved_incidents | deadlocks |
|---|---|---|---|---|---|---|---|---|
| app_production | UPDATE orders SET status = ? | SELECT order FOR UPDATE | 8 | 8 | 1,600 | 3,200 | 2 | 2 |
| analytics_production | REFRESH customer_summary | INSERT customer_event | 6 | 6 | 500 | 700 | 0 | 0 |
综合示例输出。在将其用于操作决策之前,针对您自己的事件架构和阈值运行查询。
SQL 是如何工作的
- 1阻塞和阻塞指纹使争用关系保持可见,而无需收集参数化 SQL。
- 2不同的事务计数可以保护结果免受同一等待的重复样本的影响。
- 3死锁和未解决的事件优先于平均等待时间较长的情况。
需要决定的边缘情况
- 轮询可以针对一个事件发出多个观察结果。保留事务或事件标识符。
- 数据库锁定视图可能会暴露敏感的语句文本;在发出事件之前在收集时进行标准化。
- 预期的维护锁应带有批准的工作负载类别,以便可以对其进行分段。
推荐仪表板
- 酒吧:maximum_wait_ms by blocked_query_fingerprint
- 表:阻止者和被阻止的指纹对
- 统计:未解决的事件和僵局
让查询示例发挥作用
相关埋点和指南
继续分析
在真实事件中运行它
创建表,调整字段并保存结果
免费开始,发送结构化事件,并将查询结果用作图表、共享仪表板小部件或警报输入。