我非常喜欢 dbatools,所以我在我的生产 SQL Server 2019 服务器上进行了尝试Get-DbaDbMemoryUsage
(此处的文档)。具体来说,我运行了这个
Get-DbaDbMemoryUsage -SqlInstance [MyProdServer] -IncludeSystemDbs |
Select Database, PageType, PercentUsed |
Where PercentUsed -ne 0 |
Format-Table
该命令的目的是显示每个数据库中的页面类型使用了服务器 RAM 的百分比。
等了几分钟后,我再次运行它。只有一个数据库返回相同的结果。其余的要么返回完全不同的数字,要么从结果集中消失。
鉴于此结果,通过监视每个数据库级别的 RAM 使用情况可以获得什么好处吗?或者是太吵了没用?
注意:如果这暗示我的服务器内存太少,请告诉我。
Get-DbaDbMemoryUsage
使用sys.dm_os_buffer_descriptors DMV。我认为这是一个有趣的 DMV,但我从未用它来诊断任何性能问题。我发现它是导致几个 SQL 实例性能问题的一个重要因素。我还听说其他人对此 DMV 有疑问。因此值得注意的是,如果您的服务器有大量内存,则该 DMV 运行起来可能会非常繁重。在我调查的情况下,服务器没有大量内存,但监控工具每大约 20 秒运行一次查询。
我认为sys.dm_os_memory_clerks DMV 对于监视和诊断某些与内存相关的性能问题更有用。例如USERSTORE_TOKENPERM 问题。它告诉你你的记忆在哪里被使用但被职员分解了。它无法告诉您哪些数据库正在使用缓冲池中的内存。为此,您也许可以专注于从磁盘读取的内容。例如sys.dm_io_virtual_file_stats
我可能会从查看内存中退一步,更多地关注等待作为起点。它可能是从高层次上看的最好的单一事物,尽管您还需要结合此来查看其他事物以获得更完整的了解。例如,如果 PAGEIOLATCH* 等待是最常见的等待类型之一,那么您可能会受益于额外的内存和/或需要将调整工作集中在减少物理 IO 上。
附言。听起来您可能会从监控工具中受益。我创建了免费且开源的DBA Dash 。也许值得一看。
希望这可以帮助。