数据库服务器吃内存疑问

oreoconansisu 2013-08-07 10:37:14
最近用户反映页面读取插入数据速度比以前慢很多

我看了数据库服务器
发现物理内存总共48G,已经占用了46个G。。。

1.我想问 为何内存会吃的那么厉害

2.应该如何优化调整

谢谢
...全文
528 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 15 楼 oreoconansisu 的回复:
[quote=引用 14 楼 ap0405140 的回复:] 检查一下SQL Server最新的SP补丁是否有安装,如SQL2000 SP4,SQL2005 SP4,SQL2008 SP2等. 我曾遇过这种问题,系统吃内存很大,装了SP补丁后就正常了.
装过SQL2008 SP2补丁[/quote] 吃内存是正常的,如果你不希望sql server占用那么大的内存,那就设置max server memory(MB)小一点
發糞塗牆 2013-11-12
  • 打赏
  • 举报
回复
哇,3个多月了,还没解决?
oreoconansisu 2013-11-11
  • 打赏
  • 举报
回复
引用 14 楼 ap0405140 的回复:
检查一下SQL Server最新的SP补丁是否有安装,如SQL2000 SP4,SQL2005 SP4,SQL2008 SP2等. 我曾遇过这种问题,系统吃内存很大,装了SP补丁后就正常了.
装过SQL2008 SP2补丁
唐诗三百首 2013-10-20
  • 打赏
  • 举报
回复
检查一下SQL Server最新的SP补丁是否有安装,如SQL2000 SP4,SQL2005 SP4,SQL2008 SP2等. 我曾遇过这种问题,系统吃内存很大,装了SP补丁后就正常了.
  • 打赏
  • 举报
回复
1.首先,占用那么多内存并不表示,就不正常。 2.但如果觉得查询变慢了,那就得关注一下了。但查询变慢,和占用那么多的内存,并没有什么必然联系。 3.为了能了解是否真的有问题,首先,你得知道,这些内存都是花在哪儿了。 一般的内存,主要是由数据库页、sql执行计划、网络包等,如果数据大部分都是缓存的数据,那应该问题不大。但如果大部分都由sql执行计划,那就有问题了,可能是由于没有使用绑定变量,导致大量的重复语句,都缓存在内存中。
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
4.接下来,是查询为什么变慢的问题。 向上面说的,可能是由于表经常进行插入,删除,修改,导致了存储碎片,这样会导致查询同样的数据,需要更多的IO,也需要更多的内存,那么效率自然下降,同时内存的效率下降,间接导致需要吃更多的内存,这个可以通过重建表和索引,来完成。 还有,就是随着数据的变化,表的统计信息不够准确,导致查询优化器不能够生成足够优化的执行计划, 那么查询自然会慢,这个主要是通过update statistics 表 ,来更新统计信息就可以。 还有最关键的是,你的查询是否通过索引来访问数据,因为索引的效率更高,否则,用表扫描的话,效率非常差。
wangchangming 2013-08-08
  • 打赏
  • 举报
回复
试着重新生成下索引,更新下统计信息再看
Cloud_Hero 2013-08-07
  • 打赏
  • 举报
回复
通过性能检测,查看一下是硬盘还是其他资源访问过大,导致cpu运行速度过快,内存占用率过大。
oreoconansisu 2013-08-07
  • 打赏
  • 举报
回复
引用 10 楼 public0011 的回复:
占用46G太正常了。如果读写比较频繁。47.5G都可以。关键你这个占用是在那里看到的。不会是在window的任务管理器里面看到的吧
对啊
Q315054403 2013-08-07
  • 打赏
  • 举报
回复
充分利用资源(CPU、RAM)是正道呀。。应该改善的系统设计,或者优化 若有预算,欢迎联系ME
KevinLiu 2013-08-07
  • 打赏
  • 举报
回复
最近用户反映页面读取插入数据速度比以前慢很多 1。先查一下是否有Blocking,是否有WaitType,WaitResource 2。是否有IO问题 3。内存是否有瓶颈 。。。。
oreoconansisu 2013-08-07
  • 打赏
  • 举报
回复
引用 3 楼 wwwwgou 的回复:
#1.每次增删改查数据,都会先把页加载到内存,再处理。如果内存足够,加载进来后,就不再释放,直到超出SQL SERVER设置的最大阈值,或系统控制 #2.监控一下,看是哪些语句执行比较慢;看一下慢的原因,是为什么。才能下结论。 #3.一般来说,在既定的硬件条件下,优化索引是首选
引用 4 楼 DBA_Huangzj 的回复:
个人猜测: 1、过多的增删改操作,导致碎片增多。 2、库越来越大,索引效率降低,或者以前小表的时候即使没有索引都没所谓,现在很大了就显示出重要性。 3、有新的程序部署,影响了既有性能。 4、数据的增长没有计划性,比如短期内操作数量巨大的数据。 5、没有定期维护,到了一定时间段,就从量变到质变。 结论: 1、用性能监视器看看CPU,磁盘、内存等资源,参考网上的“建议”,初步评估和定位问题再哪里。 2、借助sqlserver自带功能,如profiler、dmv、DTA等来找到比较大开销的语句。进行优化。 3、做好定期维护,如索引维护、磁盘空间维护等。
谢谢分析 如有疑问,再来请教哈
發糞塗牆 2013-08-07
  • 打赏
  • 举报
回复
说的比较虚,但是没有真正数据之前,的确也不好猜测,只能先监控看看瓶颈在哪部分。另外还可以查看等待信息,也可以看资源问题。这些不是一个贴能说完的,只能给你个方向,然后到网上找找
發糞塗牆 2013-08-07
  • 打赏
  • 举报
回复
个人猜测: 1、过多的增删改操作,导致碎片增多。 2、库越来越大,索引效率降低,或者以前小表的时候即使没有索引都没所谓,现在很大了就显示出重要性。 3、有新的程序部署,影响了既有性能。 4、数据的增长没有计划性,比如短期内操作数量巨大的数据。 5、没有定期维护,到了一定时间段,就从量变到质变。 结论: 1、用性能监视器看看CPU,磁盘、内存等资源,参考网上的“建议”,初步评估和定位问题再哪里。 2、借助sqlserver自带功能,如profiler、dmv、DTA等来找到比较大开销的语句。进行优化。 3、做好定期维护,如索引维护、磁盘空间维护等。
Shawn 2013-08-07
  • 打赏
  • 举报
回复
#1.每次增删改查数据,都会先把页加载到内存,再处理。如果内存足够,加载进来后,就不再释放,直到超出SQL SERVER设置的最大阈值,或系统控制
#2.监控一下,看是哪些语句执行比较慢;看一下慢的原因,是为什么。才能下结论。
#3.一般来说,在既定的硬件条件下,优化索引是首选
oreoconansisu 2013-08-07
  • 打赏
  • 举报
回复
引用 1 楼 DBA_Huangzj 的回复:
1、数据需要缓存到内存,用起来才快,我就不信oracle、DB2那些不占内存。 2、先不考虑优化,可以使用性能监视器来查看是否真的有内存压力。这个你可以到网上找具体的计数器和阈值
谢谢版主 另外想请教下版主 你觉得速度变慢的可能原因有哪些
發糞塗牆 2013-08-07
  • 打赏
  • 举报
回复
1、数据需要缓存到内存,用起来才快,我就不信oracle、DB2那些不占内存。 2、先不考虑优化,可以使用性能监视器来查看是否真的有内存压力。这个你可以到网上找具体的计数器和阈值
大力水手 2013-08-07
  • 打赏
  • 举报
回复
占用46G太正常了。如果读写比较频繁。47.5G都可以。关键你这个占用是在那里看到的。不会是在window的任务管理器里面看到的吧
所有需求全部来自生产实际,源自生产,贴近实战,提高技能。 生产案例生产库A是一台2012年的数据库服务器,存储是戴尔sc8000数据量有20T。数据库版本是11.2.0.3,该数据库是单实例数据库。使用操作系统目录存储,没有使用ASM存储。需要进行数据库服务器和存储迁移。迁移到新服务器和新存储。迁移到新的rac环境,使用本地方式进行升级。 目标:我们需要迁移数据库A到新服务器,新存储。 源库A数据库版本11.2.0.3数据库类型单实例数据存储使用操作系统目录存储,非ASM存储容量20TosRhel6 目标库B数据库版本19.19数据库类型Rac数据存储ASM容量21TOsRhel7 难点。1-数据库服务器需要进行替换2-存储需要进行替换3-容量大,存储没有多余空间,只能才有原地升级方式4-版本跨度大,需要从11203->11204->1919单实例->1919-pdb-rac. 具体步骤1-源服务器数据库命令行创建11203数据库软件2-源服务器数据库命令行创建11203数据库实例3-在目标服务器克隆源库11.2.0.3数据软件。并且在目标服务器搭建源库的dg库。4-开始真正的割接,割接的时候没有业务的。激活11203dg为主库。5-升级11203到112046-升级11204到19.197-配置19.19单实例数据库为rac数据库中的某个pdb。Over. 针对以前学员提出文档不全的意见,其实文档都是有的,都已经上传到百度网盘。这次实战课程整理文档如下:0-创建源库11203单实例1-通过克隆方式在目标服务器rac上面创建11203数据库软件2-在目标库rac数据库上面创建11203的单实例的dg3-目标库rac安装11204单实例软件和升级11203到112044-11204升级到19c数据库

22,207

社区成员

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

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