typ*_*ger 12 process memory sql-server-2008-r2
我们有一台专用的 SQL Server 2008 R2 机器,它遇到了一些奇怪的内存问题。机器本身有很多资源,包括两个四核处理器、16GB 内存和 64 位 Windows Server 2008 R2 Enterprise(它是戴尔 PowerEdge 2950) .
奇怪的问题是系统报告 82% 的内存在使用中,而 sqlservr.exe 仅报告 155mb 正在使用中。我怀疑 SQL Server 是问题的原因是,如果我重新启动 sqlservr.exe 进程,内存消耗会在一段时间内恢复正常。
有没有人对我如何开始追踪这个问题有任何想法?
谢谢,杰森
Mar*_*ith 15
如果运行该服务的帐户具有内存特权中的锁定页面(编辑:根据 Mark Rasmussen 的评论/链接),您将无法从任务管理器中获得内存使用情况的真实情况。要确定正在使用多少内存,您可以查看:
我不记得是否有 DMV 或它的组合可以为您提供总内存分配,但以下将显示其中的大部分。
SELECT TOP(10) [type] AS [Memory Clerk Type], SUM(single_pages_kb) AS [SPA Mem, Kb]
FROM sys.dm_os_memory_clerks
GROUP BY [type]
ORDER BY SUM(single_pages_kb) DESC OPTION (RECOMPILE);
SELECT DB_NAME(database_id) AS [Database Name],
COUNT(*) * 8/1024.0 AS [Cached Size (MB)]
FROM sys.dm_os_buffer_descriptors
WHERE database_id > 4 -- system databases
AND database_id <> 32767 -- ResourceDB
GROUP BY DB_NAME(database_id)
ORDER BY [Cached Size (MB)] DESC OPTION (RECOMPILE);
Run Code Online (Sandbox Code Playgroud)
第二个是最有趣的,通常是数据库的缓冲池分配。这是将使用狮子份额的地方,了解哪些数据库是最大的消费者会很有用。
最近有一篇来自我们自己的 Brent Ozar 的文章处理了这种情况,当任务管理器没有正确显示 SQLServer 及其附加服务消耗的内存时。您可以在此处找到它:系统管理员的 Microsoft SQL Server 内存指南。
引用:“为什么 SQLServer.exe 不使用大量内存?
当您远程桌面进入服务器并查看任务管理器时,sqlservr.exe 的 Mem Usage 总是显得古怪。这不是 SQL Server 的错。 任务管理器是一个肮脏、肮脏的骗子。 (我知道,这听起来像是 SQL 人在推卸责任,但请耐心等待。)在 64 位机器上,这个数字更准确一些,但在 32 位机器上,它只是完全偏离基础. 要真正准确地了解 SQL Server 使用了多少内存,您需要一个类似 Process Explorer 的工具,并且您需要识别 SQL Server 的所有进程。在我右侧显示的服务器中,有两个 SQL Server 实例(由 sqlservr.exe 显示),以及 SQL 代理、SQL 浏览器和 SQL Server 备份工具。经常看到 SQL Server Analysis Services、Integration Services 和 Reporting Services 也在同一台服务器上运行——所有这些都消耗内存。
那么SQL使用了多少内存呢?我会让这对你很容易。SQL Server 正在使用所有内存。时期。”
因此,我建议您尝试使用 Mark 的查询并使用更好的工具进行内存报告。或者只是相信 Perfmon 来报告内存,而不是任务管理器。
归档时间: |
|
查看次数: |
9850 次 |
最近记录: |