标签: memory

如何在DMV中查询SQL Server内存管理器性能计数器?

是否有任何系统目录视图或 DMV 可用于从 SQL Server:Memory Manager 查询(例如在 SSMS 中)以下性能计数器?

Free Memory (KB)
Target Server Memory
Total Server Memory
Maximum Workspace Memory (KB)
Database Cache Memory (KB)
Granted Workspace Memory (KB)
Lock Memory (KB)
Log Pool Memory (KB)
Optimizer Memory (KB)
Connection Memory (KB)
SQL Cache Memory (KB)
Reserved Server Memory (KB)
Stolen Server Memory (KB)
Run Code Online (Sandbox Code Playgroud)

memory dmv sql-server-2017 performance-counters memory-manager

1
推荐指数
1
解决办法
536
查看次数

为什么即使统计数据正确也会发生 TempDB 溢出?

我阅读了Brent Ozar 发表的一篇很棒的文章,并提出了一些与内存授予相关的问题。我无法在他文章的评论部分回答我的问题,所以我想从这里得到任何帮助。

  1. 问题:有多少数据溢出到磁盘中? 400 MB还是60 MB (7643KB*8)?

他在文章中指出:

而且无论我更新统计信息多少次,我仍然会得到大约400MB 的磁盘溢出。

我在这里有点困惑(

在此处输入图片说明 在此处输入图片说明

  1. 问题:如果估计一切正常,统计数据是最新的,盒子有足够的内存,并且当时没有查询在运行,那么为什么会发生溢出到磁盘?

查看估计的行数与实际的行数。它们是相同的。统计数据很好。

我也没有使用小型服务器:我的虚拟机有 32GB 的 RAM,我已将其中的 28GB 分配给 SQL Server。没有其他查询同时运行——这只是一个孤独的查询,溢出到磁盘......

在此处输入图片说明

memory statistics tempdb sql-server-2014 memory-grant

1
推荐指数
1
解决办法
58
查看次数

即使 SQL Server 无法为查询授予请求的内存,查询是否仍然运行?

我今天正在考虑类似的事情,但找不到这条信息。

当 SQL Server 请求内存而操作系统无法提供内存时,我们会得到RESOURCE_SEMAPHORE等待类型。

但我找不到类似的信息:

  1. 假设查询要求 3GB。但只能提供2,查询是否仍然运行缓慢,或者一直在那里等待?

  2. RESOURCE_SEMAPHORE意味着查询处于“停止”状态只是等待内存?

  3. 待处理的内存授予应该始终为 0,对吗?这意味着查询正在请求多少内存但仍在等待,对吧?

我正在阅读Microsoft 的《内存授予:神秘的 SQL Server 内存消费者与许多名字》,但它没有解释这一点,它只是解释了什么是内存授予。

sql-server memory memory-grant

1
推荐指数
1
解决办法
329
查看次数

SQL Server 2016 的内存利用率

我在 Windows Server 上运行 SQL Server 2016 企业版,内存为 128 GB。在安装过程中,我为 SQL 服务器分配了 124 GB,因为该服务器仅专用于 SQL,其余的留给操作系统。

现在,当 DML/DDL 查询运行或任何维护计划运行时,每个任务管理器的内存消耗飙升至 97%。但。PLE 保持良好状态(即 > 300 秒)并且未观察到性能问题。一旦作业和查询完成,SQL 在相当长一段时间内不会释放内存,我必须进行内存上限或等待一整天才能释放内存。

除了内存上限之外,还有什么方法可以让 SQL Server 释放内存以及为什么 SQL 无法在所有作业完成后立即释放内存。

sql-server memory sql-server-2016 enterprise-edition performance-tuning

1
推荐指数
1
解决办法
1477
查看次数

为什么我的 SQL 服务器使用了大约 4 GB 的内存?

我注意到我的 SQL 服务器经常会占用 8GB 内存的 50%。这通常发生在我运行完一些 SQL 查询之后,而不是在它们运行时发生。最常见的查询是生成数百万行随机数据。在我使用的查询中

BEGIN TRAN
  ....
COMMIT TRAN
Run Code Online (Sandbox Code Playgroud)

我猜这可能是原因,但我对 SQL 的了解还不够,无法找出问题所在。

sql-server memory

0
推荐指数
2
解决办法
207
查看次数

SQL Server 2014 在启动时使用高内存

SQL Server 2014即使它处于空闲状态并且没有运行查询,该进程也在使用高内存。重新启动服务后,它再次发生,一段时间后内存使用量增加到 2.2GB。

过程

主人是Windows Server 2012

为什么?我怎样才能找到问题?

sql-server memory sql-server-2014

0
推荐指数
1
解决办法
838
查看次数

页面预期寿命突然下降

查看性能数据,我意识到在 VMWare 上运行的 Sql Server 2016 SP1 上的页面预期寿命突然下降,消耗 58982 MB 的 64 GB RAM。PLE 的先前值约为 133,000,突然下降到 7,300 秒。

在此处输入图片说明

看起来候选人只有一个查询会导致这种情况。我上传了执行计划

该查询在早上很早就运行,因此看起来系统上几乎没有其他活动。它需要 01:27 m:s 运行时间并导致 600,000 次读取。

为什么这个查询会导致 PLE 的下降?

下降的后果是什么?

sql-server memory sql-server-2016 page-life-expectancy

0
推荐指数
1
解决办法
5485
查看次数

缓冲池到底有多重要?

我一直在对新的(虚拟)服务器进行一些测试,以替换现有的生产服务器。我们怀疑当前的生产服务器规格过高,因此正在从低水平调整新服务器的虚拟组件(RAM、CPU 等),直到性能适合处理当前的工作负载。

虽然认识到新服务器处理现有服务器工作负载的能力的真正测试是针对新服务器测试该工作负载,但出于兴趣,我对现有服务器和新服务器进行了一些简单的、任意的测试:

  • 恢复数据库-读取速度
  • 备份数据库-写入速度
  • 大型数据库上的 DBCC CHECKDB - 花费的时间

(两台服务器上使用相同的数据库备份,以使上述所有测试保持一致)

以上所有内容都支持新服务器(更快的读写速度、更快的 CHECKDB)

我做的最后一个基本测试是测试执行一个简单的操作所需的时间SELECT *在冷缓存和热缓存上最大的表之一上执行简单操作所需的时间,以进一步了解读取速度。

测试代码如下,我在两台服务器上运行

USE StackOverflow

SET STATISTICS IO, TIME ON

CHECKPOINT

DBCC DROPCLEANBUFFERS

SELECT * FROM Users  /* cold cache run */
SELECT * FROM Users  /* warm cache run */
Run Code Online (Sandbox Code Playgroud)

统计IO如下:

SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 12 ms.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

 SQL Server Execution Times:
   CPU time = …
Run Code Online (Sandbox Code Playgroud)

performance sql-server memory buffer-pool sql-server-2017

0
推荐指数
1
解决办法
565
查看次数

如何衡量sql server的内存需求?

我有一个带有 200GB RAM 的生产 SQL 服务器。

其中 150GB 分配给 sql server(通过在 sql server 属性中设置最大内存设置)

其余的由 ssis、操作系统、防病毒、应用程序使用。

我想测试 150GB 内存对于 sql server 是否足够,因为大约有 20 个数据库,数据文件大小从 5GB 到 500GB。如何捕获内存使用信息?

sql-server memory

0
推荐指数
1
解决办法
1060
查看次数

如何检查 SQL Server 现在是否内存或 CPU 资源不足?

我最近注意到 SQL Server 错误日志中的一条错误消息显示“查询处理器耗尽了内部资源,无法生成查询计划”。我怀疑我的服务器可能内存或 CPU 资源不足。但是,我不确定如何确认这一点。

我知道 sysprocesses 和 sp_whoisactive 命令,但我不确定它们是否可以告诉我我的服务器目前是否耗尽了资源。

有人可以为我提供一些关于如何检查我的 SQL Server 当前是否内存或 CPU 资源不足的指导吗?任何帮助,将不胜感激。

performance sql-server memory cpu

0
推荐指数
1
解决办法
569
查看次数

为什么这个查询需要超过 1.3TB 的内存,它应该没有内存授权?

SQL Server 版本是 2014 Developer SP1。跟踪标志272, 610, 1118, 1206, 1222, 8048, 9481是全局打开的。

我们不得不打开标志 9481,因为新的基数估计器严重影响了许多查询计划。查询没有排序、散列或并行。当我运行查询时,几分钟内没有返回结果。

在执行期间,sys.dm_exec_query_memory_grants dmv 还报告了超过 1.3TB 的理想内存。(WhyGiganticDesiredMemory.queryanalysis)

我运行了一个非常相似的查询。在 ActualPlan.queryanalysis 中所需的内存为 124GB,授予为 44GB,而在 ActualPlanWithLessMemoryGrant.queryanalysis 中所需的内存仅为 10MB。

它们之间的唯一区别是从后者中删除的嵌套循环下方的最左侧索引查找(我在连接条件中添加了一个无效过滤器 1 = 0 以从计划中删除该表)。

我的查询如下所示:

SELECT  CAST('C' AS CHAR(1)) AS [Action]
      , f.LoadId
      , u.UnvPclId
      , p.*    --- [about 480 columns, Daniel Hutmacher's edit]
FROM    [tExtract].[ExtractCounty] f
INNER JOIN [tControl].[VersionControl] vc ON Id = 1
INNER JOIN [tTax].[Property] pk WITH ( NOLOCK, FORCESEEK ( UpdateVersion_CntyCd ( UpdateVersion ) ) ) …
Run Code Online (Sandbox Code Playgroud)

performance sql-server memory sql-server-2014 query-performance

-4
推荐指数
2
解决办法
510
查看次数