如何解决sqlservr.exe占用太多的内存的问题

时间:2022-01-02 17:13:15
使用mssqlserver,这个数据库上加载了一个库,但关联了多个Web和应用。
发现随着运行时间的推进,sqlservr.exe的进程耗用的内容不断地增加,慢慢地达到7、8百MB,甚至上GB.

请大家支支招,什么原因引起的?

15 个解决方案

#1


没遇到过,与你一起等待高手

#3


我用的还是2000的数据库

#4


解决?
遇到问题了吗?
内存在数据库应用中是越多越好,缓冲区命中率和存活率越高越好。

SQL有其自身的内存管理机制,如果内存低于2-6G(可以考虑添加硬件)。

#5


引用 2 楼 cjzm83 的回复:
http://support.microsoft.com/kb/907877


这个里面说的是支持2005,不过刚一试,发现2000里面也能用。
谢谢

#6


引用 4 楼 claro 的回复:
解决?
遇到问题了吗?内存在数据库应用中是越多越好,缓冲区命中率和存活率越高越好。

SQL有其自身的内存管理机制,如果内存低于2-6G(可以考虑添加硬件)。


的确。缓存的内容越多,命中率是会提高。
但内存占用越高越好这个说法正确吗?
因为我现在看到数据库的内存是持续增加了,内存使用量已经超出了物理内存的最大值,当然这里面是有虚拟内存的。
而如果我将现有的2G内存加到6G,设置更高的8G,是否数据库同样会不停地慢慢增加内存的占用,知道占完所有的物理内存呢??
当然我大概也可以通过对数据库进行设置来限制数据库的最大内存使用。但是我想知道我这个数据库内存不停地涨,是由于什么原因引起的涨?是正确的系统缓存数据 还是 错误的由于程序设计的问题(如,连接不释放等)?

#7


DBCC MEMORYSTATUS report:
Buffer Distribution            Buffers
------------------------------ -----------
Stolen                         890
Free                           123119
Procedures                     1446
Inram                          0
Dirty                          352
Kept                           0
I/O                            0
Latched                        28
Other                          5835

(9 行受影响)
////记得microsoft说过,如果target的值大于commited的值,那么需要使用的memory将会增加。如果一直是这个状态,那么也就会持续增加。
Buffer Counts                  Buffers
------------------------------ -----------
Commited                       131670
Target                         132652
Hashed                         6215
InternalReservation            223
ExternalReservation            1716
Min Free                       64
Visible                        132652

(7 行受影响)

Procedure Cache                Value
------------------------------ -----------
TotalProcs                     399
TotalPages                     1446
InUsePages                     528

(3 行受影响)

Dynamic Memory Manager         Buffers
------------------------------ -----------
Stolen                         2088
OS Reserved                    960
OS Committed                   916
OS In Use                      906
General                        1268
QueryPlan                      1493
Optimizer                      0
Utilities                      5
Connection                     169

(9 行受影响)

 
Global Memory Objects          Buffers
------------------------------ -----------
Resource                       1025
Locks                          53
XDES                           14
SQLCache                       128
Replication                    2
LockBytes                      2
ServerGlobal                   22

(7 行受影响)

 
Query Memory Objects           Value
------------------------------ -----------
Grants                         2
Waiting                        0
Available (Buffers)            96658
Maximum (Buffers)              98622

(4 行受影响)

Optimization Queue             Value
------------------------------ -----------
Optimizing                     0
Waiting                        0
Available                      8
Maximum                        8

(4 行受影响)

DBCC CACHESTATS report:
Object Type Hit Ratio              Object Count Avg Cost               Avg Pages              LW Object Count LW Avg Cost            LW Avg Stay (ms)       LW Avg Use Count
----------- ---------------------- ------------ ---------------------- ---------------------- --------------- ---------------------- ---------------------- ----------------------
Proc        0.630434782608696      13           1                      1.92307692307692       0               0                      0                      0
Prepared    0.963360707517372      352          0.948863636363636      4.09375                0               0                      0                      0
Adhoc       0.995789473684211      36           0.916666666666667      2.25                   0               0                      0                      0
ReplProc    0                      0            0                      0                      0               0                      0                      0
Trigger     0.333333333333333      2            1                      1.5                    0               0                      0                      0
Cursor      0.603846153846154      53           1                      6.77358490566038       0               0                      0                      0
Exec Cxt    0.709510936347997      148          0.858108108108108      4.42567567567568       0               0                      0                      0
View        0.966244725738397      5            1                      2.4                    0               0                      0                      0
Default     0                      3            1                      1                      0               0                      0                      0
UsrTab      0                      0            0                      0                      0               0                      0                      0
SysTab      0                      0            0                      0                      0               0                      0                      0
Check       0                      0            0                      0                      0               0                      0                      0
Rule        0                      0            0                      0                      0               0                      0                      0
Summary     0.822976190476191      612          0.931372549019608      4.2140522875817        0               0                      0                      0

(14 行受影响)

#8


看6F的回复,您已经知道问题所在了。

祝好运!

#9


引用 8 楼 claro 的回复:
看6F的回复,您已经知道问题所在了。

祝好运!


晕倒。
我可是那么多个问号呀。
就是不太了解。

#10


这是很正常的,应该增加内存。

#11


32位的sql,想让它用多内存(2G以上、3G以上)还不行呢,必须专门的设置后才可以(也不是直接使用,效率会有折扣)

如果一台机的内存不多,而且还有别的服务也需要内存,那就只好委屈sql了:设置它的最大内存使用量

#12


这么说并不是应用程序有问题而造成的?

#13


引用 9 楼 xiciliu 的回复:
我可是那么多个问号呀。
就是不太了解。
从问号大概能猜到你已经或多或少知道该怎样处理,只不过希望再了解更多。

按你期初的想法,找找原因,可能就有答案了。

#14


我也遇到这样的问题,怎么回事,sqlservr.exe一下低一下高,页面总是报超时,高手指点一下!

#15


超时的问题估计是sql语句有问题,或者是一个sql语句中执行的操作太多。
我曾写过双重嵌套的sql语句,费时的操作太多,执行也是很慢。

#1


没遇到过,与你一起等待高手

#2


#3


我用的还是2000的数据库

#4


解决?
遇到问题了吗?
内存在数据库应用中是越多越好,缓冲区命中率和存活率越高越好。

SQL有其自身的内存管理机制,如果内存低于2-6G(可以考虑添加硬件)。

#5


引用 2 楼 cjzm83 的回复:
http://support.microsoft.com/kb/907877


这个里面说的是支持2005,不过刚一试,发现2000里面也能用。
谢谢

#6


引用 4 楼 claro 的回复:
解决?
遇到问题了吗?内存在数据库应用中是越多越好,缓冲区命中率和存活率越高越好。

SQL有其自身的内存管理机制,如果内存低于2-6G(可以考虑添加硬件)。


的确。缓存的内容越多,命中率是会提高。
但内存占用越高越好这个说法正确吗?
因为我现在看到数据库的内存是持续增加了,内存使用量已经超出了物理内存的最大值,当然这里面是有虚拟内存的。
而如果我将现有的2G内存加到6G,设置更高的8G,是否数据库同样会不停地慢慢增加内存的占用,知道占完所有的物理内存呢??
当然我大概也可以通过对数据库进行设置来限制数据库的最大内存使用。但是我想知道我这个数据库内存不停地涨,是由于什么原因引起的涨?是正确的系统缓存数据 还是 错误的由于程序设计的问题(如,连接不释放等)?

#7


DBCC MEMORYSTATUS report:
Buffer Distribution            Buffers
------------------------------ -----------
Stolen                         890
Free                           123119
Procedures                     1446
Inram                          0
Dirty                          352
Kept                           0
I/O                            0
Latched                        28
Other                          5835

(9 行受影响)
////记得microsoft说过,如果target的值大于commited的值,那么需要使用的memory将会增加。如果一直是这个状态,那么也就会持续增加。
Buffer Counts                  Buffers
------------------------------ -----------
Commited                       131670
Target                         132652
Hashed                         6215
InternalReservation            223
ExternalReservation            1716
Min Free                       64
Visible                        132652

(7 行受影响)

Procedure Cache                Value
------------------------------ -----------
TotalProcs                     399
TotalPages                     1446
InUsePages                     528

(3 行受影响)

Dynamic Memory Manager         Buffers
------------------------------ -----------
Stolen                         2088
OS Reserved                    960
OS Committed                   916
OS In Use                      906
General                        1268
QueryPlan                      1493
Optimizer                      0
Utilities                      5
Connection                     169

(9 行受影响)

 
Global Memory Objects          Buffers
------------------------------ -----------
Resource                       1025
Locks                          53
XDES                           14
SQLCache                       128
Replication                    2
LockBytes                      2
ServerGlobal                   22

(7 行受影响)

 
Query Memory Objects           Value
------------------------------ -----------
Grants                         2
Waiting                        0
Available (Buffers)            96658
Maximum (Buffers)              98622

(4 行受影响)

Optimization Queue             Value
------------------------------ -----------
Optimizing                     0
Waiting                        0
Available                      8
Maximum                        8

(4 行受影响)

DBCC CACHESTATS report:
Object Type Hit Ratio              Object Count Avg Cost               Avg Pages              LW Object Count LW Avg Cost            LW Avg Stay (ms)       LW Avg Use Count
----------- ---------------------- ------------ ---------------------- ---------------------- --------------- ---------------------- ---------------------- ----------------------
Proc        0.630434782608696      13           1                      1.92307692307692       0               0                      0                      0
Prepared    0.963360707517372      352          0.948863636363636      4.09375                0               0                      0                      0
Adhoc       0.995789473684211      36           0.916666666666667      2.25                   0               0                      0                      0
ReplProc    0                      0            0                      0                      0               0                      0                      0
Trigger     0.333333333333333      2            1                      1.5                    0               0                      0                      0
Cursor      0.603846153846154      53           1                      6.77358490566038       0               0                      0                      0
Exec Cxt    0.709510936347997      148          0.858108108108108      4.42567567567568       0               0                      0                      0
View        0.966244725738397      5            1                      2.4                    0               0                      0                      0
Default     0                      3            1                      1                      0               0                      0                      0
UsrTab      0                      0            0                      0                      0               0                      0                      0
SysTab      0                      0            0                      0                      0               0                      0                      0
Check       0                      0            0                      0                      0               0                      0                      0
Rule        0                      0            0                      0                      0               0                      0                      0
Summary     0.822976190476191      612          0.931372549019608      4.2140522875817        0               0                      0                      0

(14 行受影响)

#8


看6F的回复,您已经知道问题所在了。

祝好运!

#9


引用 8 楼 claro 的回复:
看6F的回复,您已经知道问题所在了。

祝好运!


晕倒。
我可是那么多个问号呀。
就是不太了解。

#10


这是很正常的,应该增加内存。

#11


32位的sql,想让它用多内存(2G以上、3G以上)还不行呢,必须专门的设置后才可以(也不是直接使用,效率会有折扣)

如果一台机的内存不多,而且还有别的服务也需要内存,那就只好委屈sql了:设置它的最大内存使用量

#12


这么说并不是应用程序有问题而造成的?

#13


引用 9 楼 xiciliu 的回复:
我可是那么多个问号呀。
就是不太了解。
从问号大概能猜到你已经或多或少知道该怎样处理,只不过希望再了解更多。

按你期初的想法,找找原因,可能就有答案了。

#14


我也遇到这样的问题,怎么回事,sqlservr.exe一下低一下高,页面总是报超时,高手指点一下!

#15


超时的问题估计是sql语句有问题,或者是一个sql语句中执行的操作太多。
我曾写过双重嵌套的sql语句,费时的操作太多,执行也是很慢。