我有一台生产 SQL Server 2008 R2 数据库服务器,它为查询引擎分配了 8GB RAM(由数据库服务器的内存管理屏幕中的最小内存设置)。我注意到,每当我的几个 ETL 进程并行运行时,我就会经常遇到内存瓶颈,因为每个存储过程调用,无论多么简单,都会为前 3 个传入进程保留 2GB RAM,然后为每个后续查询保留 2GB 的一小部分。然而,前 3 个传入进程甚至没有使用一半的保留 RAM。我为服务器添加了另外 16GB RAM,并在内存管理屏幕中将所有新的额外 RAM 分配给数据库服务器。现在,前 5 个传入进程保留 4GB RAM,每个后续查询保留 4GB 的一小部分。这是怎么回事?
我没有看到任何可以更改的设置,所以我假设解决方案需要编码。我将测试将一些具有许多步骤的长时间运行的存储过程分离为较小的存储过程链,看看现在是否能减轻负担。任何建议都将不胜感激!
答案1
您的表有分区吗?分区表上有非对齐索引吗?这是一个盲目的尝试,但请尝试OPTION (MAXDOP 1)
对您的问题 ETL 查询使用查询提示。