我在服务器中有一些数据库。此服务器有 16GB RAM,此系统仅用作数据库服务器。
在使用不同的数据库一段时间后,我发现大部分 RAM 空间(大约 14GB)都被使用了,如果我使用其他应用程序并再次工作,我将无法使用我的计算机并且它挂断了。
如何找出哪个数据库的 RAM 使用率更高,然后如何找出哪个查询使这些资源满了?
我在服务器中有一些数据库。此服务器有 16GB RAM,此系统仅用作数据库服务器。
在使用不同的数据库一段时间后,我发现大部分 RAM 空间(大约 14GB)都被使用了,如果我使用其他应用程序并再次工作,我将无法使用我的计算机并且它挂断了。
如何找出哪个数据库的 RAM 使用率更高,然后如何找出哪个查询使这些资源满了?
sys.dm_exec_query_stats 表(2005 年以后)中有一些有用的信息,可用于查找正在运行的查询在 IO、经过时间等方面最密集。
例如尝试运行这个(查看最近 25 个查询运行的详细信息):
SELECT DISTINCT TOP 25 t.TEXT AS query, s.*
FROM sys.dm_exec_query_stats s
CROSS APPLY sys.Dm_exec_sql_text(s.sql_handle) t
ORDER BY s.last_execution_time DESC
Sql Profiler 是一个漂亮的工具,用于分析数据库中的哪些查询。
set statistics time on
和
set statistics io on
和
set statistics profile on
当您发现一个您认为很慢的查询时,统计数据是一种分析特定查询的好方法。
你不知道哪些查询是最重的吗?你真的应该仔细检查你的代码,看看你运行了什么样的 for 循环、子查询或其他怪异的查询,并从你认为很重的地方出发。并在 Sql Server Management 中测试这些...