Windows分页文件设置不当导致SQL Server服务被终止
Windows分页文件设置不当导致SQL Server服务被终止
文章说明
在正式开始验证和测试之前,先介绍Windows分页文件和SQL Server的动态内存管理。下面测试将分为两种测试场景:场景一:分页文件为0MB,场景二:分页文件大小自动管理。
Windows 分页文件作用
分页文件是在硬盘上可选的隐藏系统文件。分页文件由Windows将虚拟的内存地址自动转换为真实的内存地址,功能如下:
RAM的物理扩展,系统可以从物理内存中删除不经常访问的已修改页面,让系统更高效地为更频繁访问的页面更高效地使用物理内存。
应用程序要求,使用页面文件,以确保数据库缓存可以在其他服务或应用程序请求内存时释放内存。
对系统故障转储的支持,用于 "后退" (或支持)系统崩溃转储,并延长系统提交的系统所支持的内存量(也称为 "虚拟内存")。
系统提交内存限制是 "物理内存" 和 "所有页面文件" 组合的总数,它表示系统可以支持的最大系统提交的内存,如果系统可以支持的最大系统提交的内存达到系统提交限制,系统和进程可能无法获取提交的内存。
当系统支持的最大提交内存达到系统提交内存限制的90% 时,分页文件设置为自动管理大小时,系统管理的页面文件会自动增长到物理内存或 4 GB (越大)的三倍。
分页文件的大小需要考虑包括系统的稳定性、应用程序类型、业务高峰期消耗的系统提交内存大小、页面数量访问次数多个方面。分页文件的最小需要配置为200MB才能完成系统故障转储(内核层面)。分页文件大小默认配置为自动,当系统提交内存超过限制的90%,每次增长3倍的物理内存大小或者4GB(在磁盘空间允许的情况下)。
SQL Server如何动态管理内存
SQL Server的内存管理围绕着两个目标:
防止缓冲池过大,从而导致操作系统层面出现内存不足。
尽量增加缓冲池大小,尽量减少产生数据库文件的物理I/O。
SQL Server的缓冲池是占用最多内存也是最主要的部分,由 min server memory 和 max server memory 参数控制整个SQL Server能够使用内存的上限和下限。启动服务时,缓冲池不立即获取 min server memory 中指定的内存量,只需要小部分的内存进行初始化,随着压力增大而慢慢获取内存,不会超过 max server memory 的限制,但在达到min server memory 之前,并不会释放内存。
如果为 min server memory 和 max server memory 指定相同的值,则一旦分配给数据库引擎的内存达到该值,数据库引擎将停止为缓冲池动态释放和获取内存。
测试环境
测试服务器配置
OS版本:Windows Server 2008 R2
DB版本:SQL Server 2008 R2
CPU:4 vCPU,每CPU 4核,共16个CPU
内存大小:8GB
测试数据库配置
最大内存限制:0MB
测试数据库:tpcc,simple模式
压测工具及性能统计信息
压测工具:HummerDB 3.3,压测一小时
性能数据收集方式:性能计数器,15秒收集一次,收集一个半小时。使用PAL分析结果
本次测试不关注TPC-C的事务计数,只关注Windows虚拟内存和SQL Server服务及内存使用情况
测试参数
使用 HummerDB 创建压测数据,并进行压测
Schema Build
Number of Warehouses:160 #仓库数量,建议为每个 CPU 创建 10 到 100 个仓库
Virtual User to Build Schema:10 #创建方案的虚拟用户数,介于客户端 vCPU 的 1 到 2 倍之间
Driver Script
TPC-Driver Script:Timed Test Driver Script #定时测试驱动程序脚本
Minutes of Rampup Time:5 #预热5分钟
Minutes for Test Duration:60 #测试持续时间60分钟
Virtual User
Virtual Users:320 #用于压力测试的虚拟用户数,TPC-C 建议采用 10 倍比例以防止行锁定
压测界面:
结果对比
计数器 | 测试场景一(无分页文件) | 测试场景二(分页文件自动管理) |
---|---|---|
Memory % Committed Bytes In Use |
压测期间使用率达到100% |
压测期间使用率平均在60%以下 |
Memory Pages Output/sec |
无分页文件,没有换页 |
最高一秒换页1635次,平均每秒换页19次 |
Memory Pages Input/sec |
没有分页文件,但却有读入接近600 |
读入在250以下 |
Paging File % Usage | 无 |
在2%左右,按照分配8GB,使用1.2GB |
SQLServer:Buffer Manager\ Lazy writes/sec |
压测期间,最高每秒写120次 |
在测试结束后,最高每秒写200次 |
SQLServer:Buffer Manager\ Free pages |
压测期间最低388个可用页 |
压测开始直线下降,可用也最低187个 |
计数器说明:
- Memory % Committed Bytes In Use:提交内存指的是需要在分页文件中为其保留的空间(RAM和所有页面文件),如果提交内存超过了提交内存限制(持续100%),说明可能发生了内存泄露。
- Memory Pages Output/sec:当物理内存不足时,Windows将更多页面写到分页文件以释放空间。
- Memory Pages Input/sec:当进程引用无法在RAM中找到虚拟内存中的页时,需要从磁盘读取多个页面到RAM中。
- Paging File % Usage:页面文件使用率
- SQLServer:Buffer Manager\Lazy writes/sec:Lazy write进程释放缓冲池中最近最少使用的页,并将脏页标识为“干净的”,从缓冲池写入到磁盘,释放缓冲池空间。如果SQL Server需要更多的内存,且缓冲池小于max server memory,Lazy write进程会频繁地释放缓冲池中的页,通常它都是在20秒以下,最好接近0。
- SQLServer:Buffer Manager\Free pages:指的是缓冲池中所有可用地页数量,每个页8KB,一般不小于640个页。
结果分析
测试场景一(无分页文件)
间隔1分钟,从数据库上查询会话请求信息:
执行SQL语句报错:System.OutOfMemoryException,已经没有足够的内存可以继续执行查询语句
-------------------------------------------------------------观察测试过程----------------------------------------------------------
从12:14开始,系统类型的事件中,频繁出现事件ID 2004的报警:Windows 成功诊断出虚拟内存不足的情况。
直到12:42,SQL Server服务已经被意外停止。
结果:SQL Server数据库持续长时间高负载,如果遇到高峰期,SQL Server一直需要更多的内存,Lazy write进程频繁地释放内存,但操作系统没有允许换页,使操作系统层面提交内存长时间使用率达到100%。压测了1个小时,在第30分钟的时候,操作系统出现内存泄漏,导致SQL Server服务被终止。
测试场景二(分页文件自动管理)
会话数一直稳定可查询
操作系统日志没有任何报错,之前测试场景的报错(ID 2004)没有再发生了。
结果:SQL Server数据库持续长时间高负载,Lazy write进程频繁地释放内存,操作系统允许SQL Server进行换页,使操作系统层面提交内存长时间使用率保持在60%以下,操作系统没有出现内存泄漏。压测一个小时,SQL Server服务运行正常。
Windows分页文件设置不当导致SQL Server服务被终止的更多相关文章
- Windows 不能在 本地计算机 启动 SQL Server 服务 错误代码126
本文转自:http://www.cnblogs.com/yuerdongni/archive/2012/08/18/2645140.html 在使用SQL2005(或2008)是可能会遇到错误提示: ...
- SogouCloud.exe进程导致SQL Server服务无法启动
早上打开笔记本想开启SQL Server服务时报错,于是根据提示查看windows日志: 依次点开报错发现第一条是1433端口被占用,于是找相关的进程: 于是杀掉此进程: taskkill /pid ...
- 修改Windows帐户密码,导致Sql Server 2000无法启动
修改Windows帐户密码,导致Sql Server 2000无法启动. --现象以管理员或同等权限用户登录 Windows XP,建立 Sql Server 2000 数据库.之后,在修改此 Win ...
- c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程
c#Winform程序调用app.config文件配置数据库连接字符串 你新建winform项目的时候,会有一个app.config的配置文件,写在里面的<connectionStrings n ...
- windows不能在本地计算机启动SQL Server(MSSQLSERVER)
windows不能在本地计算机启动sql server 在登录数据库的时候,发现数据库不能登录,提示[无法连接到实例],很明显这是因为数据库服务没有启动导致的,我们打开[服务]启动相应的SQL数据库服 ...
- 服务器重启可能会导致SQL Server中部分数据库变为single user mode
今天检查公司生产服务器的SQL Server数据库,惊讶的发现有三个生产数据库变为了single user mode.奇怪的是没有任何人和程序执行过SQL语句将这三个数据库设置为single user ...
- 设置与使用SQL Server的字符集(Collation,即排序规则)
目录 目录 正确认识SQL Server的字符集 选择合适的SQL Server字符集 错误使用SQL Server的字符集 参考资料 正确认识SQL Server的字符集 SQL Server作为一 ...
- win7(windows 7)系统下安装SQL2005(SQL Server 2005)图文教程( Win7 SQL Server2005 安装教程)
win7(windows 7)系统下安装SQL2005(SQL Server 2005)图文教程 由于工作需要,今天要在电脑上安装SQL Server 2005.以往的项目都是使用Oracle,MS的 ...
- 更改Windows系统的密码之后,SQL Server 2008服务无法启动
问题:更改Windows操作系统的密码之后,SQL Server 2008服务无法启动. 原因:SQL Server服务需要使用操作系统的某个登录账户. 解决:需要在服务的属性窗口中修改账户密码,然后 ...
随机推荐
- 驱动开发 —— 从零开始(1) 配置vs20xx+wdkxx环境
网上教程很多.如何去安装如何去配置 但是也有些坑感觉并不是那么的完善 wdk+vs下载链接:https://docs.microsoft.com/zh-cn/windows-hardware/driv ...
- PyQt中QThread多线程的正确用法【待完善】
先贴几篇有意思的讨论 https://www.qt.io/blog/2010/06/17/youre-doing-it-wrong#commento-login-box-container https ...
- NASH:基于丰富网络态射和爬山算法的神经网络架构搜索 | ICLR 2018
论文提出NASH方法来进行神经网络结构搜索,核心思想与之前的EAS方法类似,使用网络态射来生成一系列效果一致且继承权重的复杂子网,本文的网络态射更丰富,而且仅需要简单的爬山算法辅助就可以完成搜索,耗时 ...
- Adobe Photoshop CC 2019 下载+安装教程
1. 安装包 链接: https://pan.baidu.com/s/1_w1SjGVjWNJ9nuTqEcaykg 提取码: xatq 2. 打开安装包 运行Set-up,选择语言,位置 ,选择继续 ...
- Laravel模板引擎Blade中section的一些标签的区别介绍
Laravel 框架中的 Blade 模板引擎,很好用,但是在官方文档中有关 Blade 的介绍并不详细,有些东西没有写出来,而有些则是没有说清楚.比如,使用中可能会遇到这样的问题: 1.@yield ...
- C# 泛型的基本知识,以及什么是泛型?
1.1 泛型概述 1.1.1 泛型广泛用于容器(collections) 1.1.2 命名空间System.Collections.Generic 1.2 泛型的优点. 以前类型的泛化(general ...
- selenium(1)-详细解读元素定位的八种方式
安装selenium和下载webdriver 安装selenium pip install selenium pip install selenium -U (判断是否有最新版本) 下载drive ...
- json 文件注释
json文件注释: "_comment":"this is commets", "jsondata":{ "注释":&q ...
- skywalking面板功能介绍2
场景: spring-user调用spring-order 1.spring-user部署了两个应用实例 2.spring-order部署了一个实例 应用详情信息在表 从上面表中可以看出spring- ...
- disruptor架构二
小故事:Disruptor说的是生产者和消费者的故事. 有一个数组.生产者往里面扔芝麻.消费者从里面捡芝麻. 但是扔芝麻和捡芝麻也要考虑速度的问题. 1 消费者捡的比扔的快 那么消费者要停下来.生产者 ...