有没有办法检查谁执行查询?

Is there any way to check who execute query?

我在 Azure 上有数据库。每天在 Query Performance Insights 中,我都会在前 5 个 运行 长查询中得到相同的查询。这是SELECT Id FROM MyTable个查询。

我认为这可能是我的代码,所以我添加了 Include 以将 MyTable 中的记录包含到查询中(使用 EF,无延迟加载)。但这于事无补。

也检查了存储过程,但也没有运气(找不到任何可以使用 MyTable 的地方)。

我可以找到可以在我这边调用此 SELECT 查询的地方吗?


sys.query_store_plan我可以抓取query_plan,但这对我帮助不大。

根据 this page 看来您应该能够 运行 对 Azure 数据库进行跟踪。假设使用适当的过滤选项,它可能会帮助您了解查询的来源或至少在 运行s 时。 (免责声明:我没有亲身经历)

如果您想知道哪些对象可能正在使用 table,您可以查看 sys.sql_dependenciessys.sql_modules。前者更容易查询,但由于部署对象的顺序 and/or 使用动态 SQL 可能会遗漏依赖关系。后者在那个部门有更好的机会,但它有点 hack,可能会给出误报。

SELECT Object_Name(object_id) FROM sys.sql_dependencies WHERE referenced_major_id = Object_Id('<table name>')
SELECT Object_Name(object_id) FROM sys.sql_modules WHERE definition LIKE '%<table name>%'