也问一个SQL Server 2005内存相关问题

轻舟已过万重山 2013-10-18 03:39:32
环境:Microsoft SQL Server 2005 - 9.00.4035.00 (X64) Nov 24 2008 16:17:31 Copyright (c) 1988-2005 Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1 (Build 7600: )

最近发现,32G的内存,大部分情况下都是占用31.7G左右,原来好像一直在20G左右。
这个啥情况?
与此同时,数据库的性能貌似没啥变化。


SQL Server 2005的默认配置没有动过,主要是不懂。
就这个情况,请指点。

...全文
380 22 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
最爱午夜 2013-11-13
  • 打赏
  • 举报
回复
不需要周期性重启,周期性重启会导致日志回滚,同时服务重启后,日志再次的需要还原,同时,重启服务后,小数据库还好,大数据库容易在重启后的一段时间内疯狂的读盘,还有,经常重启服务有可能会导致数据库出现不可预知的疑难问题。
發糞塗牆 2013-11-13
  • 打赏
  • 举报
回复
引用 19 楼 skytear 的回复:
[quote=引用 18 楼 SmithLiu328 的回复:] [quote=引用 17 楼 skytear 的回复:] 计划周六装个SP4,到时候看看效果。 另外,做一个一周自动重启一次的计划任务。
哥啊,没事你重启干嘛?找事情干?[/quote] 不是有人建议周期性重启吗? 重启后,是不是清理了一些长期不用的Buffer之类的? 昨天重启后,现在内存消耗一般在23G左右,原来一直是在31.多G。[/quote]任何DBMS都吃内存,太多太多人觉得SQLServer内存吃那么多是问题,根据某本书的说法,磁盘的速度比内存速度慢接近100万倍,而SQLServer直接操作内存而不是磁盘,每次需要数据才加载,少量数据到没问题,但是大量数据并发的时候,延时相当严重。并且重启会把最重要的一部分东西去掉——执行计划缓存,这样最少第一次运行的时候要重编译,CPU压力会增大。要通过监控内存的使用情况来分析是否存在问题,而不是从任务管理器里面看内存占用就觉得高、有问题。
LongRui888 2013-11-13
  • 打赏
  • 举报
回复
引用 19 楼 skytear 的回复:
[quote=引用 18 楼 SmithLiu328 的回复:] [quote=引用 17 楼 skytear 的回复:] 计划周六装个SP4,到时候看看效果。 另外,做一个一周自动重启一次的计划任务。
哥啊,没事你重启干嘛?找事情干?[/quote] 不是有人建议周期性重启吗? 重启后,是不是清理了一些长期不用的Buffer之类的? 昨天重启后,现在内存消耗一般在23G左右,原来一直是在31.多G。[/quote] 确实会有效,但是一般也可以通过的命令来清理buffer,不过一定要在系统维护期内用,而不要在白天系统繁忙时用: --清除过程缓存 dbcc freeproccache go --清除数据缓存 dbcc dropcleanbuffers go
  • 打赏
  • 举报
回复
引用 18 楼 SmithLiu328 的回复:
[quote=引用 17 楼 skytear 的回复:] 计划周六装个SP4,到时候看看效果。 另外,做一个一周自动重启一次的计划任务。
哥啊,没事你重启干嘛?找事情干?[/quote] 不是有人建议周期性重启吗? 重启后,是不是清理了一些长期不用的Buffer之类的? 昨天重启后,现在内存消耗一般在23G左右,原来一直是在31.多G。
  • 打赏
  • 举报
回复
计划周六装个SP4,到时候看看效果。 另外,做一个一周自动重启一次的计划任务。
KevinLiu 2013-10-24
  • 打赏
  • 举报
回复
引用 17 楼 skytear 的回复:
计划周六装个SP4,到时候看看效果。 另外,做一个一周自动重启一次的计划任务。
哥啊,没事你重启干嘛?找事情干?
Q315054403 2013-10-19
  • 打赏
  • 举报
回复
说明缓存了(Data Buffer and Other Buffer)那么多数据喽,正常
LongRui888 2013-10-19
  • 打赏
  • 举报
回复
另外,你可以通过下面的语句,连接一下缓存的执行计划,各种兑现类型占用了多少内存:


--库缓存(buffer pool中stolen的单页,Multi-page的多页)

--各种对象各占了多少内存:
select objtype, 
       sum(size_in_bytes) as sum_size_in_bytes, 
       count(bucketid) as cache_counts
from sys.dm_exec_cached_plans
group by objtype
LongRui888 2013-10-18
  • 打赏
  • 举报
回复
可以通过下面的dmv视图,来了解内存大概的使用情况,比如reserved和committed内存占用多少,数据页占了多少,stolen也就是单页占了多少,多页占了多少,如果是32位的话,开启了awe的话,awe占用了多少:
--包括:buffer pool中的database cache使用的内存,multi-page使用的内存,stolen memory(Single-page)使用的内存.
select 
    type,
    
	sum(virtual_memory_reserved_kb) as [VM Reserved],   --从buffer pool中保留的大小
	
	sum(virtual_memory_committed_kb) as [VM Committed], --从buffer pool中提交的大小
	
	--是Buffer Pool里的Stolen Memory的大小.在Buffer Pool中通过Stolen分配的,也就是直接Commit分配的内存量.
	sum(single_pages_kb) as [SinlgePage Allocator],
	
	--分配的多页内存量(KB),是使用内存节点的多页分配器分配的内存量。此内存在buffer pool外分配,是SQL Server自己的代码使用的MemToLeave大小。
	sum(multi_pages_kb) as [MultiPage Allocator],

	--内存Clerk使用地址窗口化扩展插件(AWE)分配的内存量。当启用AWE时,只有缓冲池Clerk(MEMORYCLERK_SQLBUFFERPOOL)使用此机制,不可为空值。
    --可以由buffer pool使用的内存量
	sum(awe_allocated_kb) as [AWE Allocated],	
	
	sum(shared_memory_reserved_kb) as [SM Reserved],   --内存Clerk保留的共享内存量,保留给共享内存和文件映射使用.
	
	sum(shared_memory_committed_kb) as [SM Committed]  --内存Clerk提交的共享内存量,和上面的字段一起可以追踪Shared Memory的大小.
		
from sys.dm_os_memory_clerks 
group by type
order by type
LongRui888 2013-10-18
  • 打赏
  • 举报
回复
另外,一般情况下,由于数据库容量比较大,比如100G,那么在执行查询的时候,就会把需要的数据缓存在内存中,以加快查询速度,所以你的sql server 占用接近30多G的内存,可能大部分都是缓存数据了。 还有,语句的解析,执行,也会消耗很多内存,比如,每个执行的sql语句、存储过程都会缓存在内存中,这样,当相同的语句再次执行,或者存储过程再次执行,那么就不用再次编译,就能执行,这样就节省了CPU时间。 但是,如果缓存了太多的sql语句,一般是由于应用程序中没有使用绑定变量,而这样的语句,又大量的执行,所以导致内存中缓存了大量的这种无法重用的语句,不仅好用大量内存,而且无法重用,导致浪费了很大内存,严重的时候,会导致内存不足现象。
LongRui888 2013-10-18
  • 打赏
  • 举报
回复
占用内存多,并不是大问题,因为按照sql server的默认内存设置是,系统 有多少内存,sql server在有需要的时候就会用多少内存。 比如,我原来的公司,服务器是64位的,64G内存,基本上都是sql server占用的,只要性能上没问题,比如,咩有突然变慢的情况,就没什么大问题。
唐诗三百首 2013-10-18
  • 打赏
  • 举报
回复
引用 9 楼 ap0405140 的回复:
看SQL2005版本号,SQL2005 SP4补丁尚未安装喔,请安装一下.. SQL2005 SP4的版本号应该是 Microsoft SQL Server 2005 - 9.00.5069.00
我之前也遇过这个问题,安装SP补丁就正常了. 另: SQL Server服务器最好能定期(如每周)重启一下比较好.
nzperfect 2013-10-18
  • 打赏
  • 举报
回复
引用 楼主 skytear 的回复:
环境:Microsoft SQL Server 2005 - 9.00.4035.00 (X64) Nov 24 2008 16:17:31 Copyright (c) 1988-2005 Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1 (Build 7600: ) 最近发现,32G的内存,大部分情况下都是占用31.7G左右,原来好像一直在20G左右。 这个啥情况? 与此同时,数据库的性能貌似没啥变化。 SQL Server 2005的默认配置没有动过,主要是不懂。 就这个情况,请指点。
从你提供的数据来看,一切都是正常。 但不会是默认设置,这个明显配置了sql server 启动帐号的lock page in memory。 这是推荐设置。
唐诗三百首 2013-10-18
  • 打赏
  • 举报
回复
看SQL2005版本号,SQL2005 SP4补丁尚未安装喔,请安装一下.. SQL2005 SP4的版本号应该是 Microsoft SQL Server 2005 - 9.00.5069.00
發糞塗牆 2013-10-18
  • 打赏
  • 举报
回复
如果你现在内存没有压力,那就没必要加,sqlserver和windows还不至于不会调整内存使用。对于数据库,优化代码和设计往往才是根本,加资源还是要先考虑是否已经到达最大吞吐量。我的文章有介绍一些计数器,可以去监控一下是否到达建议的阈值
  • 打赏
  • 举报
回复
学习了,至于“如何识别是否有内存压力”,也就是我是不是要再加内存,这个问题,看了不太懂。 能再解释一下不?再加内存,也是耗完?
guguda2008 2013-10-18
  • 打赏
  • 举报
回复
有新的查询就会产生新的内存需求,变大是正常的
發糞塗牆 2013-10-18
  • 打赏
  • 举报
回复
内存这东西几本书都讲不完,大概就那样,不要过多在意用了多少,而是检查是否有压力。当然用的多还是要监控
發糞塗牆 2013-10-18
  • 打赏
  • 举报
回复
主要内存用于: 1、缓存所需数据,sqlserver不直接操作磁盘上的数据,需要用时会从磁盘加载到内存,这部分是内存最大的消耗者,而且除非内存有压力,不然一般数据会驻留内存相当长的时间,除非重启或者用DBCC命令清除。 2、缓存执行计划,减少编译时间,降低CPU压力。提高重用机会 看sqlserver的内存不能仅看用了多少,还要借助某些计数器或者其他技术来识别是否有内存压力,可以看看我的文章:http://blog.csdn.net/dba_huangzj/article/details/8627000
Landa_Jimmy 2013-10-18
  • 打赏
  • 举报
回复
应该是正常,sqlserver2005默认内存设置是无限大,只用那麼多的话证明那些足够它内部数据转换的了。 手动设置 SQL Server 内存选项有两种主要方法: 第一种方法,将 min server memory 和 max server memory 设置为同一值。此值与达到该值后分配给 SQL Server 缓冲池的固定内存量相对应。 第二种方法,将 min server memory 和 max server memory 设置成一个内存范围。这种方法在系统或数据库管理员希望配置 SQL Server 实例,同时又要考虑在同一台计算机上运行的其他应用程序的内存需求时很有用。 min server memory 保证了 SQL Server 实例的缓冲池可用的最小内存量。SQL Server 不会在启动时立即分配 min server memory 指定的内存量。不过,除非降低 min server memory 的值,否则当内存使用量由于客户端负荷而达到该值后,SQL Server 不能从已分配的缓冲池中释放内存。 max server memory 避免了 SQL Server 缓冲池使用的内存量多于指定的内存量,这样剩余的可用内存可以用来快速启动其他应用程序。SQL Server 不会在启动时立即分配 max server memory 指定的内存量。内存使用量会随着 SQL Server 的需要增加,直到达到 max server memory 指定的值。除非提高 max server memory 的值,否则 SQL Server 不能超过此内存使用量。
加载更多回复(2)
SQL Server 2005微软官方权威参考书.   公球公认SQL Server 2005 经典著作..   数据库“铁人”、微软MVP胡百敬先生鼎力推荐   微软SQL Server 总部Principal Group 项目经理朱凌志鼎力推荐   本书详细介绍了数据引擎的基础运作,包含了数据库的设定与数据实际在硬盘的摆放、索引结构、事务与锁定等。除了解释设计理念与运作原理外,还辅之以测试验证的方式。数据库开发者和管理员可从中获得最优的方法、务实的建议和实例代码来帮助他们掌握创建和维护企业级关系数据库所需的复杂技术。该书获得资深专家关于创建和维护健壮数据库的高屋建瓴般的视野和入木三分的剖析,十分适合有一定数据库基础的读者学习。 内容简介 本书是Inside Microsoft SQL Server 2000的作者Kalen Delaney的又一经典著作,是Inside Microsoft SQL Server 2005系列四本著作中的一本。本书对SQL Server 2005存储引擎方面的知识进行了全面而详细的阐述,包括数据库文件、日志和恢复、表、索引及其管理、锁定和并发等内容。除了解释设计理念与运作原理外,书中还辅之以大量简短而有力的实例。您将跟随一位广受欢迎的作家同时也是SQL Server资深专家一起深入探索SQL Server存储引擎的技术内幕。   本书适合于专业数据库开发者、BI开发者、DBA和以SQL Server作为后台数据库的一般应用程序开发者。本书不仅适合SQL Server 2005的初级读者,也适合SQL Server 2005的中高级读者。读者可以从中获得最优的方法、务实的建议和实例代码来帮助他们掌握创建和维护企业级关系数据库所需的复杂技术。本书是所有SQL Server 2005用户的案头必备之书。 作者简介 Kalen Delaney,她还是微软出版社inside SQL Sever丛书的编辑。她从1987年开始便一直从事SQL Server相关的工作,1995年被评为MVP(微软最有价值专家》。她同时也是Solid Quality Learning的首席顾和创始人。除此之外,她还是SQL Server Magazine的优秀编辑和专栏作家,她还写作了大量的SQL Server类书籍,包括著名的Inside Microsoft SQL Server2000。 目录 前言 致谢 引言 第1章 SQL Server 2005 的安装与升级  1.1 SQL Server 2005安装前提   SQL Server 2005 版本   软件要求   硬件要求  1.2 安装前决策   安全性和用户上下文   字符与排序规则   排序次序   安装SQL Server的多个实例   安装SQL Server命名实例  1.3 做好安装准备   SQL Server 2005升级向导  1.4 迁移还是升级   迁移   升级   升级后的操作  1.5 选择组件   SQL Server数据库服务(数据库引擎)   Analysis Services   Reporting Services   Notification Services   Integration Services   工作站组件、联机丛书及开发工具  1.6 小结 第2章 SQL Server 2005体系结构  2.1 SQL Server引擎组件   观测数据库引擎行为   协议   表格格式数据流(TDS)端点   关系引擎   存储引擎   SQLOS  2.2 内存   缓冲池和高速数据缓冲区   访内存中的数据页   管理数据高速缓冲区中的页面   检查点   管理其他高速缓存中的内存   调节内存大小   调节缓存池大小  2.3 小结 第3章 SQL Server 2005的配置  3.1 使用SQL Server 配置管理器   配置网络协议   默认的网络配置   管理服务  3.2 系统配置   任务管理   资源分配   系统分页文件的位置   非必需的服务   网络协议   与SQL Server 早期版本之间的兼容性   跟踪标记(Trace Flags)   SQL Server 的配置设定   内存选项   调度选项(Scheduling Options)   磁盘I/O 选项   查询处理选项   默认跟踪(Default Trace)  3.3 小结 第4章 数据库和数据库文件 第5章 日志和恢复 第6章 表 第7章 索引的内部构造和管理 第8章 锁定和并发

22,300

社区成员

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

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