标签: memory

Windows 2008R2 上 SQL 2008R2 的推荐页面文件大小

这篇 Microsoft 文章 -如何确定 64 位版本的 Windows Server 2008 和/或 Windows 2008 R2 的适当页面文件大小提供了计算 64 位 Windows 2008 和 Windows 2008R2 的页面文件大小的指南。这无疑适用于通用服务器。我想知道在 Windows 2008/R2 64 位上运行的 SQL Server 2008R2 的指导是什么?

我假设我们希望内存中的数据尽可能少地访问页面文件,否则 SQL 可能会访问磁盘两次以获取数据。SQL Server 甚至允许内存中的数据访问页面文件吗?我已经通过SQL Server 2008 R2 联机丛书寻找指导,但还没有发现任何关于页面文件使用的提及。

这是一个潜在的使用场景:给定一个具有 64GB RAM 的物理服务器,整个 64GB RAM 是否需要一个页面文件?我们应该为 96GB 的页面文件做好准备吗?对于单个文件来说,这似乎有点过分。我知道传统观点是,Windows 将页面文件与内存结合起来,以尝试在 RAM 上更轻松地交换应用程序,但这是真的吗?小于 64GB 的页面文件会影响性能吗?

sql-server-2008 sql-server windows memory

25
推荐指数
2
解决办法
5万
查看次数

如何在不转储所有数据库的情况下缩小 innodb 文件 ibdata1?

InnoDB 将所有表存储在一个大文件中ibdata1

删除大表后,无论表有多大,文件都会保持其大小。如何缩小该文件而不必转储并重新导入整个数据库(总共有数百 GB)?

我认为原因是因为您仍然可以回滚下降。就我而言,我不需要。

mysql innodb memory disk-space

24
推荐指数
2
解决办法
5万
查看次数

为什么 SQL Server 2012 Express 在我的服务器上使用 9.5GB 的 RAM?

我正在构建一个应用程序,我计划在其中嵌入 SQL Server 2012 Express 作为主数据存储。在我的开发机器(具有 3GB RAM 的 Win7-32​​)上进行测试时,我从未观察sqlservr.exe到使用超过 1GB RAM的过程,正如我对已发布的 SQL Server Express 版硬件扩展限制所期望的那样。

然后我将我的应用程序移到一台服务器级机器(Win Server 2008R2 64 位,16GB RAM)来评估它的性能,并惊讶地发现该sqlservr.exe过程迅速扩展到大约 9.5GB 的 RAM 并停留在那里。

我重新启动了几次,看看是否会有任何影响,但每次,该过程都迅速恢复到 ~9.5GB。现在我当然很高兴让 SQL Server Express 使用我的 RAM,但我想知道这是否是预期的行为,以便我不会依赖基于不正确的 RAM 使用的性能级别。

仅供参考,根据SELECT @@VERSION,我的服务器机器上的 SQL Server 版本是:

Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64) 
    Oct 19 2012 13:38:57 
    Copyright (c) Microsoft Corporation
    Express Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
Run Code Online (Sandbox Code Playgroud)

我的 9.5GB 号码来自任务管理器中的“私人工作集”号码。来自 …

sql-server memory sql-server-2012 sql-server-express

22
推荐指数
1
解决办法
2万
查看次数

CPU 利用率会影响外部 NUMA 访问的成本吗?

设想

假设我有一个带有 4 个套接字的 SQL Server,每个 NUMA 节点。每个插槽有 4 个物理内核。总共有 512 GB 的内存,因此每个 NUMA 节点有 128 GB 的 RAM。

密钥表被加载到第一个 NUMA 节点中。

假设我们从该表中读取了大量流量。如果拥有 NUMA 节点的插槽的所有物理内核的 CPU 利用率为 100%,这是否会对来自其他插槽的非本地 NUMA 访问成本产生负面影响?或者另一方面是非本地 NUMA 访问的成本与该套接字的繁忙程度无关?

我希望我的问题是有道理的。如果没有,请告诉我,我会尽力澄清。

背景

上周我们的生产服务器出现了数据库问题,我们处理的一些业务似乎比其他业务受到的影响更大。我们有一些逻辑读取的查询需要超过 1 分钟。我们查看了大约 60% 的整体 CPU 利用率。我们没有查看特定于套接字的 CPU 指标。I/O 指标是平均的。

sql-server memory numa

22
推荐指数
2
解决办法
1174
查看次数

操作员使用 tempdb 在溢出级别 2 的执行期间溢出数据

我正在努力通过警告Operator usedtempdb最大限度地减少查询计划的排序操作成本to spill data during execution with spill level 2

在溢出级别 1 的执行期间发现了几篇与溢出数据相关的帖子,但不是级别 2。级别 1 似乎是由过时的统计数据引起的,那么级别 2 呢?我找不到任何与level 2.

我发现这篇与排序警告相关的文章非常有趣:

永远不要忽略 SQL Server 中的排序警告

我的 SQL 服务器?

Microsoft SQL Server 2014 (SP2) (KB3171021) - 12.0.5000.0 (X64) 2016 年 6 月 17 日 19:14:09 版权所有 (c) Microsoft Corporation Enterprise Edition(64 位),Windows NT 6.3(内部版本 9600:)(管理程序)

我的硬件?

运行以下查询以查找硬件:

-- 来自 SQL Server 2012 的硬件信息

SELECT cpu_count AS [Logical CPU Count], hyperthread_ratio AS …
Run Code Online (Sandbox Code Playgroud)

performance sql-server memory execution-plan sort-operator query-performance

22
推荐指数
1
解决办法
2万
查看次数

有人使用 SUMA、跟踪标志 8048 或跟踪标志 8015 吗?

最近包含 SQL Server 启动跟踪标志 8048 以解决 SQL Server 2008 R2 系统中严重的自旋锁争用问题。

有兴趣听取其他人的意见,他们发现性能值由跟踪标志 8048(将查询内存授予策略从每个 NUMA 节点提升到每个核心)、跟踪标志 8015(SQL Server 忽略物理 NUMA)或 SUMA(交错足够统一的内存访问,某些 NUMA 机器上的 BIOS 选项)。

跟踪标志 8048

跟踪标志 8015

系统工作负载的详细信息、从出现问题的系统收集的指标以及在干预后从系统收集的指标。

跟踪标志 8048 是一个“修复”,但它是最好的修复吗?SQL Server 是否会因为跟踪标志 8015 而忽略物理 NUMA 已经完成了同样的事情?如何将 BIOS 设置为交错内存,让服务器使用 SMP 模拟 SUMA 行为而不是 NUMA 行为?

关于系统

  • 4 六核 Xeon E7540 @ 2.00GHz,超线程
  • 128 GB 内存
  • WS2008R2
  • MSSQL 2008 R2 SP2
  • 最大值 6

关于工作量

  • 由 2 个报告应用程序服务器驱动的 1000 份批处理计划/排队报告。
  • 3 种口味的批次:每天、每周、每月
  • 与 SQL Server 的所有报表应用程序服务器连接都作为单个服务帐户进行
  • 最大报告并发数 = 90

问题系统的主要发现

  • 从 …

performance sql-server memory sql-server-2008-r2 numa

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

规划缓存大小和保留内存

运行包含实际执行计划的查询时,根运算符 ( SELECT) 告诉我缓存计划大小为 32KB。

该连接的查询sys.dm_exec_cached_planssys.dm_os_memory_objects,看问题的计划,称该值pages_in_bytesmax_pages_in_bytes为32768(32KB),它匹配缓存计划的大小。

我不明白的是 中的值sys.dm_exec_cached_plans.size_in_bytes,即 49152 (48KB) 代表什么。我已经阅读了所有这些专栏的 BOL,特别是size_in_bytes其中说:

"缓存对象消耗的字节数。 "

我无法解决最后一点难题,无法理解它的真正含义。

我知道所有操作符(不是谈论用于排序和散列的额外内存授予)都需要一定数量的固定内存,以存储状态、进行计算等,这些内存与缓存中的优化计划一起存储,但在哪里?

所以,我的问题是:

  • 什么size_in_bytes意思
  • 为什么它的值高于“缓存计划大小”?
  • 所有运算符/迭代器的固定内存量在哪里保留,是“缓存计划大小”(在我的示例中为 32Kb),还是其他任何地方?

我知道它们是具有不同功能的不同 DMV,但它们是相关的。在编译(缓存)计划sys.dm_exec_cached_plans加入sys.dm_os_memory_objectsmemory_object_address列。我在这里发布问题的原因是我在寻求帮助,了解如何解释 DMV 及其专栏。

如果size_in_bytes是缓存计划大小,为什么SQL Server在实际执行计划中说另一个值?

新查询,新号码:

  • 实际计划
    • 缓存计划大小 16KB
    • 编译内存 96KB
  • DMV:
    • sys.dm_exec_cached_plans.size_in_bytes 24KB
    • sys.dm_os_memory_objects.pages_in_bytes, .max_pages_in_bytes 16KB。

另请注意,此查询不需要为排序和散列操作分配任何额外的内存。

Microsoft SQL Server 2012 - 11.0.5343.0 (X64)

sql-server memory dmv sql-server-2012 plan-cache

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

SQL Server 内存优化 tempdb 元数据内存使用量不断增长

问题

我们已启用 sp_configure 'tempdb metadata memory-optimized' = 1,现在 tempdb 元数据在我们的一台服务器上占用了 400 GB 以上,并且还在继续增长。内存使用量有所下降,但通常它的内存使用量会不断增加。我们已经有几次服务器实际上崩溃了,因为其他系统进程没有足够的内存来修改 tempdb,这导致整个服务器宕机。

我问的问题

如何防止 SQL Server 内存中优化的 tempdb 元数据不断增长并使我的服务器崩溃?如果有的话,我可以查看哪些其他信息来找到消耗如此多内存的内容?

有关问题的数据

sys.dm_os_memory_clerks

以下查询当前返回 438 GB。

SELECT SUM(domc.pages_kb / 1024.0 / 1024.0) AS pages_gb
FROM sys.dm_os_memory_clerks AS domc
WHERE domc.type LIKE 'MEMORYCLERK_XTP'
Run Code Online (Sandbox Code Playgroud)

sys.dm_db_xtp_memory_consumers

以下查询提供的数据是内存的最大使用量(290 GB)是 memory_consumer_id 为 113 - 'LOB Page Allocator'。它没有object_id 或xtp_object_id,所以我猜它是一个数据库范围的对象。

SELECT ddxmc.memory_consumer_id
     , ddxmc.memory_consumer_type_desc
     , ddxmc.memory_consumer_desc
     , ddxmc.object_id
     , ddxmc.xtp_object_id
     , ddxmc.used_bytes / 1024.0 / 1024.0 / 1024.0 AS used_gb
FROM sys.dm_db_xtp_memory_consumers AS ddxmc
ORDER BY ddxmc.allocated_bytes …
Run Code Online (Sandbox Code Playgroud)

sql-server memory tempdb memory-optimized-tables sql-server-2019

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

SQL Server 最大内存不限制 RAM 的使用

我希望您对此提出意见。我有一个 sql server 2008r2 Ent。埃德。64 位,16 核和 64GB RAM。截至 20111014,有一个 SQL Server 实例已完全修补。

最大内存设置为 60000MB。在线几天后根据任务管理器的可用内存量为 0。

如果我将最大内存更改为 53GB 以下,它会在几天后稳定下来并有一些可用内存。

根据任务管理器分配内存的是sql进程。我如何接受问题的真正含义?不用说,我已经做了很多测试,但还没有按照我的喜好解决这个问题。哦,当可用内存降至 0 空闲时,我们不会出现典型的内存饥饿滞后。

更新 1:

受到本页https://dba.stackexchange.com/a/7062/2744上另一个与 RAM 相关的 Q/A 的启发。我使用这两个来查看 RAM 的用途。

SELECT TOP ( 10 )
        [type] AS [Memory Clerk Type] ,
        SUM(single_pages_kb) AS [SPA Mem, Kb]
FROM    sys.dm_os_memory_clerks
GROUP BY [type]
ORDER BY SUM(single_pages_kb) DESC
OPTION  ( RECOMPILE ) ;

SELECT  DB_NAME(database_id) AS [Database Name] ,
        COUNT(*) * 8 / 1024.0 AS [Cached Size (MB)]
FROM    sys.dm_os_buffer_descriptors …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 memory

18
推荐指数
2
解决办法
2万
查看次数

MongoDB 在内存不足时终止

我有以下配置:

  • 一台运行三个 docker 容器的主机:
    • MongoDB
    • Redis
    • 使用前两个容器存储数据的程序

Redis 和 MongoDB 都用于存储海量数据。我知道 Redis 需要将所有数据保存在 RAM 中,我对此没有意见。不幸的是,发生的情况是 mongo 开始占用大量 RAM,一旦主机 RAM 已满(我们在这里谈论的是 32GB),mongo 或 Redis 就会崩溃。

我已经阅读了以下有关此问题的先前问题:

  1. 限制 MongoDB RAM 使用:显然大部分 RAM 已被 WiredTiger 缓存占用
  2. MongoDB 限制内存:这里显然问题是日志数据
  3. 限制 MongoDB 中的 RAM 内存使用:这里他们建议限制 mongo 的内存,以便它使用较少的内存来缓存/日志/数据
  4. MongoDB 使用太多内存:这里他们说它是 WiredTiger 缓存系统,它倾向于使用尽可能多的 RAM 来提供更快的访问。他们还表示it's completely okay to limit the WiredTiger cache size, since it handles I/O operations pretty efficiently
  5. 有没有限制mongodb内存使用的选项?: 再次缓存,他们还添加MongoDB uses the LRU (Least Recently Used) cache algorithm …

mongodb memory limits docker

17
推荐指数
2
解决办法
2万
查看次数