我有一个 SQL Server 2012 实例使用了更多的 RAM。
SQL Server 进程使用大约 22.5GB RAM:
该实例配置为最大使用 10GB:
这比预期的要多得多。(这将导致服务器崩溃,我们必须重新启动才能恢复)。
我用这个查询检查了内存使用情况(职员):
select type, name, pages_kb/1024.0/1024.0 "size Gb" from sys.dm_os_memory_clerks
order by pages_kb desc
Run Code Online (Sandbox Code Playgroud)
SQL Server 似乎只使用了大约 7GB RAM:
我知道它是 SQL Server 的旧版本(遗憾的是它没有修补到最新版本),但我无法找到有关 SQL Server 2012 SP2 中内存泄漏的任何明确文档。
我应该在哪里查找为什么 SQL Server 使用了大约 200% 的资源?
此实例上有一个链接服务器。很多使用 SQL 驱动程序(SQLNCLI 和 SQLNCLI11),但也有一些使用我以前从未见过的“HFSQL 的 PC SOFT OLE DB 提供程序”。
有什么方法可以“证明”这个驱动程序有问题吗?客户端可能不会同意基于假设更改设置,因此如果有任何方法(除了禁用之外)可以清楚地显示链接服务器正在使用多少 RAM,那将是无价的。
我正面临奇怪的行为。
以下是重现方法:在具有多个数据库的实例(在我的情况下为 SQL Server 2016)中,创建该存储过程(master在我的情况下):
create procedure dbo.Strange WITH EXECUTE AS owner
as
begin
exec sp_MSforeachdb 'select''?''';
end;
Run Code Online (Sandbox Code Playgroud)
然后使用以下命令调用该存储过程:
Exec master.dbo.Strange
Run Code Online (Sandbox Code Playgroud)
正如您将看到的,它只会返回某些数据库的数据,而不是全部(在我的例子中是 11 个中的 3 个)。
怎么了?