转载链接:https://www.cnblogs.com/feiyuhuo/p/5382777.html

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最高的进程PI
  3. 在命令提示符下运行iisapp -a。注意,第一次运行,会提示没有js支持,点击确定。然后再次运行就可以了。这样就可以看到PID对应的应用程序池。(iisapp实际上是存放在C:\windows\system32目录下的一个VBS脚本,全名为iisapp.vbs,如果你和我一样,也禁止了Vbs默认关联程序,那么就需要手动到该目录,先择打开方式,然后选“Microsoft ® 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

转载:解决服务器上 w3wp.exe 和 sqlserver.exe 的内存占用率居高不下的方案相关推荐

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

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

  2. [乐意黎原创]Win10 升级1909版本后,内存占用率居高不下的解决办法

    前几天, 打开系统更新,win 10 推送了 1909版本, 便更新了使用. 起初没觉得有啥明显的变化,这几天总觉得机子卡的卡的严重,查看了下内存,占用率居高不下. 把打开的进程全杀了,也没有用. 之 ...

  3. 解决服务器上MSDTC不可用的办法

    解决服务器×××上的MSDTC不可用办法 摘自:http://www.cnblogs.com/markhe/archive/2009/04/30/1447223.html MSDTC(分布式交易协调器 ...

  4. 通过离线安装anaconda环境解决服务器上的TensorFlow安装和cuda依赖问题

    通过anaconda离线安装解决服务器上的TensorFlow安装和cuda依赖问题 学校的主机只能通过校园VPN连接,不能连接外网,无法直接使用pip或者conda install安装Python依 ...

  5. tomcat服务器cpu占用率居高不下的原因分析及解决

    tomcat服务器cpu占用率居高不下的原因分析及解决 偶遇服务器cpu飙升,过段时间后正常,反反复复 获取cpu占用高的java进程运行中的堆栈信息 偶遇服务器cpu飙升,过段时间后正常,反反复复 ...

  6. Win10系统内存占用率太高的解决办法,怎么办?

    作者:1466 链接:https://www.zhihu.com/question/39716538/answer/883031599 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业 ...

  7. hbase占用内存过高_内存占用率过高怎么办?Win10电脑内存占用率很高原因和解决方法...

    内存占用率过高,是电脑十分常见的电脑故障,出现的现象就是什么软件还没有打开,内存占用了70%以上,甚至是99%,出现电脑明显卡顿的问题.不过想要解决内存占用率高不是简单的事情,因为可能性比较多,可能是 ...

  8. win10内存占用率过高怎么办_DNF:WIN10玩DNF卡顿,内存占用过高的解决方法

    无论你是喜欢正经的职业百科还是搞笑的DNF趣事,点点关注不迷路 小编会努力继续给大家带来干货满满的文章,您的关注和收藏是最大的支持~ 各位勇士新年快乐,今天是初二了,祝大家玩的开心. 今天给大家分享一 ...

  9. win10关闭快速启动_内存占用率过高怎么办?Win10电脑内存占用率很高的原因和解决方法...

    内存占用率过高,是电脑十分常见的电脑故障,出现的现象就是什么软件还没有打开,内存占用了70%以上,甚至是99%,出现电脑明显卡顿的问题.不过想要解决内存占用率高不是简单的事情,因为可能性比较多,可能是 ...

最新文章

  1. 重构当当网交易系统!
  2. 柳叶刀发布陈薇团队新冠疫苗试验结果:安全,能诱导免疫反应
  3. HTML DOM 方法
  4. java中如何切割图片_Java 切割图片代码
  5. spring、spring-boot配置文件属性内容加解密
  6. 如何解决Mac上安装Axure首次打开报错的问题?
  7. Kubernetes 小白学习笔记(14)--k8s集群路线-join原理
  8. github-markdown-css使用说明
  9. java md5加密解密类_Java实现MD5加密解密类
  10. 连续时间傅立叶变换和拉普拉斯变换
  11. 湿化学清洗过程中晶片污染控制方法
  12. 如何充分利用点赞功能提升Linkedin账号曝光率和活跃度
  13. 5V降压1.8V芯片,稳压电路设计建议PW2059
  14. TMS Sphinx Alexandria Full Source
  15. 教育科研先进个人发言稿
  16. vanilla js_用Vanilla js编写前端组件
  17. sql查询之 max使用
  18. 使用SQL语句修改MYSQL数据库密码
  19. 基于Authorware课件的具有导航功能的ActiveX控件的设计和实现
  20. 学习Linux命令(9)

热门文章

  1. 学python有必要用固态硬盘吗-pythonssd
  2. 菲尔博士的三十六交际方式
  3. Linux中 strsep 函数 详解
  4. opencv 图像金字塔及图像重建、融合
  5. 西门子s7 计算机通讯,S7-1200与电脑网线通讯-工业支持中心-西门子中国
  6. C# 实现安卓和iOS app 读写数据库,实现手机本地存储
  7. Ring3无敌进程让你的进程变得和smss.exe一样支持64
  8. Java9-17新特性
  9. Android SDK Windows安装教程图解
  10. 关于ISO七层模型你应该知道的东西