SQL 2005 占用内存过多,执行效率很低 急救

qingtian6 2007-11-24 10:25:12
前两天服务器硬件故障,重做了系统,2003的系统打了sp2补丁,用的SQL Server2005 也打了sp2的补丁。但现在sql的服务一开,内存就不停的攀升,然后就一直维持在1G左右,而且sql的执行效率很低,导致网站现在访问超慢,重做系统以前都是好好的,访问速度也还可以。

请问各位高手,是什么原因导致的呢?有没有什么解决办法?
我估计是哪里的配置没有弄好,但找不出原因来。急救啊
...全文
902 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
stzlm 2008-01-16
  • 打赏
  • 举报
回复
网络会影响到SQL的内存占用???
qingtian6 2007-12-03
  • 打赏
  • 举报
回复
问题解决了。但不是SQL的问题,网络的原因哈。
谢谢各位了。
hb_gx 2007-11-26
  • 打赏
  • 举报
回复
如果说内存一直维持在1G左右,那么的确是小了一点

SqlServer2005本身运行就需要很多内存,更何况还要多用户同时查询数据

这样的情况需要升级服务器了,不过重装的问题,个人学习这样的内存是足够了
qingtian6 2007-11-26
  • 打赏
  • 举报
回复
ivyrich

等 级:
发表于:2007-11-25 22:06:1710楼 得分:0
问一声,你重装的OS,是64吗?



==============

不是,32的
qingtian6 2007-11-26
  • 打赏
  • 举报
回复
问题还没解决,准备下午去机房把SQL重装一遍。
tcxx2008 2007-11-26
  • 打赏
  • 举报
回复
问题解决了,请把答案放在这,我关注这问题和你,楼猪,我爱你滴
qingtian6 2007-11-26
  • 打赏
  • 举报
回复
hb_gx
高升
等 级:
发表于:2007-11-26 12:44:5715楼 得分:0
如果说内存一直维持在1G左右,那么的确是小了一点

SqlServer2005本身运行就需要很多内存,更何况还要多用户同时查询数据

这样的情况需要升级服务器了,不过重装的问题,个人学习这样的内存是足够了

=====================================

没看懂红色的那句。我觉得是sql安装的有问题导致的这种情况。也观察几天了,最大嫌疑就在sql上。
ivyrich 2007-11-26
  • 打赏
  • 举报
回复
前几天同事装新服务器,最先用64位的2003, 再安装SQL2005, 他装好后我试着使用,觉得慢得很,然后他又重装了,改用32位的,现在速度比之前快了.
rouqu 2007-11-25
  • 打赏
  • 举报
回复
不错 9楼说的很全
ivyrich 2007-11-25
  • 打赏
  • 举报
回复
问一声,你重装的OS,是64吗?
qingtian6 2007-11-24
  • 打赏
  • 举报
回复
难道就没有人遇到这种情况吗?

兄弟姐妹们,救命啊。
qingtian6 2007-11-24
  • 打赏
  • 举报
回复
happyflystone
无枪狙击手
等 级:
发表于:2007-11-24 10:37:213楼 得分:0
会不会是系统本身装得就有问题呀

===========================

但如果把sql停掉,系统用的也挺正常。sql内存攀高以后,它还占用10到30的cpu,那样系统就很慢了。很容易出现假死的现象。


qingtian6 2007-11-24
  • 打赏
  • 举报
回复
roy_88
中国风_燃烧你的激情!!!
等 级:
发表于:2007-11-24 10:34:482楼 得分:0
用事件探测器查看一下原因
=====================

小弟经验不足,看也看不出什么原因,能不能说说有可能导致 这种情况 的原因,那样找也有个目标。谢谢了。
-狙击手- 2007-11-24
  • 打赏
  • 举报
回复
会不会是系统本身装得就有问题呀
中国风 2007-11-24
  • 打赏
  • 举报
回复
用事件探测器查看一下原因
qingtian6 2007-11-24
  • 打赏
  • 举报
回复
在网上也找了很久,好多人都说sql的内存分配机制,稍微占用多一点的内存是正常的,不影响使用。

但我这种情况明显不正常,sql的执行效率极低,会不会是其他的什么原因。我把服务器重启后,才开始访问还很快,等sql占用的内存攀高以后,整个网站就跟蜗牛一样了。郁闷。
-狙击手- 2007-11-24
  • 打赏
  • 举报
回复
最大的开销一般是用于数据缓存,如果内存足够,它会把用过的数据和觉得你会用到的数据统
统扔到内存中,直到内存不足的时候,才把命中率低的数据给清掉。所以一般我们在看statistics io的时候,看到的physics read都是0。

  其次就是查询的开销,一般地说,hash join是会带来比较大的内存开销的,而merge join和nested loop的开销比较小,还有排序和中间表、游标也是会有比较大的开销的。

  所以用于关联和排序的列上一般需要有索引。

  再其次就是对执行计划、系统数据的存储,这些都是比较小的。

  我们先来看数据缓存对性能的影响,如果系统中没有其它应用程序来争夺内存,数据缓存一般是越多越好,甚至有些时候我们会强行把一些数据pin在高速缓存中。但是如果有其它应用程序,虽然在需要的时候mssql会释放内存,但是线程切换、io等待这些工作也是需要时间的,所以就会造成性能的降低。这样我们就必须设置mssql的最大内存使用。可以在sql server 属性(内存选项卡)中找到配置最大使用内存的地方,或者也可以使用sp_configure来完成。如果没有其它应用程序,那么就不要限制mssql对内存的使用。

  然后来看查询的开销,这个开销显然是越低越好,因为我们不能从中得到好处,相反,使用了越多的内存多半意味着查询速度的降低。所以我们一般要避免中间表和游标的使用,在经常作关联和排序的列上建立索引。
w2jc 2007-11-24
  • 打赏
  • 举报
回复
补充,SQL的内存不要设置得太小,否则物理I/O增多,会更慢。
可以多尝试几个值,找到一个系统的平衡点。
w2jc 2007-11-24
  • 打赏
  • 举报
回复
SQL比较喜欢把东西都放在内存里面,自然是越多越好。限制一下就可以了。


-- 打开SQL高级选项设置
USE master
EXEC sp_configure 'show advanced options', 1
RECONFIGURE WITH OVERRIDE

-- 设置最大内存为 512M
USE master
EXEC sp_configure 'max server memory (MB)', 512
RECONFIGURE WITH OVERRIDE


22,209

社区成员

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

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