AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 84329
Accepted
RayofCommand
RayofCommand
Asked: 2014-12-05 08:16:00 +0800 CST2014-12-05 08:16:00 +0800 CST 2014-12-05 08:16:00 +0800 CST

SQL Server 2012 标准版使用超过 64GB 的内存,为什么以及如何?

  • 772

我将 SQL Server 2012 Standard 放在具有大约 98GB 内存的虚拟机 (VMWare) 上。

现在我检查了下面的查询 SQL Server 占用了多少内存。

Microsoft SQL Server 2012 - 11.0.5058.0 (X64) 

并且看到他已经吃掉了 81GB 的内存,并且最大内存设置为 ~90GB。

使用:

select (physical_memory_in_use_kb/1024)Memory_usedby_Sqlserver_MB,      
(locked_page_allocations_kb/1024 )Locked_pages_used_Sqlserver_MB, 
(total_virtual_address_space_kb/1024 ) VAS from sys. dm_os_process_memory

SQL Server 2012 Standard 应仅支持 64GB 内存。

为什么我的 SQL Server 吃的比他吃的多?还是信息不正确?

任何想法?这与使用虚拟内存的虚拟机有关吗?

我不知道VM Host上是否激活了气球驱动程序...

如果您需要更多信息,我会添加它。

sql-server-2012 memory
  • 3 3 个回答
  • 9813 Views

3 个回答

  • Voted
  1. Best Answer
    Aaron Bertrand
    2014-12-06T07:13:21+08:002014-12-06T07:13:21+08:00

    64GB 限制(2014 年为 128GB)仅适用于缓冲池。知识库文章“ SQL Server 2012 中的内存配置和大小调整注意事项”说:

    从 SQL Server 2012 开始,这些内存限制仅对数据库缓存(缓冲池)实施。

    而且众所周知, SQL Servermax server memory也不会控制所有的内存。官方文档正在更新中,以提供以下指导(此确切措辞由 Bob Ward 提供):

    服务器级max server memory设置控制 SQL Server 内存分配,包括缓冲池、编译内存、所有缓存、qe 内存授予、锁管理器内存和 clr 内存(基本上是任何“职员”,如 参考资料sys.dm_os_memory_clerks)。线程堆栈、内存堆、除 SQL Server 之外的链接服务器提供程序的内存,或由“非 SQL Server”DLL 分配的任何内存不受最大服务器内存控制。

    因此,即使在标准版中(甚至在快捷版中也超过 1GB),如果有大量分配给缓冲池以外的任何东西,您将看到sqlservr.exe使用超过64GB 的内存是非常可行的。

    如果您想阻止 SQL Server 使用超过 64GB 的内存,则需要设置max server memory为小于 64GB 的内存(您可能需要在此处进行试验以找到正确的组合,但要了解非缓冲池内存可能会波动,因此您可能仍然会看到超出许可限制和配置限制的内容)。

    或者,您可以保持原样,感谢您最多可以将 64GB 用于缓冲池,如果 64GB 限制是强制硬上限,则可能会减少缓冲池使用的其他内容。


    您可以看到内存是如何以各种方式分布的。在内存职员中,您可以使用:

    SELECT [type], mem_MB = pages_kb/1024
     FROM sys.dm_os_memory_clerks
     ORDER BY pages_kb DESC;
    

    在大多数情况下,最大的消费者将是MEMORYCLERK_SQLBUFFERPOOL,但您也应该看到大量的CACHESTORE_*条目。您可以使用以下方法将其分组到更高级别:

    SELECT [type] = COALESCE(SUBSTRING([type],1,CHARINDEX('_',[type])-1),'-- total'),
      SUM(pages_kb/1024)
    FROM sys.dm_os_memory_clerks
    GROUP BY GROUPING SETS((),SUBSTRING([type],1,CHARINDEX('_',[type])-1));
    

    要查看缓存/用户存储内存是如何分布的:

    SELECT [type], name, 
     mem_MB = CONVERT(DECIMAL(19,2),pages_kb/1024.0) 
     FROM sys.dm_os_memory_cache_counters
     ORDER BY pages_kb DESC;
    

    目前,在我的低级 VM 上,您的问题中的查询(由 @Shanky 提供)表示 SQL Server 正在使用 2,085 MB 内存(其中 2,004 MB 锁定在内存中)。然而,我上面对内存管理员 DMV 的查询说,那里使用的总内存只有 1,793 MB。

    Chris 的回答中的查询表明总数为 2,054 MB,目标为 3,072 MB(这是因为我已明确设置max server memory为 3,072 MB)。

    那么额外的〜200 MB在哪里?谁知道。(如果我在性能监视器中进行比较,我也可以看到这种差异total server memory。Process > sqlservr > Private Bytes)我可以开始解析输出DBCC MEMORYSTATUS以尝试将其拼凑起来(蒂姆查普曼编写了一些 PowerShell 以使其更容易),但这值得吗?所有的记忆都在那里报告吗?我不能 100% 确定它是(或者你应该在 NUMA 系统中使用输出),或者任何 DMV 都可以完全准确地描述 SQL Server 正在使用的所有内存。我也不相信所有的记忆文员类型都记录在任何地方——所以即使这给出了一个完整的画面,你可能仍然对结果的真正含义摸不着头脑。

    与此同时,任务管理器表示sqlservr.exe仅使用 42 MB。无论您做什么,请停止使用任务管理器。对于任何事情,真的。我知道您在最近的编辑中已经从您的问题中删除了这个细节,但我不能强调它对于显示 SQL Server 内存使用情况是多么无用。

    • 13
  2. Kris Gruttemeyer
    2014-12-05T08:28:00+08:002014-12-05T08:28:00+08:00

    根据 Aaron Bertrand 的回答(快速查看为 SQL Server 分配了多少 RAM?)。不应使用任务管理器来确定 SQL 实际使用了多少内存。

    我更喜欢使用以下查询(再次感谢 Aaron):

    SELECT object_name, cntr_value
      FROM sys.dm_os_performance_counters
      WHERE counter_name IN ('Total Server Memory (KB)', 'Target Server Memory (KB)');
    

    或者,使用DBCC MEMORYSTATUS将产生此信息(以及大量附加信息)。

    • 3
  3. realmerl
    2016-09-22T06:42:32+08:002016-09-22T06:42:32+08:00

    我发现此查询为我提供了更准确的实际使用总内存 -

    set transaction isolation level read uncommitted
    select 
        @@Servername,
        osn.node_state_desc, 
    (
    select physical_memory_in_use_kb/(1024) as SQLMEMORYINUSE_MB
    from sys.dm_os_process_memory
    ) + (omn.locked_page_allocations_kb / 1024.0 ) as Tot
    from sys.dm_os_memory_nodes omn
    inner join sys.dm_os_nodes osn on (omn.memory_node_id = osn.memory_node_id)
    where osn.node_state_desc <> 'ONLINE DAC'
    and osn.node_id = 1
    

    我很欣赏这篇文章很旧,但这可能有用。

    我有一个 2012 std 的实例,总共使用了一些 120Gb 内存

    • 0

相关问题

  • 我正在使用 MEMORY 存储引擎,但 MySQL 仍然写入我的磁盘...为什么?

  • PostgreSQL:强制数据进入内存

  • 为什么 Denali 序列应该比标识列表现更好?

  • SQL Server 不应该支持范围吗?

  • 什么是 SQL Server“德纳利”?什么是新的?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve