数据库内存不足,如何设置内存管理?

qq598235031 2013-04-24 08:06:45
部署环境是win2003(内存 8G) server mssqlserver2005
C#桌面应用程序与数据库部署同一机器上。
在程序中使用sqlserver2005频繁的连接数据库,过大约80小时后,出现下述情况:
1450 在从服务器接收结果时发生传输级错误。 (provider: TCP 提供程序, error: 0 - 系统资源不足,无法完成请求的服务。)
有时间打开本地数据库连接出现,提示 系统内存不足,无法完成请求。
我的程序就是服务器端的程序,频繁的操作数据库,插入或更新,检查程序打开的连接使用完后关闭。
自己觉得是sqlserver2005将内存占满了,所以出现上述情况。具体的原因不是很清楚,请高手指教,谢谢。
...全文
1066 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhaowei303 2013-10-14
  • 打赏
  • 举报
回复
学习了,标记下。
發糞塗牆 2013-10-12
  • 打赏
  • 举报
回复
据我遇到过的情况,其实是代码不够优化,大量的scan、join等导致的
kevin_尛柒 2013-10-12
  • 打赏
  • 举报
回复
稳定运行了2年的系统突然报这个错误。。难道是内存条的问题?
mycodeis0000 2013-06-03
  • 打赏
  • 举报
回复
学习了,~看来真的多逛逛CSDN了
haitao 2013-06-03
  • 打赏
  • 举报
回复
感觉应用的问题可能性比较大 win2003企业版32位,使用4G以上内存(最多64G)没遇到什么问题
KevinLiu 2013-06-01
  • 打赏
  • 举报
回复
数据库有没有DUMP文件?另外数据库错误日志具体的错误代码是什么?701?
最爱午夜 2013-06-01
  • 打赏
  • 举报
回复
那是因为你限制连接池最大连接,这样会有问题,如果并发高,最大连接被限制的话,很多请求连接数据库的会话会因为等待而超时。 还有数据库不会一开始就占用内存,实际上数据库在任务管理器中显示的内存都不会超过,1.8G,大部分的内存用作数据缓存,还有,数据库给每个连接会话2MB的内存,会话多了也可能占用过多内存。
qq598235031 2013-05-31
  • 打赏
  • 举报
回复
谢谢大家,后来使用64位操作系统得到显著改善,另外连接字符串里面加了maxpool=20,minpool=0后 服务器运行平稳。
最爱午夜 2013-05-06
  • 打赏
  • 举报
回复
不对,你的思路有问题, 首先3G内存设置,存在一个问题,windows 2003用的是32位系统,那么服务器的虚拟寻址空间只有2G,开启3G设置后,虚拟寻址空间会达到3G,但是这个时候系统的可用内存就变成1G了,这样服务器会面临很大的问题,内存不足。内存不足时,服务器会强制实行工作集剪切。即使你的内存大于4G,那么增加的部分也只是数据库的数据缓存部分。 建议: 1、程序服务器和数据库服务器分离。 2、安装64位系统。
qq598235031 2013-05-03
  • 打赏
  • 举报
回复
引用 14 楼 xumei_ 的回复:
检查你的程序吧,我以前的一个公司系统也是这样,测试的时候过了一阵子就变得非常慢,最后查明原因,大量的数据库连接没有关闭 导致内存不足
检查程序结果,程序并非连接(远程连接,记录集)没有关闭释放。程序使用短连接,每次打开本地连接后,主动关闭并释放。个人感觉.net回收机制回收有点慢,然后修改为常连接,情况没明显改观,内存使用依然居高。 后来做个测试,后台开启一个线程从另台机器抽取数据和开启50个线程抽取数据,内存使用一样的。所以,个人认为是数据库一开始就把内存占用。 难道像上面的仁兄讲的,需要换操作系统64位的? 服务器上没有其他什么应用程序,360杀毒除外。
专注or全面 2013-05-01
  • 打赏
  • 举报
回复
留名,不懂,楼主找到解决方案了可以分享下,谢谢!
最爱午夜 2013-04-30
  • 打赏
  • 举报
回复
14楼的没有说错,SQLSERVER会自动释放连接对象,你的程序如果没有关闭连接,就会造成内存紧张的情况
seusoftware 2013-04-30
  • 打赏
  • 举报
回复
一般给操作系统留2G,假如32G内存,通过max server memory设置给sql server 30G,2G保留个操作系统。 如果服务器上还有其他程序,那还得多留点内存出来。
Q315054403 2013-04-30
  • 打赏
  • 举报
回复
看情况,内存能受控的是Data Buffer
xumei_ 2013-04-26
  • 打赏
  • 举报
回复
检查你的程序吧,我以前的一个公司系统也是这样,测试的时候过了一阵子就变得非常慢,最后查明原因,大量的数据库连接没有关闭 导致内存不足
大力水手 2013-04-25
  • 打赏
  • 举报
回复
长夜漫漫,无心睡眠,只因公司加工资太低无法养家糊口度日。反正横竖都是饿死,我还是把你的问题回答完了再死吧。首先不知道你的这个C#桌面应用程序是做什么用的。把它起起来会占用多少系统资源。但是首先一点系统选择上有点问题。32的最大寻址空间2的32次方也就是4个G。它又把这4G分成两部分其中一部分用于进程本身使用,另一部分供系统使用。咱们分别叫他俩用户模式和内核模式。那你用64位的系统2的64次方那就比这个数值大多了。你的内存就得到了充分的利用。分配起来也更合理。3GB不说了因为上面没有看到你用。他就是把内核模式减少1G,把用户模式添加1G. 看到你上面开启了PAE,windows server 2003 sp1 不是系统自动开启PAE,你为什么还要手动去配置呀?PAE就是讲系统页表项从4kb增加到8kb,利用多余的空间来将虚拟地址映射到物理内存中多于4GB的部分。虽然windows能识别和管理128GB内存了。但是他的内核模式也翻倍了。AWE也很容易被人误解,他只代表缓冲池中的最大最小内存哦。而不是sqlserver占用的所有内存。比如一个16GB的内存我感觉最大最小内存这只在11GB或12GB比较合适。这样我感觉他才不会应为多页分配,分页(也是系统级别的哦。不是数据库级别的哦,不信你begin tran insert into tbname rollback tran你会问rollback了大量内存却被裁剪。因为分页了。系统向你的数据库要内存了),备份,你的C#桌面应用程序,系统。如果你设置了最大内粗比较大。有开启了AWE,锁定了内存页。我想你的系统,多页分配,分页,备份,C#桌面应用程序,内存就会紧张而且裁剪不掉你的AWE内存。这样系统就因压力过大而出现假死现象。如果我今晚饿不死。祝福我明天找到好工作吧?谢谢。
發糞塗牆 2013-04-25
  • 打赏
  • 举报
回复
發糞塗牆 2013-04-25
  • 打赏
  • 举报
回复
控制最大内存是必要的,但是其实即使你不控制,还是会预留256M给os,可以使用性能计数器去看看是否真的内存有压力
铁歌 2013-04-25
  • 打赏
  • 举报
回复
1、 主要设置min server memory 和 max server memory ,如果同台服务器有多台吃内存大户服务, max server memory 给设置一个值稍大的值出来,别让SQL server把WINDOWS内存都吃完了也别让其他的服务把WINDOWS内存吃完了,这样才会相安无事 2.设置方法可以通过命令方式的,楼上的挺好,还有就是通过SQL SERVER企业管理器进行:鼠标右键服务器\属性\内存 可以看多最大内存和最小内存设置选项。
  • 打赏
  • 举报
回复
卡的时候profile一下,看看数据库跑什么
加载更多回复(8)

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧