我有一个存储过程,它将三个大表连接在一起(每个大约有 2000 万条记录)并将记录加载到临时表中。然后将临时表中的数据合并到一个包含大约 6000 万条记录的现有表中。
服务器脱机并显示以下错误消息:
由于内存压力,AppDomain 2 (SSISDB.dbo.[runtime].1] 被标记为卸载。
使服务器重新联机后,我重新启动了 SQL 服务以清除可能一直存在的所有进程。再次开始工作,它毫无问题地完成了。
我正在运行具有 128GB RAM 的 SQL Server 2019。64 位虚拟服务器上的最大服务器内存为 117964MB。有人在任务管理器中告诉我内存使用率为 94%,这可能是问题所在。但是 SQL 不会占用所有可用内存并保留它吗?所以这似乎是按预期运行的。
sp_WhoIsActive揭示了一些状态为 'Suspended' 和 'Awaiting_Command' 的查询,但我认为这些没有太大影响。128GB 的内存似乎足够了,但我想这与它被要求做的工作有关。知道如何排除故障或防止再次发生吗?
服务器的数据驱动器约为1.6TB。连接中的两个较大的数据库是 10GB 的 1900 万行和 13GB 的 2000 万行。那些进入一个临时表,然后MERGE进入一个 26GB 的表,有 5300 万行。
请求的内存授予为 45GB,实际为 30GB。这份工作在正常工作时间之外运行,所以应该没有竞争查询,但我不能 100% 确认有人没有工作到很晚。
我确实注意到它也必须做 a CONVERT_IMPLICIT。这对所需的内存有重大影响吗?
查询计划链接:https : //www.brentozar.com/pastetheplan/?id=SyXaty7xK