是否可以细分每个数据库使用了多少计划缓存页面?Perfmon 似乎只有服务器的总数,但也许有更详细的 DMV?
此外,缓冲池 (sys.dm_os_buffer_descriptors) 是否包括计划缓存还是单独的?
我只是在那里遇到了一个问题,SQL Server 数据库的大小占用了相当多的 RAM。
一点背景:
该数据库适用于小型内容管理网站。CMS 是在 ASP 中自定义构建的,其中散布着一些未经优化的查询,但还不错。实际数据库在磁盘上占用 132MB。
现在回到 SQL Server。
在查看服务器选项时,我遇到了内存部分。我注意到它被设置为 2147483647MB,这让我想到将这个值设置为更小的值可能是一种解决问题的方法。
我将其设置为 500MB,这是一个很大的差异。
到目前为止,该网站运行良好,服务器上的内存不再出现问题。
我的问题:
我如何确定将其设置为的最佳值是多少?500MB 低吗?此服务器上将有另一个数据库。不过它会小得多,大约 50MB。
编辑(更多信息)
我应该补充一点,导致我寻找此内存设置的问题是 SQL Server 在需要时没有将内存释放回操作系统。我运行一个旧站点,需要即时编译页面(即没有 bin 文件夹),并且存在一些页面在需要时未编译的问题。服务器出现内存不足错误。
这个特定的服务器有 2GB 的 RAM。
或者换句话说…… DBMS 是否以某种方式绕过操作系统缓存管理器并直接访问内存,或者它让操作系统完成其工作,作为正常进程运行并使用虚拟内存的概念?
我有一个 400GB 的内存Postgres 9.3.4 DB在运行Fedora20,每个表都有一些索引。我已将共享缓冲区提高到 4GB(系统有 16GB 可用),在内核中设置 shm 并将 设为effective_cache_size12GB。work_mem是 60MB
然后我每秒对数据库运行数百个查询很长一段时间。我的整个系统(带操作系统)仅使用 3GB RAM 并且没有交换。
Postgres并没有真正使用它可能使用的 RAM,我宁愿最大化我的 RAM 并获得查询/索引性能(如果可能)。
我是否缺少一些配置方面的知识?
运行 SSIS 包时出现此错误...
分配 104857600 字节时缓冲区失败。系统报告31% 的内存负载。有 17179328512 字节的物理内存,其中 11714314240 字节空闲。有 2147352576 字节的虚拟内存,其中 406519808 字节空闲。分页文件有 19729465344 字节,其中 13419847680 字节空闲。
运行包的机器上的内存似乎没问题。31% 的内存负载被认为是高吗?这仅在迁移到较新的服务器后才开始发生。但是这个新服务器的内存容量增加了一倍。
没有添加新的 SSIS 包。SSIS 包存储在 SQL Server 2008R2 服务器上。它们是从另一台运行 SSIS 2008 的服务器调用的。
知道是什么原因造成的吗?
SSIS 包通过第 3 方应用程序执行。我们强制此应用程序以 32 位运行,因为在添加对 System.Data.dll 的引用后出现以下错误

如何强制 SSIS 包以 64 位运行?
我们有一个使用 SQL 的 SolarWinds Orion 网站,我们收到了许多关于该网站缓慢问题的报告。我在 SQL 框上运行 sp_Blitz,我看到这些错误:
检测到毒药等待:RESOURCE_SEMAPHORE 98:07:56:03 已记录此等待。这种等待通常表明致命的性能问题。
检测到毒药等待:RESOURCE_SEMAPHORE_QUERY_COMPILE 33:06:03:08 已记录此等待。这种等待通常表明致命的性能问题。
可用内存过多 SQL Server 的缓冲池中有 7GB 的可用内存,即 12GB。您会认为大量的空闲内存会很好,但请查看 URL 以获取更多信息。
服务器已配置 16GB 的 RAM,SQL 服务器配置为使用 13GB 的最大服务器内存,每个查询 1024KB。该服务器是否过度配置?我觉得这是内存配置错误,但任何帮助或见解将不胜感激。
在 SQL Server 2016 数据库服务器上,我几乎没有查询非常慢并且需要更多内存(查询未优化)。这使得整个数据库变慢,因为许多用户正在运行相同的查询。这导致其他查询等待。我CXCONSUMER等待(由于并行执行)和RESOURCE_SEMAPHORE.
所以这造成了内存压力(我相信这些缓慢的查询正在为其他查询造成内存争用,进而造成内存压力),我认为这导致我的计划缓存以固定的时间间隔清除。
我读到默认情况下Memory Grant %为 25%。我正在考虑增加这 25% 来为查询提供内存。我现在正在尝试暂时解决这个问题。
未优化的查询是 LINQ 查询,更改将需要团队一些时间。
所以请建议在资源调控器中增加Memory Grant %是否是一个好主意?
我总共有 128GB RAM,其中 75% (102 GB) 分配给 SQL Server。
我们有一个四节点可用性组,一个站点中有两个节点,另一个数据中心中有两个站点外节点。我注意到在每个 WAN 问题发生后,WAN 连接出现波动,并且异地节点不断断开连接并重新连接(使用 AOAG 仪表板中的 AOAG 运行状况),主服务器的内存被“HADR 日志块消息池”消耗
SELECT *
FROM sys.dm_os_memory_clerks
ORDER BY pages_kb DESC
Run Code Online (Sandbox Code Playgroud)
类型:OBJECTSTORE_SERVICE_BROKER
名称:HADR 日志块消息池
在最坏的情况下,当网络震荡数小时时,这个内存管理员最终会消耗超过 90% 的 SQL Server 内存,导致 SQL Server 停止运行(SQL 有 10GB 的内存“HADR Log Block Msg Pool”正在使用 9.8GB)。
有没有办法转储这个 HADR 日志块消息池?还是一开始就阻止它变得如此之大?到目前为止,我们唯一的解决方案是故障转移并重新启动机器。
没有错误,只是节点的日志断开连接并重新连接,以及重新连接后数据库重新硬化的日志。
随着越来越多的内存被“HADR 日志块消息池”占用,可用于其他所有内容的内存会下降,从而影响性能。通常这 10GB 的 RAM 适合这个 AOAG 组和使用。只有当 WAN 波动一段时间时,我们才会出现此问题。
我们可以在服务器上投入更多内存,但我认为这不会解决根本问题,它只会在严重损害性能之前为我们争取更多时间。
我同意网络是根本原因,但在问题解决并且 AOAG 恢复同步后,SQL 不会像大多数 SQL 内存管理员那样恢复/重新分配 RAM 给其他 SQL 内存管理员,这似乎很奇怪。
日志传送不起作用;这是一个事务性环境,我们需要近乎实时的,最好是实时的异地 DR。AOAG 小组 99% 的时间都在工作,并且几乎总是实时同步。我们正在尝试与网络团队合作以改善连接性,和/或可能使它只是断开连接而不是摆动。
系统信息
SQL 版本:SQL 2016 SP1 CU6 13.0.4457.0
操作系统版本:Windows 2012 R2 6.3.9600
服务器内存:12GB …
sql-server memory clustering availability-groups sql-server-2016
我在一台服务器上有两个实例。我在每个实例上配置了相同数量的最大内存。总共 36 个演出,我给了每个演出 17 个。为什么目标内存在一个实例上不断上升和下降?(从 17 移动到 12 或之间)但在其他情况下它固定在 17?此外,总服务器内存固定为 10 Gigs。
varchar(5)当我在查询中使用时INSERT,这意味着表中的属性将在内存中占用5 个字节?(假设一个可打印字符占用一个字节)?
memory ×10
sql-server ×5
postgresql ×2
clustering ×1
linux ×1
sp-blitz ×1
ssis ×1
storage ×1
varchar ×1
waits ×1