Sar*_*ren 5 sql-server memory sql-server-2012 locking
所以我两天来一直在努力解决这个问题,但我找不到解决方案。我正在运行一个脚本来暂存大量数据。这个脚本需要大约 3500 万个锁才能完成;这意味着需要 3.36GB 的内存可用于锁定。我在配置的值中将锁的数量设置为 3700 万,但是在重新启动后,运行值只允许 16,695,296 个锁。
这相当于大约 14% 的可用内存。由于 SQL Server 2012 可以将 40% 的可用内存用于锁定,我应该有足够的空间,但我没有。我的问题是:为什么 SQL Server 不能利用额外的 26% 的可用锁内存?我读过的一切都说它应该能够。
此外,我确实尝试在动态上运行锁,但由于相同的原因和相同的错误代码也失败了:错误 1204,实例无法获得锁资源。我知道这是服务器配置而不是脚本,因为我运行了完全相同的脚本,在旧服务器(SQL Server 2008)上使用完全相同的数据集没有问题。
向数据库管理员求助;帮助我哦伟大的人!
编辑:这是故障转移群集上的 VM,该 VM 分配了 16 GB 内存。我为 SQL Server 提供了 12GB 的空间,并为主机操作系统留下了 4GB 的空间。
是否启用了任何跟踪标志或对 SQL Server 的启动参数进行了任何调整,请检查一下。请查看下面的 Microsoft 支持文章
http://support.microsoft.com/kb/2199576/en-us 将最大锁定值保留为默认值
EXEC sp_configure 'locks', 0 (我猜你已经尝试过这个选项了)
现在,如果您再次遇到此问题,最好的解决方法是减少传输的行数。每个锁都有与之关联的内存,因此如果存在锁争用,我相信它在某种程度上与 SQL Server 缓冲池内存有关。您是否运行了 DBCC MEMORYSTATUS 并检查了值
OBJECTSTORE_LOCK_MANAGER(总计)KB
请告诉我们单页和多页分配器对于上述职员的价值是什么