操作系统:Windows Server 2003 Standard X64 Edition
SQL 版本:Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86)
物理内存:16G如何设置才能让SQL使用更多的内存?
要不要开启AWE?
与32的SQL有没有关系?希望各位帮忙解答
SQL 版本:Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86)
物理内存:16G如何设置才能让SQL使用更多的内存?
要不要开启AWE?
与32的SQL有没有关系?希望各位帮忙解答
1. 在boot.ini内增加/pae 允许Windows Server访问更多内存(最多16GB)
2. 给SQL Server进程赋予“Lock Pages in Memory”
3. 将配置中的“AWE Enabled”设置为1
在sql 查询分析器中输入
use master
sp_configure 'show advanced options', 1
RECONFIGURE
GO
sp_configure 'awe enabled', 1
RECONFIGURE
GO
sp_configure 'max server memory', 6144
RECONFIGURE
GO
32位操作系统有个很大的缺陷,应用程序无法访问大于4G的进程地址空间,因为32位的指针无法保存大于4G的地址空间
如果大于4G,则需要使用地址窗口化扩展插件(AWE),具体操作如下:
1,启动物理地址扩展
(1)找到C:\boot.ini,并删除其只读属性.
(2)编辑boot.ini,在ARC路径中添加/PAE参数.例如:
在windows Server 2003 Enterprise Edition 中,编辑后的ARC路径如下:
muti(0)disk(0)partition(1)windows="windows Server 2003 Enterprise,Edition"/fastdetect/PAE
保存后将其恢复为只读模式,然后重新启动计算机。如果计算机上的可用物理内存超过16G,应确保boot.ini文件中没有/3gb参数
sp_configure'show advanced options',1
reconfigure
go
sp_configue 'awe enabled',1
reconfigure
go
---手动配置内存选项
sp_configure'show advanced options',1
go
reconfigure
go
sp_configure 'min server memory' --服务器最小内存
sp_configure 'max server memory' --服务器最大内存
sp_configure 'index create memory'--创建索引占用的内存
sp_configure 'min memory per query'--每次查询占用的最小内存
看下这个sys.dm_os_memory_clerks
如果没记错,SQl Server自己会取内存来用。 而且取了从来不还,如果不重新启动服务的话,就会越占越大。
1.SQL Server进程赋予“Lock Pages in Memory”
2.启动AWE,sql还是只占用3G左右
如果能提高sql占用的内存使用,合并复制会不会变快
where [type]='MEMORYCLERK_SQLBUFFERPOOL'
sp_configure 'max server memory (MB)','14000' --(留2g左右给系统)
reconfigure with override
go另外最好需要额外配置下
运行 gpedit.msc
Lock pages in memory\Perform volume maintenance tasks 权限给sqlserver的启动帐号至于为什么,头一个没什么说的,应该很多人接触过,第2个参见http://blog.csdn.net/tjvictor/archive/2010/02/04/5287945.aspx
不配置的话只能占用3G,配置了AWE重启了SQL没用,然后刚给SQL启动账号赋予了Lock pages in memory的权限,但是还没重启,因为数据库现在在用,所以目前还是3G
你的操作系统是64位,你的sql server是32位?
那么你需要:
1.建立一个windows帐号,admin权限
2.给该帐号锁定内存页权限
3.设置sql server 占用最大内存为12GB
4.重启sql server .
这样设置后select awe_allocated_kb from sys.dm_os_memory_clerks
where [type]='MEMORYCLERK_SQLBUFFERPOOL'
有值了,不过select * from sysperfinfo where counter_name='Total Server Memory (KB)' 的值很小,怎么看SQL现在占的内存?
perfectaction,高手哈现在晚上解决合并复制慢的问题
sum(awe_allocated_kb)/1024/1024 as [AWE allocated, GB]
From sys.dm_os_memory_clerksselect counter_name, ltrim(cntr_value*1.0/1024/1024)+'G' from master.sys.dm_os_performance_counters
where counter_name like '%target%server%memory%'or counter_name like '%total%memory%'
之前没成功原因应该是锁定内存页权限对应的账号是:NT AUTHORITY\NETWORK SERVICE,该用windows账号之后就可以了。