我非常喜欢 dbatools,所以我在我的测试 SQL Server 2019 服务器上进行了尝试Get-DbaDbMemoryUsage
(此处的文档)。具体来说,我运行了这个
Get-DbaDbMemoryUsage -SqlInstance [MyServer] -IncludeSystemDbs |
Select Database, PageType, PercentUsed |
Where PercentUsed -ne 0 |
Format-Table
该命令的目的是显示每个数据库中的页面类型使用了服务器 RAM 的百分比。
当我阅读结果时,我惊讶地发现我的服务器上 76% 的 RAM 使用量是 tempdb 中的 TEXT_MIX_PAGE。这说明什么?无论如何,在我运行此命令时,服务器非常安静。
它将向您显示每个数据库的缓冲池中的页面类型(这与您自己查询没有什么不同)。虽然缓冲池通常是实例的最大内存消耗者,但它并不是唯一的消耗者,而且缓冲池的内容根据需要的项目而不断变化。
sys.dm_os_buffer_descriptors
查询 DMV(这是 dbatools 项目所做的所有事情)将为您及时提供我上面所解释的内容的快照,但是这些数据是否可操作或有任何帮助?
这取决于您试图回答什么问题。如果问题是关于缓冲池的使用情况,那么我想它可以回答这个问题,尽管我不知道这个问题需要问多少次。
如果问题是关于数据库的用途,那么这将根据工作负载、数据库的客户和需求而变化。它很可能在某一天对某些表进行重击,回答有关邮寄地址的问题,而第二天则在生成有关该小时销售商品数量的报告时做一些完全不同的事情。我不明白页面类型的类型或数量在这种情况下有什么帮助。
还有更多问题可以提出,但我想不出真正值得收集这些数据的问题。此外,如果您对数据库中数据布局的构成感兴趣,还有其他基于存储引擎的 DMV 可能更有用,例如查看 LOB 数据使用情况。怎么这样更有帮助呢?我不知道,取决于问题。识别需要重构的数据对象可能会有所帮助,但这是一个延伸。