sql-server - 在 SQL Server 的表中查找查询次数最多的项目

标签 sql-server

我们有一个 SQL Server 数据库,其中包含由代码组成的表。有点像

Ticker | description
-------+-------------
USDHY  | High yield 
USDIG  | Investment grade  ...

现在我们有很多其他表格,其中包含与这些代码(时间序列)对应的数据。我们希望能够创建一个报告,该报告可以向我们展示哪些代码被更多地查询,哪些根本没有被查询。这可以让我们有选择地为更频繁使用的代码运行一些程序,并定期忽略其他程序。

有没有什么方法可以在 SQL 中实现这一点,任何可以在一段时间内生成此统计信息的报告,比如 n 个月。

非常感谢任何帮助

最佳答案

目前似乎没有答案。正如我提到的,一种可能性是使用如下所示的扩展事件:

CREATE EVENT SESSION [TestTableSelectLog]
ON SERVER
ADD EVENT sqlserver.sp_statement_completed (
WHERE [statement] LIKE '%SELECT%TestTable%' --Capure all selects from TestTable
  AND [statement] NOT LIKE '%XEStore%' --filter extended event queries
  AND [statement] NOT LIKE '%fn_xe_file_target_read_file%'),
ADD EVENT sqlserver.sql_statement_completed (
WHERE [statement] LIKE '%SELECT%TestTable%'
  AND [statement] NOT LIKE '%XEStore%'
  AND [statement] NOT LIKE '%fn_xe_file_target_read_file%')
ADD TARGET package0.event_file (SET FILENAME=N'C:\Temp\TestTableSelectLog.xel');--log to file

ALTER EVENT SESSION [TestTableSelectLog] ON SERVER STATE=START;--start capture

然后您可以使用 sys.fn_xe_file_target_read_file 从文件中选择:

CREATE TABLE TestTable
(
    Ticker varchar(10),
    [Description] nvarchar(100)
)

SELECT * FROM TestTable

SELECT *, CAST(event_data AS XML) AS 'event_data_XML'  
FROM sys.fn_xe_file_target_read_file('C:\Temp\TestTableSelectLog*.xel', NULL, NULL, NULL)

应捕获 SELECT 语句。

也可以从 GUI(Management Studio 中的管理/扩展事件/ session )配置扩展事件。

关于sql-server - 在 SQL Server 的表中查找查询次数最多的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38795285/

相关文章:

mysql - 如何使用 INSERT INTO OPENQUERY SELECT 将日期时间从 mssql 插入 mysql

sql-server - 具有相同插件和相同数据类型的 SQL Server 表的连接问题

sql - 为什么 int 列值在传递为空时默认为 '0'?

sql-server - 运行更新查询时出现 "Subquery returned more than 1 value"错误

java - 在类路径资源 [spring/database/DataSource.xml] 中定义了名称为 'dataSource' 的无效 bean 定义

Java 组合框未从 SQL 填充

mysql - SQL 检查某个值是否存在于任何列中并返回另一列列出的值

sql-server - 在 SQL 层次结构数据中移动父 AND 子项

sql - 在一列中查找 n 个最大值

sql - 我可以计算名称在第一个查询中出现的次数的子查询