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 / 问题 / 47431
Accepted
kombo
kombo
Asked: 2013-08-02 09:16:21 +0800 CST2013-08-02 09:16:21 +0800 CST 2013-08-02 09:16:21 +0800 CST

为什么 SQL Server 会消耗更多的服务器内存?

  • 772

SQL Server 占用了我服务器 RAM 的 87.5%。这最近导致了很多性能瓶颈,例如速度慢。我研究了这个问题。我可以在 Internet 上找到的一种常见解决方案是为 SQL Server 设置最大限制。这样做了,并获得了很大的改进。我想知道为什么如果没有设置最大内存值,为什么 SQL Server 会不断消耗资源

sql-server sql-server-2008-r2
  • 5 5 个回答
  • 277767 Views

5 个回答

  • Voted
  1. Best Answer
    Thomas Stringer
    2013-08-02T09:39:44+08:002013-08-02T09:39:44+08:00

    SQL Server 将消耗您允许的尽可能多的内存。默认情况下,该数字将包含您机器上 100% 的数字内存。这就是为什么你看到你所看到的。如果您给 SQL Server 24 GB 内存,那么 SQL Server 将尽最大努力使用 24 GB 内存。然后你有 SQL Server 和操作系统争夺资源,它总是会导致性能不佳。

    当您设置max server memory配置限制时,您将限制 SQL Server 可以为缓冲池分配多少(实际上它存储数据页和过程缓存的位置)。SQL Server 中还有其他内存管理员,因此对于您的特定版本(2008 R2 及以下),max server memory只需控制缓冲池。但这始终是最大的内存消耗者。

    关于最小和最大服务器内存影响的 TechNet 参考

    min server memory 和 max server memory 配置选项建立 Microsoft SQL Server 数据库引擎的缓冲池使用的内存量的上限和下限。

    至于我应该为操作系统留多少内存的问题,这是一个普遍争论的指标。这实际上完全取决于服务器上正在运行的其他进程。前提是它是一个真正的专用服务器(几乎从来没有这种情况)。我希望操作系统至少有4 GB 内存(在大型硬件盒上甚至更多)。但最重要的是,监控有多少未使用的内存。如果您注意到大量可用内存(可以通过 perfmon 监控)和未使用内存(当然,总是为这些角落情况留出小缓冲区),请保持自由,并为 SQL Server 提供更多内存。

    • 57
  2. mrdenny
    2013-08-02T09:40:20+08:002013-08-02T09:40:20+08:00

    SQL Server 旨在默认使用服务器上的所有内存。这样做的原因是 SQL Server 将数据库中的数据缓存在 RAM 中,以便它可以比每次用户需要时都从磁盘读取数据时更快地访问数据。如果我们每次 SQL Server 都需要相同的数据时都需要访问磁盘,那么磁盘 IO 要求会非常高。

    通常我建议人们为 Windows 保留大约 4 Gigs 的 RAM,但这实际上取决于服务器上运行的软件数量、您使用的 SQL Server 的哪些组件(并非所有组件都遵循该设置)等。

    • 14
  3. Nikita Kosousov
    2014-11-06T04:12:01+08:002014-11-06T04:12:01+08:00

    这可以立即工作,无需重新启动 SQL:

    服务器内存服务器配置选项

    使用两个服务器内存选项min server memory和max server memory重新配置 SQL Server 内存管理器为 SQL Server 实例管理的内存量(以兆字节为单位)。默认情况下,SQL Server 可以根据可用的系统资源动态更改其内存需求。

    配置固定内存量的步骤 设置固定内存量:

    1. 在对象资源管理器中,右键单击服务器并选择属性。
    2. 单击内存节点。
    3. 在服务器内存选项下,为最小服务器内存和最大服务器内存输入所需的数量。

    使用默认设置允许 SQL Server 根据可用系统资源动态更改其内存要求。最小服务器内存的默认设置为 0,最大服务器内存的默认设置为 2147483647 兆字节 (MB)。

    我希望这有帮助!

    • 9
  4. RLF
    2013-08-02T10:45:49+08:002013-08-02T10:45:49+08:00

    正如 Eric 所说,您必须管理内存以便为其他进程保留可用空间。有关如何设置最大内存的一般说明和一些指导,请查看 Jonathan Kehayias 的帖子:

    http://www.sqlskills.com/blogs/jonathan/how-much-memory-does-my-sql-server-actually-need/

    您可以根据您的服务器使用情况修改建议。

    • 3
  5. Eric Higgins
    2013-08-02T09:19:36+08:002013-08-02T09:19:36+08:00

    SQL Server 将使用可用 RAM,除非您设置了使用上限。作为一项规则,我尽量为操作系统留出不少于 2GB 的空闲空间,即如果主机中有 64 GB 的物理 RAM,则将 SQL Server 上限设置为 62 GB。

    http://msdn.microsoft.com/en-us/library/ms191144(v=sql.105).aspx

    • 2

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

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

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

    • 3 个回答
  • Marko Smith

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

    • 3 个回答
  • Marko Smith

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

    • 4 个回答
  • Marko Smith

    授予用户对所有表的访问权限

    • 5 个回答
  • 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
    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
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +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