sql2005性能优化(在32位系统上突破2G内存使用量的方法) .
转载自http://blog.csdn.net/soldierluo/article/details/6589743
服务器磁盘为(SAS)IBM组成RAID0+1,SQL2K5只识别4G内存,实际只占用2G内存。而使用 AWE的话,应用程序可以直接将操作系统允许的最大物理内存量保留为未分页的内存。使用 AWE 使 SQL Server 可以缓存详细信息,而不用从磁盘上的系统页面文件中读取详细信息。通过更快的数据访问提高了性能并减少了访问磁盘的频率。故决定打开SQL2K5的AWE参数,将6G的内存锁定,完全给SQL使用。
大致配置步骤如下:
1、因服务器已打开/PAE参数,否则需在系统盘根目录下修改Boot.ini文件(去除只读属性),在=optin /fastdetect后添加/PAE参数(前面应该有空格)。(如果没有boot。ini文件的话可从其他相似的机子上拷一个过来)
2、在windows的组策略中启用锁定内存页选项:
a)在"开始"菜单上单击"运行"子菜单,然后在"打开"框中键入"gpedit.msc"。
b)在"组策略"控制台上,展开"计算机配置",然后展开"Windows 设置"。
c)展开"安全设置",然后展开"本地策略",选择"用户权限分配"复选框。
d)在详细资料窗格中,双击"锁定内存页"。
e)在"本地安全策略设置"对话框中,单击"添加"按钮。
f)在"选择用户或组"对话框中,添加有权运行sqlservr.exe的帐户(administor账号即可)。
3、启用SQLServer2K5的AWE支持。
a)在对象资源管理器中,右键单击服务器并选择“属性”。
b)单击“内存”节点。
c)在“服务器内存选项”下,选择“使用 AWE 分配内存”。
d)在对象资源管理器中,右键单击服务器并选择“属性”。
e)单击“内存”节点。
f)在“服务器内存选项”下,选择“使用 AWE 分配内存”。
g)配置相应最小内存数和最大内存数。
同时也可以用脚本执行的方式操作:
--当 show advanced options 设置为'1'时才能更改AWE
sp_configure 'show advanced options', 1
RECONFIGURE
GO
--启用AWE 选项
sp_configure 'awe enabled', 1
RECONFIGURE
GO
--设置最大内存为6G
EXEC sp_configure'max server memory (MB)',4800; --此值参考如下
GO
RECONFIGURE;
GO
Physical RAM MaxServerMem Setting
2GB 1500
4GB 3200
6GB 4800
8GB 6400
12GB 10000
16GB 13500
24GB 21500
32GB 29000
48GB 44000
64GB 60000
72GB 68000
96GB 92000
128GB 124000
4、注意需要重新启动SQL 服务。
启用AWE参数后,客户端响应时间从原先1分多钟将至5秒
把和SQL Server内存和AWE相关问题的基本内容整理了一下。
1. SQL Server内存基本概念
在涉及SQL Server内存时有几个比较重要的术语:
Buffer Pool (BPool)
SQL Server使用的几个分散的地址空间,内部进程使用,包括存储编译,执行计划,创建索引,申请指针。
MemToLeave
SQL Server在启动时就保留的连续地址空间,供进程空间内的大于8KB的外部组件用,诸如扩展过程,COM/OLE自动化组件,连接服务器等。
Reserved
保留的地址空间,以供未来使用。
Committed
进程现在使用的地址空间,可能是物理RAM也可能是页面文件空间。
Allocation
把内存资源给消费者。
SQL Server在初始化过程中干了些什么?
1. 计算并保留MemToLeave
SQL7.0是256M,SQL Server 2000是384M,2005和2008估计也差不多。
2. 检查OS支持的最小物理内存和VAS,分配以下空间:
a)buffer头
b)BPool
c)对BPool跟踪的array
3. 把LazyWriter归零
LazyWriter定期检查BPool,看是要增加还是缩减。(因为大概要间隔60秒,所以看上去比较懒。。。真形象)
4. 释放保留的MemToLeave,保证MemToLeave地址空间连续
SQL Server不会在一上来就保留Min Server Memory,但只要系统一旦达到Min Server Memory设置就不会再次低于那个设置。对于Intel系统,SQL Server至少会留4MB内存。如果达不到,那么SQL Server就会将内存释放给OS。如果没需求SQL Server不会乱吃内存,不过一般情况下也不会吐内存出来,为了避免性能明显下降。
2. VAS与AWE
当SQL Server可用的内存在3-4GB以下,SQL Server可以完全用Virtual Address Space(虚拟地址空间,VAS)。2G为用户模式用,2G为系统(内核模式)用。就是说在这种情况下SQL Server最多用2GB内存(当然因为还有其他应用程序,一般只能用不到2G,比如1.6G)。例如在我的32位测试机上,运行DBCC MemoryStatus,结果如下:
Memory Manager KB
VM Reserved 1683800
VM Committed 293084
保留的virtual address space为1.68GB左右,占用的为290MB左右。
对于3G以上内存的机器就要用AWE(Address Windowing Extensions),允许映射到额外的内存上,上限64GB。
应用了AWE,从Task Manager看,SQL Server进程始终只用了256MB内存,被AWE用的内存不显示。所以看SQL Server占用的内存最方便的方法是在性能监视器(Performance Monitor)中的SQLServer: Memory Manager - Total Server Memory (KB)。
也可以通过DBCC MEMORYSTATUS或如下查询来查看:
SELECT * FROM sys.dm_os_performance_counters
WHERE counter_name IN ('Target Server Memory (KB)','Total Server Memory (KB)')
Target Server Memory (KB)就是最多可以吃多少,Total Server Memory (KB)就是目前吃了多少。
SQL Server进程占用率也可以用下面的查询:
SELECT *
FROM sys.dm_os_ring_buffers
WHERE ring_buffer_type = 'RING_BUFFER_RESOURCE_MONITOR'
启用AWE有三步:
1. 在boot.ini内增加/pae 允许Windows Server访问更多内存(最多16GB)
2. 给SQL Server进程赋予“Lock Pages in Memory”
3. 将配置中的“AWE Enabled”设置为1
对于Windows Server 2003,如果启用了AWE,SQL Server总是会使用它并动态管理。在启动时它会分配用作启动工作负载的内存,接着就会看自己的需求有多少内存吃多少,直到到达“Max Server Memory”。如果SQL Server遇到内存压力,会尽可能释放内存,直到“Min Server Memory”。
建议设置“Max Server Memory”以保证其他进程有内存用,对于32GB内存的可以留2G,对于64GB内存的可以留4G。如果同时有多个实例存在,更需要防止一个实例吞掉了过多内存。
AWE对于64位机器不是必须的。不过还是建议给运行SQL Server进程的用户帐号“Lock Pages in Memory”权限,
防止SQL Server内存不够写就写到磁盘上。对于64位服务器,默认使用AWE,所以如下查询可能会返回非零值:
Select sum(awe_allocated_kb) / 1024 as [AWE allocated, Mb]
From sys.dm_os_memory_clerks
目的是避免working set trimming。
3. SQL Server内存问题
当配置SQL Server时,知道它如何应对内存压力非常重要。内存压力分为两大类:VAS和物理内存。物理内存压力直接从OS就可以看出来,因此也可以称作外部内存压力。也可能是它自己的进程导致的,因此也可以称作内部内存压力。
SQLOS管理内存压力的整体架构如下:
Resource Monitor
/ | \
Low Physical Internal/External Low VAS High Physical Internal/External |
Resource Monitor(RM)是一切的核心,一有动静马上获知,广播到memory clerks。
先暂时整理到这里。
之所以研究这个问题是由于一个case,客户的64位SQL Server会出现AWE Allocated突然从6G(MAX Server Memory)跌到2G(Min Server Memory),再过了数个小时之后SQL Agent出现Virtual Memory Too Low导致任务失败。我研究了很长时间也没有获得结论,只好Escalate掉。目前楼上Team的工程师怀疑是系统的问题导致强制回收内存,让客户使用perfmon log和adplus(ADPlus 是 Microsoft 产品支持服务 (PSS) 提供的一个工具,它可以解决停止响应(挂起)或失败(崩溃)的任何进程或应用程序的问题。)收集系统的信息。
还有另外一个也是和内存有关的case,客户机器的4G内存莫名其妙地被SQL Server进程吃掉了2.9G,但进程占用的CPU占用,想知道是为什么。这个现在正在帮忙收集信息中。客户好像关于这个了解的比我还少,能稍微最近做的一个内存紧张一个Report Viewer优化一个Data Mining都没能解决在拖了很久之后只好Escalate,真受打击。。。好吧,专心做剩下的Discuz!NT的case,知道自己几量重后只好用努力来弥补了
sql2005性能优化(在32位系统上突破2G内存使用量的方法) .的更多相关文章
- [No0000154]详解为什么32位系统只能用4G内存.
既然是详解, 就从最基础的讲起了. 或者1来存储数据的, 所以Bit实际上可以看成存放1个二进制数字的1个位置.也就是说bit只有2种值, 0 或者 1, 所以1个bit能存放1个布尔类型的值(boo ...
- 详解为什么32位系统只能用4G内存.
本文转自:https://www.cnblogs.com/nvd11/archive/2013/04/02/2996784.html,感谢作者的干货 既然是详解, 就从最基础的讲起了. 1. Bit( ...
- 32位系统下使用4GB内存
64位系统的驱动还有不少缺陷,果断重装回32位系统,但是4gb的内存,明显是浪费啊. 所以必须利用起来. 我没有采用不稳定的破解内核的做法,采用了虚拟硬盘的做法.因为个人觉得这样其实利用效率更高. 方 ...
- 百杂讲堂之为什么32位系统只能操作4g内存
百杂讲堂之为什么32位系统只能操作4g内存 计算机内存中很多的单元,每一个单元就是一个字节,一个字节有8位.每一个单元有两种状态:0和1. 所以 两个单元就有4个组合: 3个单元就有8个组合: 依次类 ...
- 为什么32位系统最大支持4G内存??我自己悟出来了 终于 。。。。。
今天突然开窍了,想通了..... 以下是我的抽象想法: 32位系统 这个 多少位 指的是 硬件的 一次性发送过来的位数,一个字节 等于8位,内存的一个存储单元就是一个字节,即8位. 也可以这样来想这个 ...
- 微软的操作系统中让 32 位支持大于 4GB 的内存。
先给一个参考文献:The RAM reported by the System Properties dialog box and the System Information tool is les ...
- 32位Windows7上8G内存使用感受+xp 32位下使用8G内存 (转)
32位Windows7上8G内存使用感受+xp 32位下使用8G内存 博客分类: Windows XPWindowsIE企业应用软件测试 我推荐做开发的朋友:赶快加入8G的行列吧....呵呵..超爽 ...
- 【转】将 Linux 应用程序移植到 64 位系统上
原文网址:http://www.ibm.com/developerworks/cn/linux/l-port64.html 随着 64 位体系结构的普及,针对 64 位系统准备好您的 Linux® 软 ...
- Win7 64位系统上配置使用32位的Eclipse(转)
Win7 64位系统上配置使用32位的Eclipse 博客分类: Eclipse eclipse 最近工作电脑换成了64位的win7系统,之前个人电脑上安装的jdk和Eclipse都是32位的.而新 ...
随机推荐
- 大数据入门到精通3-SPARK RDD filter 以及 filter 函数
一.如何处理RDD的filter 1. 把第一行的行头去掉 scala> val collegesRdd= sc.textFile("/user/hdfs/CollegeNavigat ...
- black-hole《XSS的原理分析与解剖》阅读笔记
0×01 前言: <xss攻击手法>一开始在互联网上资料并不多(都是现成的代码,没有从基础的开始),直到刺的<白帽子讲WEB安全>和cn4rry的<XSS跨站脚本攻击剖析 ...
- ORACLE 如何产生一个随机数
1.select dbms_random.string('x', 3) from dual ; x是类型,3是长度. /* opt可取值如下: 'u','U' : 大写字母 'l','L' ...
- with as 如何工作
with as 如何工作 with如何工作? Python对with的处理还是很机智滴.基本思想就是with所求值的对象必须有一个__enter__()方法,一个__exit__()方法 紧跟wi ...
- zabbix 3.2.6+centos 7 +nginx 1.12+ mysql 5.6+ Grafana +php 5.6
先只记录关键点 1.nginx.MYSQL 用官方的YUM库安装 2.CENTOS升级到最新 3.ZABBIX 官方RPM安装,然后下载源码库,源码中的PHP复制至NGINX的配置目录 4.NGINX ...
- vue element upload上传、清除等
如果项目中可以使用file-list,那我们可以点击file-list删除文件列表: 有时候项目中是不要这个文件列表的,所以在上传成功以后,文件列表一直存在,要重新上传就必须刷新页面,所以我们需要手动 ...
- [剑指Offer]34-二叉树中和为某一值的路径
题目链接 https://www.nowcoder.com/practice/b736e784e3e34731af99065031301bca?tpId=13&tqId=11177&t ...
- VTP
VTP VLAN中继协议(Vlan Trunking Protocol),是CISCO专用协议.VTP负责在VTP域内同步VLAN信息,这样就不必在每个交换机上配置相同的VLAN信息.VTP还提供一种 ...
- AngularJS——第1章 简介
第1章 简介 由谷歌公司开发维护的前端MVC框架,克服了HTML在构建应用上的诸多不足,降低了开发成本,提高了效率. 一个框架 以数据和逻辑作为驱动 AngularJS核心特性:模块化,双数据绑定,语 ...
- 在Eclipse中安装python插件的方法
一个博士给了我一堆代码,原本以为是C++或者java写的,结果是python,我压根没学过呀,不过本着语言都是相通的原则,我硬着头皮开始学习Python,当然先学习安装IDE(以前学习一门新语言,我会 ...