部署环境是win2003(内存 8G) server mssqlserver2005
C#桌面应用程序与数据库部署同一机器上。
在程序中使用sqlserver2005频繁的连接数据库,过大约80小时后,出现下述情况:
1450 在从服务器接收结果时发生传输级错误。 (provider: TCP 提供程序, error: 0 - 系统资源不足,无法完成请求的服务。)
有时间打开本地数据库连接出现,提示 系统内存不足,无法完成请求。
我的程序就是服务器端的程序,频繁的操作数据库,插入或更新,检查程序打开的连接使用完后关闭。
自己觉得是sqlserver2005将内存占满了,所以出现上述情况。具体的原因不是很清楚,请高手指教,谢谢。
C#桌面应用程序与数据库部署同一机器上。
在程序中使用sqlserver2005频繁的连接数据库,过大约80小时后,出现下述情况:
1450 在从服务器接收结果时发生传输级错误。 (provider: TCP 提供程序, error: 0 - 系统资源不足,无法完成请求的服务。)
有时间打开本地数据库连接出现,提示 系统内存不足,无法完成请求。
我的程序就是服务器端的程序,频繁的操作数据库,插入或更新,检查程序打开的连接使用完后关闭。
自己觉得是sqlserver2005将内存占满了,所以出现上述情况。具体的原因不是很清楚,请高手指教,谢谢。
2.设置方法可以通过命令方式的,楼上的挺好,还有就是通过SQL SERVER企业管理器进行:鼠标右键服务器\属性\内存 可以看多最大内存和最小内存设置选项。
后来服务器再加了8G,总共16G内存,操作系统BOOT.INI添加/PAE 设置数据库最大内存值为大约6G,开启AWE。
一周内软件出现两次假死状态。
另外 参考你的文章 http://blog.csdn.net/dba_huangzj/article/details/8627000发现 Memory: Available Mbytes,范围15402~15407 平均值15405 MB
其他性能计数器如下
1.Page/sec 范围 0~704 平均7
2.Uaage 范围 9~9 平均9
3.Buffer cache hit radio 范围 100-100 平均100
4.Page life expectancy 范围 15847-15946 平均15897
5.Memoory grants pending 范围 0-0 平均 0 在此再次感谢。
你刚开始说“系统资源不足,无法完成请求的服务”,“提示 系统内存不足,无法完成请求。
” 那很明显是AWE吃内存太厉害,后来“ 设置数据库最大内存值”后问题解决了是吧?
现在的问题是“一周内软件出现两次假死状态。 ” 从描述上来看,跟SQL SERVER没有直接的联系了,你说的假死应该是hang吧,然后呢?你怎么处理的?
另外,你软件是用什么做的?.NET吗?
hang可以通过DUMP内存debug来解决。
软件是.net开发的,另外CPU使用率基本平稳波动不大,主要是程序后台频繁的操作数据库,插入或更新操作。
检查程序结果,程序并非连接(远程连接,记录集)没有关闭释放。程序使用短连接,每次打开本地连接后,主动关闭并释放。个人感觉.net回收机制回收有点慢,然后修改为常连接,情况没明显改观,内存使用依然居高。
后来做个测试,后台开启一个线程从另台机器抽取数据和开启50个线程抽取数据,内存使用一样的。所以,个人认为是数据库一开始就把内存占用。难道像上面的仁兄讲的,需要换操作系统64位的?服务器上没有其他什么应用程序,360杀毒除外。
首先3G内存设置,存在一个问题,windows 2003用的是32位系统,那么服务器的虚拟寻址空间只有2G,开启3G设置后,虚拟寻址空间会达到3G,但是这个时候系统的可用内存就变成1G了,这样服务器会面临很大的问题,内存不足。内存不足时,服务器会强制实行工作集剪切。即使你的内存大于4G,那么增加的部分也只是数据库的数据缓存部分。
建议:
1、程序服务器和数据库服务器分离。
2、安装64位系统。
还有数据库不会一开始就占用内存,实际上数据库在任务管理器中显示的内存都不会超过,1.8G,大部分的内存用作数据缓存,还有,数据库给每个连接会话2MB的内存,会话多了也可能占用过多内存。
win2003企业版32位,使用4G以上内存(最多64G)没遇到什么问题