Sql Server 内存用不上的解决办法
最近两周,DB 服务器内存一直占用不上,给了32G,结果用的内存量一直在4G左右,真的很让人纠结,正常情况下,应该用到17G左右。结果排查了半天,原来是 AWE 开启后没有重启服务,真的是太难了,太纠结了,让我找了半天。重启服务后,内存占用慢慢上来了,到了正常水平。
虽然没什么技术含量,但是查找的过程还是蛮有意思的,查找的方法也是能举一反三的,所以记录一下。
首先检查的是服务器的版本,发现是 Windows 2003 X64,结果令人诧异的是装了 Sql Server 2008 X86,太让人纠结了,要是装 Sql Server 2008 X64 不上更好吗?在 64位 系统上,32位 的 Sql Server 是最多只能占用4G 的,所以,也就把 排查 AWE 是否配置作为了主要入手点。
直接运行 "sp_configure 'awe enabled'" ,却报出了 "The configuration option 'awe enabled' does not exist, or it may be an advanced option." 的错误,原来需要这样:
exec sp_configure 'show advanced options', 1
RECONFIGURE
GO
exec sp_configure
之后发现 config_value 为 1 ,而 run_value 为 0,真的是很郁闷,明显的配置成功了,却没有运行成功,肯定是配置后没有重启 Sql Server 服务。
exec sp_configure 是比较好用的,能检查一些配置项是否生效,主要通过对比 config_value 、run_value 和 默认值。
下表列出了所有可用的配置选项、可能的设置范围及其默认值。配置选项按以下字母代码标记:
- A = 高级选项,仅允许有经验的数据库管理员或认证的 SQL Server 技术人员进行更改,并且需要将 show advanced
options 设为 1。
- RR = 需要重新启动数据库引擎的选项。
- SC = 自配置选项。
配置选项 最小值 最大值 默认值 Ad Hoc Distributed Queries (A)
0
1
0
affinity I/O mask(A,RR)
-2147483648
2147483647
0
affinity64 I/O mask(A,仅适用于 64 位版本的 SQL Server)
-2147483648
2147483647
0
affinity mask (A)
-2147483648
2147483647
0
affinity64 mask(A,仅适用于 64 位版本的 SQL Server)
-2147483648
2147483647
0
Agent XPs (A)
0
1
0
(当 SQL Server 代理启动时,改为 1。如果 SQL Server 代理设置为在安装过程中自动启动,则为 1。)
allow updates(已过时。请勿使用。将在重新配置期间导致错误。)
0
1
0
awe enabled(A,RR)
0
1
0
blocked process threshold (A)
0
86400
0
c2 audit mode(A,RR)
0
1
0
clr enabled
0
1
0
common criteria compliance enabled (A,RR)
0
1
0
cost threshold for parallelism (A)
0
32767
5
cross db ownership chaining
0
1
0
cursor threshold (A)
-1
2147483647
-1
Database Mail XPs (A)
0
1
0
default full-text language (A)
0
2147483647
1033
default language
0
9999
0
default trace enabled (A)
0
1
1
disallow results from triggers (A)
0
1
0
fill factor(A,RR)
0
100
0
ft crawl bandwidth (max),请参阅 ft crawl bandwidth (A)
0
32767
100
ft crawl bandwidth (min),请参阅 ft crawl bandwidth (A)
0
32767
0
ft notify bandwidth (max),请参阅 ft notify bandwidth (A)
0
32767
100
ft notify bandwidth (min),请参阅 ft notify bandwidth (A)
0
32767
0
index create memory(A,SC)
704
2147483647
0
in-doubt xact resolution (A)
0
2
0
lightweight pooling(A,RR)
0
1
0
locks(A,RR,SC)
5000
2147483647
0
max degree of parallelism (A)
0
64
0
max full-text crawl range (A)
0
256
4
max server memory(A,SC)
16
2147483647
2147483647
max text repl size
0
2147483647
65536
max worker threads(A,RR)
128
32767
(对于 32 位 SQL Server,建议最大为 1024;对于 64 位 SQL Server,建议最大为 2048。)
0
归零操作将根据处理器的数量自动配置最大工作线程数,可以使用公式 (256+(<处理器数> -4)* 8) 来计算 32 位 SQL Server 的线程数,64 位 SQL Server 的线程数为 32 位的 2 倍。
media retention(A,RR)
0
365
0
min memory per query (A)
512
2147483647
1024
min server memory(A,SC)
0
2147483647
8
nested triggers
0
1
1
network packet size (A)
512
32767
4096
Ole Automation Procedures (A)
0
1
0
open objects(A,RR,已过时)
0
2147483647
0
PH_timeout (A)
1
3600
60
precompute rank (A)
0
1
0
priority boost(A,RR)
0
1
0
query governor cost limit (A)
0
2147483647
0
query wait (A)
-1
2147483647
-1
recovery interval(A,SC)
0
32767
0
remote access (RR)
0
1
1
remote admin connections
0
1
0
remote login timeout
0
2147483647
20
remote proc trans
0
1
0
remote query timeout
0
2147483647
600
Replication XPs 选项 (A)
0
1
0
scan for startup procs(A,RR)
0
1
0
server trigger recursion
0
1
1
set working set size(A,RR,已过时)
0
1
0
show advanced options
0
1
0
SMO and DMO XPs (A)
0
1
1
SQL Mail XPs (A)
0
1
0
transform noise words (A)
0
1
0
two digit year cutoff (A)
1753
9999
2049
user connections(A,RR,SC)
0
32767
0
User Instance Timeout(A,仅出现在 SQL Server 2005 Express Edition 中)
5
65535
60
user instances enabled(A,仅 SQL Server 2005 Express Edition 中提供)
0
1
0
user options
0
32767
0
Web Assistant Procedures (A)
0
1
0
xp_cmdshell (A)
0
1
0