小编SQL*_*ver的帖子

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
查看次数

MS SQL Server - 增加分配的内存

我的问题是,对于具有 TB 级 RAM 的实例,SQL Server 需要很长时间来增加它的内存使用量,同时我们会间歇性地等待 MEMORY_ALLOCATION_EXT,这会减慢我们的处理速度,直到 SQL Server 达到其最大内存。

我们有 SQL Server 2019 企业版的故障转移群集实例 (FCI),节点上有数 TB 的内存。在通常的用例中,我们只允许每个节点有 1 个 SQL Server 实例,因此我们将最大服务器内存设置为接近节点内存的 85%,但我们也将最小服务器内存设置得相对较低,以防 SQL Server 发生故障到另一个节点,并且需要在减少内存占用的情况下联机才能跛行。

  • 我很清楚,如果我将最小内存设置得更高,SQL Server 将一次消耗所有内存。原来 SQL Server 在启动时不会分配最小内存。
  • 我知道 SQL Server 会在需要时从操作系统动态消耗更多内存,最终它将达到最大服务器内存。
  • 我知道运行一个大查询或 DBCC checkdb 来提取大量数据将迫使 SQL Server 从操作系统消耗更多内存。

有没有其他方法可以强制 SQL Server 快速增加其内存使用量?

sql-server memory

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

动态端口被设置为不同的端口

在我们的 SQL Server 实例之一(如果您确实需要知道,则为 12.0.5571.0)上,我们使用多个 IP 地址进行连接。

  • 127.0.0.1 - 动态端口设置为 0。没有设置静态端口
  • 172.16.0.5 - SQL Server 所在服务器的 IP 地址。动态端口设置为 0(自动生成)。未分配静态端口
  • 172.16.0.6 - SQL Server 实例的 IP 地址(这样团队只需要点击 IP 地址而不知道他们真正在哪个服务器上)。未分配动态端口。静态端口 1433

我一直在玩 puppet 并且一直在搞乱注册表设置

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.InstanceNameX\MSSQLServer\SuperSocketNetLib\Tcp
Run Code Online (Sandbox Code Playgroud)

看看我是否可以使用 puppet 来自动配置 IP 地址和端口分配。我创建了一个名为“IP172016000006”的新注册表路径

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.InstanceNameX\MSSQLServer\SuperSocketNetLib\Tcp\IP172016000006
Run Code Online (Sandbox Code Playgroud)

我从中模板化

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.InstanceNameX\MSSQLServer\SuperSocketNetLib\Tcp\IP1
Run Code Online (Sandbox Code Playgroud)

但是现在每当我启动 SQL Server 实例时,127.0.0.1 和 172.16.0.5 的动态端口都不同。

比如我会停止SQL Server的实例,进入

  • “SQL Server 配置管理器”
    • 导航到实例的网络配置
      • tcp/ip
        • IP地址
          • 并为 IP 地址 127.0.0.1 和 172.16.0.5 设置“TCP 动态端口 = 0”。

重新启动 SQL Server 后,该实例将侦听 127.0.0.1:43340 和 172.16.0.5:43341(似乎总是比另一个端口多 1) …

sql-server network sql-server-2014

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