我想分析数据库中一个大表的性能。它只有两种类型的操作。插入和读取。一旦输入数据,它永远不会更新。
我需要找出表格更新频率最低的时间(例如星期六下午 3 点到 6 点之间)。我还需要找出何时最不经常读取表格。
结构如下所示:
dbo.Table1
[Column1] [INT] IDENTITY(1,1) NOT NULL,
[Column2] [VARCHAR](50) NULL,
[Column3] [DATETIME] NULL CONSTRAINT
[Column4] [INT] NULL,
[column5] [VARCHAR](255) NULL,
[column6] [INT] NULL,
[column6] [VARCHAR](MAX) NULL,
[column7] [INT] NULL,
column1 上有聚集索引 1,column2 和 3 上有非聚集索引 2,包括 column1
我们使用:SQL Server 2012
SQL Server 不跟踪此信息。您必须
sys.dm_db_index_usage_stats
足够频繁地拍摄快照,以便可以绘制活动图表,并且您还需要考虑服务重启、索引重建等,这可能会从 DMV 中删除行并将活动设置回零(这可能看起来你的图表好像没有活动,但它确实意味着它已被重置)。这不是一项简单的任务。我认为你应该在你的问题中添加更多信息来解释你为什么需要这些信息,因为也许还有其他方法可以实现你的真正目标(知道何时不经常读取表格不是目标,这是你选择的路径你的目标)。
根据您的问题判断,将特定记录与从表读取/写入表的时间相关联并不是特别重要,只是整个表的聚合信息。正如 Aaron 所说,最简单且侵入性最小的方法是不断捕获 usage_stats DMV,但这并不准确,因为视图在许多情况下都会被重置。
如果您想准确查看读/写活动,我的建议是在每个插入/选择旁边使用一个存储过程。在任何一种情况下,您都维护一个单独的表,该表将每天分成特定的块,并根据您的偏好使用总的或单独的读写更新它。
如果你想记录单独的读/写请求,那么在每个插入/选择语句之后运行这样的东西:
如果你想记录读/写的总行数,那么像这样:
您显然可以收集以上所有内容的总和并使用一条语句: