SQL Server是如何使用内存

最大的开销一般是用于数据缓存,如果内存足够,它会把用过的数据和觉得你会用到的数据统统扔到内存中,直到内存不足的时候,才把命中率低的数据给清掉。所以一般我们在看statistics io的时候,看到的physics read都是0。其次就是查询的开销,一般地说,hash join是会带来比较大的内存开销的,而merge join和nested loop的开销比较小,还有排序和中间表、游标也是会有比较大的开销。最后我们来看查询的开销,这个开销显然是越低越好,因为我们不能从中得到好处,相反,使用了越多的内存多半意味着查询速度的降低。所以我们一般要避免中间表和游标的使用,在经常作关联和排序的列上建立索引。

我们先来看数据缓存对性能的影响,如果系统中没有其它应用程序来争夺内存,数据缓存一般是越多越好,甚至有些时候我们会强行把一些数据存储在高速缓存中。服务器如果还有其它应用程序,虽然在需要的时候MS SQL会释放内存,但是线程切换、IO等待这些工作也是需要时间的,所以就会造成性能的降低。sqlservr.exe 是很吃内存的,如果不控制的话,他会占光所有的物理内存,这样我们就必须设置MS SQL的最大内存使用。

降低 sqlservr.exe 内存占用率的解决方案:

1、一般情况下都是SQL语句优化的不够好,或者缓存方案使用不当造成,建议尽可能优化SQL语句以及使用合理的缓存方案。

2、优化网站程序,少用或不用session、cache、application之类的缓存方案,还有就是翻页处理不好也是会占很多内存。

3、设置最大服务器内存:打开SQL Server Management Studio,右键服务器SQL Server -> 属性 -> 内存 -> 设置最大服务器内存,这个可根据服务器配置以及需求而定,本例以2G内存为例,设置为物理内存的60%。

如果内存大于或者等于4G的,我一般这么设置(总内存单位为GB):

初始值=(总内存-(总内存/8)-2)*1024
EXEC sys.sp_configure N'max server memory (MB)', N'初始值'
GO
RECONFIGURE WITH OVERRIDE
GO
先预留1GB给OS
4~16GB RAM,则每4GB留1GB,
16GB RAM+,则每8GB留1GB
然后根据Memory\Available Mbytes的值(建议在300MB左右),再逐渐调高MAX Memory Value。

限制服务器内存后报错

程序报错:资源池 'default' 没有足够的系统内存来运行此查询

可以尝试通过更新数据库的统计表信息解决,执行以下的SQL语句即可:

EXEC sp_updatestats

简单理解IIS应用程序池

w3wp.exe是一个IIS进程,在IIS6下,经常出现w3wp.exe的内存及CPU占用不能及时释放,从而导致服务器响应速度很慢。

IIS的程序池默认回收间隔是1740分钟(29小时),在自动回收过程中,应用程序池将会清空,保留在内存中的数据将会被清理(相当于IIS重启)。对于互联网应用程序,为了减少数据库服务器的负担,也许会选择将大量数据暂存在内存中,回收会造成内存数据丢失,如果没有及时保存到数据库中,可能导致应用程序出问题。如果遇到系统使用高峰期,回收将可能导致一段时间应用程序无响应(出现假死状态),给予用户一种很不好的体验。

在优化应用程序池之前,我们应用先了解下程序池的几个配置信息:

发生配置更改时禁止回收:如果为True,应用程序池在发生配置更改时将不会回收。 
固定时间间隔(分钟):超过设置的时间后,应用程序池回收,为0意味着应用程序池不会按固定间隔回收。系统默认设置的时间是1740分钟(29小时)。
禁用重叠回收:如果为true,将发生应用程序池回收,以便在创建另一个工作进程之前退出现有工作进程。 
请求限制:应用程序池在回收之前可以处理的最大请求数。如果值为0,则表示应用程序池可以处理的请求数没有限制。 
生成回收事件日志条目:每发生一次指定的回收事件时便产生一个事件日志条目,里面的明细设置不一一介绍。

问题分析:每1740分钟(29小时)回收一次是否合理?

不太合理,这个周期内,有可能应用程序处于访问高峰期。因为每天的回收时间都是不一样的,很有可能在高峰期回收,就会造成短时间内网站访问出现问题。因此,要避免最大程度的减少对用户的影响,我们需要充分的分析应用程序的访问情况,例如哪个时间段是高峰,

哪个时间段访问人数最少。了解到这些后,应用程序部署人员就应该设定固定的回收时间,例如一个网站凌晨两点访问人数是最少的,那么它可以设置“特定回收时间”在凌晨两点,应用程序池里面的特定时间是支持设定多个的,请注意。

降低 w3wp.exe 内存占用率的解决方案

打开IIS服务管理器 -> 应用程序池 -> 选择网站对应的应用程序池 -> 点击“正在回收”

在弹出的窗口设置特定回收时间(在此之前右键网站应用程序池,选择高级设置,将其固定时间间隔(分钟)设置为0),并设置基于内存的最大值,如下图所示:

解决CPU占用过多

1、在IIS中对每个网站进行单独的应用程序池配置。即互相之间不影响。
2、在任务管理器中增加显示PID字段。就可以看到占用内存或者CPU最高的进程PID
3、在命令提示符下运行iisapp -a。注意,第一次运行,会提示没有js支持,点击确定。然后再次运行就可以了。这样就可以看到PID对应的应用程序池。(iisapp实际上是存放在C:\windows\system32目录下的一个VBS脚本,全名为iisapp.vbs,如果你和我一样,也禁止了Vbs默认关联程序,那么就需要手动到该目录,先择打开方式,然后选“Microsoft (r) Windows Based Script Host”来执行,就可以得到PID与应用程序池的对应关系。)
4、到IIS中察看该应用程序池对应的网站,就ok了,做出上面的内存或CPU方面的限制,或检查程序有无死循环之类的问题。

5、找出最消耗CPU的SQL语句进行优化

-- 找出前50最耗CPU的SQL语法
SELECT TOP 50
qs.total_worker_time/qs.execution_count as [Avg CPU Time],
SUBSTRING(qt.text,qs.statement_start_offset/2,
(case when qs.statement_end_offset = -1
then len(convert(nvarchar(max), qt.text)) * 2
else qs.statement_end_offset end -qs.statement_start_offset)/2)
as query_text,
qt.dbid, dbname=db_name(qt.dbid),
qt.objectid
FROM sys.dm_exec_query_stats qs
cross apply sys.dm_exec_sql_text(qs.sql_handle) as qt
ORDER BY [Avg CPU Time] DESC

转载于:https://www.cnblogs.com/GarsonZhang/p/10514892.html

sqlservr.exe占用大量内存相关推荐

  1. 桌面窗口管理器(dwm.exe)占用高内存的解决方法

    前往我的主页以获得更好的阅读体验桌面窗口管理器(dwm.exe)占用高内存的解决方法 - DearXuan的主页https://blog.dearxuan.com/2022/01/14/%E6%A1% ...

  2. ET.exe占用大量内存怎么办?

    ET.exe是金山表格中的一个进程,用户打开表格时就会出现ET.exe,有用户发现ET.exe占用大量的内存,这可怎么办?ET.exe可以删除吗?下面我们就来看看详细的步骤. ET.exe占用CPU的 ...

  3. services.exe 占用cpu 内存 虚拟内存不足

    郁闷了好几天,终于搞顶了这个问题 症状: 1.系统开机后,N分钟进不了桌面,艰难地打开"任务管理器",发现services.exe占用CPU.内存极高,等了N久,系统提示" ...

  4. iis占用服务器内存,W3wp.exe 进程占用内存高消耗CPU近100%导致网站反应速度缓慢的解决方案...

    如何降低W3WP.EXE占用的内存和CPU?结合网上的诸多建议,主要的解决办法是: a.在IIS中对每个网站进行单独的应用程序池配置: b.合理的配置你的应用程序池: c.找出具体网站站点的程序问题. ...

  5. tiworker.exe是什么程序?tiworker.exe占用大量内容如何解决?

    tiworker.exe是操作系统中的一个组件,最近有用户发现自己电脑中tiworker.exe进程在系统中占用的内存过高,已经严重影响了系统的运行,有什么办法可以解决吗?下面一起和小编来看看这个问题 ...

  6. 解决服务器上 w3wp.exe 和 sqlservr.exe 的内存占用率居高不下的方案

    SQL Server是如何使用内存 最大的开销一般是用于数据缓存,如果内存足够,它会把用过的数据和觉得你会用到的数据统统扔到内存中,直到内存不足的时候,才把命中率低的数据给清掉.所以一般我们在看sta ...

  7. ‍w3wp.exe占用内存过高的问题

    今天下午服务器突然不能访问,通知机房重启后恢复.怀疑是网站asp程序的问题.上网查了查: ****                     **** 在IIS6下,经常出现w3wp的内存占用不能及时释 ...

  8. 桌面内存管理器(dwn.exe)占用内存过高时怎么办?

    桌面内存管理器(dwn.exe)占用内存过高,可以解决的办法多种多样. 桌面内存管理器(dwn.exe)占用内存过高主要是因为存在DWM内存泄漏, 也正是因为这样,DWN内存泄露,不会自动回收内存,导 ...

  9. win7 64位的 svchost.exe 占用内存过大的问题

    svchost.exe 是用来启动系统服务的,所以某个 svchost.exe 占用内存过大,可能就是它启动的那个服务占用内存过大,所以只要停止并禁用那个服务就行了. 一般来说占用内存最大的服务是 S ...

最新文章

  1. Android控件之ImageView探究
  2. [Unity] FlowCanvas 使用注意事项
  3. 新东方java开发待遇_新东方教师薪酬与考核曝光!拿去即用(仅供参考)
  4. 开课吧python小课学了有用吗-和年薪百万的CFO大佬聊天后,我慌了!
  5. C#实现拖放获取文件路径
  6. rz/sz安装与乱码问题
  7. 做个PC端打字小游戏
  8. 如何搭建运营级的网络直播平台
  9. 如何建立强有力的人脉关系?
  10. 【vscode】vscode插件学习(五)
  11. Unity和UE4两大游戏引擎,你该如何选择?
  12. tomcat 8.5.31启动报错:org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLD
  13. 算法笔记:Playing Atari with Deep Reinforcement Learning
  14. 【项目设计】基于OneNet平台的心率监测系统 -嵌入式 -物联网
  15. File Upload(文件上传漏洞)
  16. 【matlab】Matlab中产生正态分布随机数的函数normrnd
  17. php入门学习-----父类子类继承
  18. H.266/VVC代码学习32:VTM5.0解码端最上层函数
  19. 写给自己以及各位程序员,无论你在什么位置,我想你都应该看一下
  20. qt写文本文件换行符_小小换行符乱谈(文本文件vs二进制文件)

热门文章

  1. android app resign之后安装提示INSTALL_PARSE_FAILED_NO_CERTIFICATES的解决办法
  2. OpenGL(二)三维变换
  3. 获取元素在文档上的正确坐标
  4. Apache性能诊断与调优
  5. 一年之后 重温旧“梦”
  6. 【自我感悟致学弟学妹】大三上的感悟,何为真正优秀的人
  7. [转]cookie、sesstion、localstorage、sesstionstorage的使用和区别
  8. [转]2020 年最具潜力 44 个顶级开源项目,涵盖 11 类 AI 学习框架、平台(值得收藏)
  9. 女生不能学理科?python+数据可视化分析15万考生的成绩,刷新了我的认知
  10. 想要轻松入门数据分析,这些知识不得不看!