SQLServer内存瓶颈——MEMORYCLERK_SQLOPTIMIZER

内存瓶颈——MEMORYCLERK_SQLOPTIMIZER

问题

用户应用报错:

There is insufficient system memory in resource pool 'internal' to run this query

排查

报错是由于内存不足,SQLServer启动后内存开销会很快达到max server memory,所以通过OS看SQLServer内存开销没有意义,我们排查的方向应该是这时候内存被什么占用了/是否有异常/如何优化

我们需要了解SQLOS,它是SQLServer中抽象出的OS包含任务调度、内存管理、异常处理、第三方代码控制等功能,会根据每个过程的特性做内存分类提更详细的信息

SQLOS内存管理记录了很多信息在内部视图中(sys.dm_os_memory_clerks,sys.dm_os_sys_info,sys.dm_os_sys_info,sys.dm_os_ring_buffers,sys.dm_os_memory_nodes...),并且在异常情况会打印DBCC MEMORYSTATUS的结果到日志中,一般而言如果有现场我们先看现场(利用视图),如果事后分析701会在内存中有memorystatus提供给我们

内存701

SinglePage占了90%

MEMORYCLERK_SQLOPTIMIZER是主要开销

MEMORYCLERK_SQLOPTIMIZER过高一般情况是由于存在大量的AD-HOC

问题再复现时现场可以先查MEMORYCLERK_SQLOPTIMIZER的占用

select SUM(single_pages_kb)*1.0/1024 as total_single_pages_MB,
SUM(multi_pages_kb)*1.0/1024 as total_multi_pages_MB
from sys.dm_os_memory_clerks where type='MEMORYCLERK_SQLOPTIMIZER'

解决建议

方案一:实例级别参数调整,第一次查询不存完整的plan

sp_configure N'show advanced options',1
GO
reconfigure
GO
sp_configure N'optimize for ad hoc workloads',1
GO
sp_configure N'show advanced options',1
GO
reconfigure
GO

方案二:应用做些参数化调整

时间: 2025-01-02 21:39:42

SQLServer内存瓶颈——MEMORYCLERK_SQLOPTIMIZER的相关文章

SQL Server 数据页缓冲区的内存瓶颈分析_MsSql

SQL Server会把经常使用到的数据缓存在内存里(就是数据页缓存),用以提高数据访问速度.因为磁盘访问速度远远低于内存,所以减少磁盘访问量同样是数据库优化的重要方面. 当数据页缓存区出现内存不足,则会出现查询慢,磁盘忙等等问题. 分析方法:主要是用到性能计数器. 查看如下性能计数器: 1. SQL SERVER:Buffer Manager-Lazy Writes/sec:内存不足则会频繁调用Lazy Writer把数数据写入磁盘,此值会经常不为0. 2. SQL SERVER:Buffer

SQL Server 数据页缓冲区的内存瓶颈分析

SQL Server会把经常使用到的数据缓存在内存里(就是数据页缓存),用以提高数据访问速度.因为磁盘访问速度远远低于内存,所以减少磁盘访问量同样是数据库优化的重要方面. 当数据页缓存区出现内存不足,则会出现查询慢,磁盘忙等等问题. 分析方法:主要是用到性能计数器. 查看如下性能计数器: 1. SQL SERVER:Buffer Manager-Lazy Writes/sec:内存不足则会频繁调用Lazy Writer把数数据写入磁盘,此值会经常不为0. 2. SQL SERVER:Buffer

有关SQLServer内存问题(收藏)

server|sqlserver|问题 http://www.richsearch.com/search/search.aspx?page=1&S1=%2B%E5%86%85%E5%AD%98%20%2B"SQL%20Server"给SQLServer分配多些内存(默认是动态分配,可以把最小值改变为一个比较大的数据).查看把数据库的日志文件和数据文件大小,并适当调节.-----------------插入记录慢,可能是因为表使用了CLUSTERED 索引,而新的记录导致了大量数

有关SQLServer内存问题

server|sqlserver|问题 http://www.richsearch.com/search/search.aspx?page=1&S1=%2B%E5%86%85%E5%AD%98%20%2B"SQL%20Server" 给SQLServer分配多些内存(默认是动态分配,可以把最小值改变为一个比较大的数据).查看把数据库的日志文件和数据文件大小,并适当调节.-----------------插入记录慢,可能是因为表使用了CLUSTERED 索引,而新的记录导致了大量

SQLServer CPU瓶颈问题的判定和解决

title: SQLServer · CASE分析 · CPU瓶颈问题的判定和解决 author: 天铭 发现问题 告警 数据库出现无法登陆的告警 定位原因 监控 活跃连接堆积 实例CPU持续99%+ 实例总连接数超过规格活跃链接堆积是结果,能堆积到500+可想对业务的影响已经非常严重了连接数超过的原因跟业务上的限制策略有关 现场 实例正常连接已经无法建立,只能利用DAC协助诊断使用DAC 实例等待 select lastwaittype,COUNT(*) from sys.sysprocess

sqlserver内存释放

  注:本人在用sqlserver2000测试 ,很多命令都不能用 由于Sql Server对于系统内存的管理策略是有多少占多少,除非系统内存不够用了(大约到剩余内存为4M左右), Sql Server才会释放一点点内存.所以很多时候,我们会发现运行Sql Server的系统内存往往居高不下. 这些内存一般都是Sql Server运行时候用作缓存的,例如你运行一个select语句, 那么Sql Server会将相关的数据页(Sql Server操作的数据都是以页为单位的)加载到内存中来, 下一次

跪求 ibatis 不识别 sqlserver 内存表问题

问题描述 selectproductplan.id,productplan.planname,user1.nameplannername,productplan.planorgan,productplan.plandate,productplan.startdate,productplan.enddate,organ.name,order1.productorder,amount.productplanamount,amount.packingamountfrombm_rl_planplanne

我是如何在SQLServer中处理每天四亿三千万记录的

首先声明,我只是个程序员,不是专业的DBA,以下这篇文章是从一个问题的解决过程去写的,而不是一开始就给大家一个正确的结果,如果文中有不对的地方,请各位数据库大牛给予指正,以便我能够更好的处理此次业务. 项目背景 这是给某数据中心做的一个项目,项目难度之大令人发指,这个项目真正的让我感觉到了,商场如战场,而我只是其中的一个小兵,太多的战术,太多的高层之间的较量,太多的内幕了.具体这个项目的情况,我有空再写相关的博文出来. 这个项目是要求做环境监控,我们暂且把受监控的设备称为采集设备,采集设备的属性

SQL Server 性能调优(一)——从等待状态判断系统资源瓶颈

原文:SQL Server 性能调优(一)--从等待状态判断系统资源瓶颈 通过DMV查看当时SQL SERVER所有任务的状态(sleeping.runnable或running) 2005.2008提供了以下三个视图工详细查询: DMV 用处 Sys.dm_exec_requests 返回有关在SQL Server中执行的每个请求的信息,包括当前的等待状态 Sys.dm_exec_sessions 对于每个通过身份验证的会话都返回相应的一行.此时图是服务器范围的视图.此视图首先可以查到服务器负