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 / 问题 / 212569
Accepted
Elaskanator
Elaskanator
Asked: 2018-07-19 06:51:53 +0800 CST2018-07-19 06:51:53 +0800 CST 2018-07-19 06:51:53 +0800 CST

SQL Server 切换为独占使用页面文件而不是 RAM 并有效地冻结了世界

  • 772

昨天我在我的 SQL Server 实例上运行了大约 3 个小时,运行了一个密集的计算,消耗了所有分配的物理 RAM (由于我的工作站硬件有限,我将它限制为 2GB),突然它(以及许多其他东西?)释放了所有他们的内存明显切换到专门使用页面文件。

在我被迫重新启动之后,我的计算机非常滞后(仅访问电源选项就花了 10 分钟)。

我能够在重新启动之前获得任务管理器的屏幕截图(我在后台以低更新速度运行)。调整窗口大小以显示最大历史记录后,它看起来像这样:

在此处输入图像描述

这种令人惊讶的行为导致停机。这是记录在案的功能吗?

我正在使用 Enterprise 2014 数据库引擎运行 Windows Server 2008 R2。

谢谢。

sql-server memory
  • 2 2 个回答
  • 2115 Views

2 个回答

  • Voted
  1. Shanky
    2018-07-19T07:17:02+08:002018-07-19T07:17:02+08:00

    这种令人惊讶的行为导致停机。这是记录在案的功能吗?

    是的,它记录在 Windows 中的 RAM、虚拟内存、页面文件和内存管理中。引用这篇支持文章

    RAM 是一种有限的资源,而对于大多数实际用途,虚拟内存是无限的。可以有很多进程,每个进程都有自己的 2 GB 私有虚拟地址空间。当所有现有进程使用的内存超过可用 RAM 时,操作系统会将一个或多个虚拟地址空间的页面(4 KB 块)移动到计算机的硬盘上。这将释放该 RAM 帧以供其他用途。在 Windows 系统中,这些“分页”页面存储在分区根目录中的一个或多个文件(Pagefile.sys 文件)中。每个磁盘分区中可以有一个这样的文件。页面文件的位置和大小在系统属性中配置(单击高级,单击性能,然后单击设置按钮)。

    它冻结的原因是磁盘速度比内存速度慢得多。在磁盘的分页部分表现得像 RAM 之后。

    要了解在给定时间分页了多少内存,您可以使用 DMV sys.dm_os_process_memory。查看列physical_memory_in_use_kb和的差异virtual_address_space_committed_kb。这两列的区别将使您使用分页内存的 SQL Server。

    select (virtual_address_space_committed_kb/1024) as Total_Memory_Used_MB, --Ram+page file
    (physical_memory_in_use_kb/1024) as Total_physical_memory_used_MB ,--PhysicalMemory Used
    ((virtual_address_space_committed_kb-physical_memory_in_use_kb)/1024) as Page_file_Utilization_MB
    from sys.dm_os_process_memory.
    

    您可以通过给 SQL Server 服务帐户Locked Pages in Memory Privilege来在更大程度上避免这种情况。这将不允许对 SQL Server 内存进行分页,但 Windows 仍然可以要求 SQL Server 将其内存利用率调整到最小服务器内存,如果仍然存在严重的内存压力,操作系统进程将被分页,这甚至可能导致操作系统意外关闭所以要小心。更好的解决方案是添加更多 RAM,特别是在这种情况下。

    编辑:根据您的评论

    我已经将整个 SQL Server 实例限制为 2GB 内存

    哦!!这对于 SQL Server 来说实在是太小了,当你在做一些严格的测试时也是如此

    • 6
  2. Best Answer
    6 revs, 4 users 48%user
    2018-07-19T07:47:49+08:002018-07-19T07:47:49+08:00

    社区维基回答:

    Windows 分页,这就是虚拟内存管理器的工作方式。如果您在内存中使用锁定页面,它将无法...尽管您可能会崩溃您的系统而不是它变得迟缓。正确设置max server memory也是一个好的开始。

    如果您正在使用的数据集远大于 8GB,则可能是时候考虑将其托管在具有更合适硬件的服务器上。SQL Server 不适用于磁盘上的页面(它们必须被读入内存),并且查询可能会为某些运算符(排序、散列)请求内存。SQL Server 可以使用超出最大服务器内存的内存来授予这些内存。请参阅:您是否为 SQL Server 2012 标准版提供了足够的内存?

    如果升级到 SQL Server 2012 或更高版本,请注意对内存管理进行了重大更改。请参阅从 SQL Server 2012 (11.x) 开始对内存管理的更改。特别是,SQL Server 可能会使用超出设置的限制max server memory(特别是对于列存储操作)的内存(例如用于排序和散列),但它仍会尝试尽快回到该限制内。

    • 2

相关问题

  • 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