SQL Server 占用内存太高,查找占用内存高以及影响其性能的sql语句及解决方法
2023-09-11 14:15:13 时间
--SQL Server 占用内存太高,查找占用内存高以及影响其性能的sql语句
:
--方法一:
SELECT s2.dbid,
s1.sql_handle,
(SELECT TOP 1 SUBSTRING(s2.text,statement_start_offset / 2+1 ,
( (CASE WHEN statement_end_offset = -1
THEN (LEN(CONVERT(nvarchar(max),s2.text)) * 2)
ELSE statement_end_offset END) - statement_start_offset) / 2+1)) AS sql_statement,
execution_count,
plan_generation_num,
last_execution_time,
total_worker_time,
last_worker_time,
min_worker_time,
max_worker_time,
total_physical_reads,
last_physical_reads,
min_physical_reads,
max_physical_reads,
total_logical_writes,
last_logical_writes,
min_logical_writes,
max_logical_writes
FROM sys.dm_exec_query_stats AS s1
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS s2
WHERE s2.objectid is null
ORDER BY last_worker_time desc,s1.sql_handle, s1.statement_start_offset, s1.statement_end_offset;
--方法二:
--使用以下语句查找出什么语句占内存最高,针对占内存高的语句进行优化
SELECT SS.SUM_EXECUTION_COUNT,
T.TEXT,
SS.SUM_TOTAL_ELAPSED_TIME,
SS.SUM_TOTAL_WORKER_TIME,
SS.SUM_TOTAL_LOGICAL_READS,
SS.SUM_TOTAL_LOGICAL_WRITES
FROM (SELECT S.PLAN_HANDLE,
SUM(S.EXECUTION_COUNT)SUM_EXECUTION_COUNT,
SUM(S.TOTAL_ELAPSED_TIME)SUM_TOTAL_ELAPSED_TIME,
SUM(S.TOTAL_WORKER_TIME)SUM_TOTAL_WORKER_TIME,
SUM(S.TOTAL_LOGICAL_READS)SUM_TOTAL_LOGICAL_READS,
SUM(S.TOTAL_LOGICAL_WRITES)SUM_TOTAL_LOGICAL_WRITES
FROM SYS.DM_EXEC_QUERY_STATS S
GROUP BY S.PLAN_HANDLE
) AS SS
CROSS APPLY SYS.dm_exec_sql_text(SS.PLAN_HANDLE)T
ORDER BY SUM_TOTAL_LOGICAL_READS DESC
--方法三:
--大的运算,一般是报表之类的, 找一下最近运行超过3秒的sql,按消耗秒数降序看下就差不多了
SELECT TOP 10 OBJECT_NAME(qt.objectid, qt.dbId) AS procName,
DB_NAME(qt.dbId) AS [db_name],
qt.text AS SQL_Full,
SUBSTRING(
qt.text,
(qs.statement_start_offset / 2) + 1,
(
(
CASE statement_end_offset
WHEN -1 THEN DATALENGTH(qt.text)
ELSE qs.statement_end_offset
END
- qs.statement_start_offset
) / 2
) + 1
) AS SQL_Part --统计对应的部分语句
,
qs.creation_time,
qs.last_execution_time,
qs.execution_count,
qs.last_elapsed_time / 1000000 AS lastElapsedSeconds,
qs.last_worker_time / 1000000 AS lastCpuSeconds,
CAST(
qs.total_elapsed_time / 1000000.0 / (
CASE
WHEN qs.execution_count = 0 THEN -1
ELSE qs.execution_count
END
) AS DECIMAL(28, 2)
) AS avgDurationSeconds,
CAST(qs.last_logical_reads AS BIGINT) * 1.0 / (1024 * 1024) * 8060 AS
lastLogicReadsMB,
qs.last_logical_reads,
qs.plan_handle
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS qt
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) AS p
WHERE qs.last_execution_time >= CONVERT(CHAR(10),GETDATE(),120)+' 08:00' --今天8点之后的慢SQL
AND qs.last_elapsed_time >= 3 * 1000 * 1000 --只取执行时间大于 3 秒的记录
AND qt.[text] NOT LIKE '%Proc_DBA%'
ORDER BY
qs.last_worker_time DESC
SQL Server 2008 R2如果程序设计不合理,运行越久,占用内存会越来越大 。以下提供两种解决方式。
第一种:
使用任务计划定期执行下边批处理重启SQL服务:
net stop sqlserveragent
net stop mssqlserver
net start mssqlserver
net start sqlserveragent
第二种:
进入Sql server 企业管理器,在数据库服务器名称上点击【右键】,选择【属性】,然后,找到【内存】选项,在右边的【使用A WE分配内存】(sqlServer64的应该不用勾 ) 左边把对勾打上。在最大服务器内存(MB)上填入适当的大小(具体填多大,肯定不能超过计算机的物理内存,当然,也可以在任务管理器中查一下,sqlserver.exe占有多大时,系统会变慢作为参考),记得是以M(兆)为单位,点确定,重启一下Sql服务器!OK! 一般情况下顶多设置为物理内存的4分之一即可。
相关文章
- SQL Server 2016:内存列存储索引
- SQL Server占用服务器内存过高
- Sql server在另一台服务器,在Visual Studio 中没问题,IIS中 提示“在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。。。。”
- Unity游戏内存分布概览
- file /usr/lib64/mysql/plugin/dialog.so from install of Percona-Server-server-56-5.6.24-rel72.2.el6.x86_64 conflicts with file from package mariadb-libs-1:5.5.60-1.el7_5.x86_64
- Webservice WCF WebApi 前端数据可视化 前端数据可视化 C# asp.net PhoneGap html5 C# Where 网站分布式开发简介 EntityFramework Core依赖注入上下文方式不同造成内存泄漏了解一下? SQL Server之深入理解STUFF 你必须知道的EntityFramework 6.x和EntityFramework Cor
- Sql Server 2008 R2占用内存一直增长,直到死锁的问题(已解决)
- SQL SERVER错误:已超过了锁请求超时时段。 (Microsoft SQL Server,错误: 1222) 解决方案
- SQL SERVER错误:已超过了锁请求超时时段。 (Microsoft SQL Server,错误: 1222)
- 「书评」SAP内存计算——HANA
- 【Java】java的内存浅析
- 静态数组和动态数组 内存分布
- 函数中的指针分配的内存怎么释放
- com.sun.xml.internal.ws.server.ServerRtException: Server Runtime Error: java.net.BindException: Cannot assign requested address: bind
- 嵌入式Linux与物联网软件开发——C语言内核深度解析》一1.7 内存管理之栈(stack)
- 《深入解析Android 虚拟机》——2.5 内存异常和垃圾处理
- C++的STL中vector内存分配方法的简单探索
- sql server 小技巧(3) SQL Server 2012 数据库完整导出到SQL Azure (包括数据)
- JS高阶---闭包缺点(内存溢出与泄露)
- 字符串函数(strcpy字符串拷,strcmp字符串比较,strstr字符串查找,strDelChar字符串删除字符,strrev字符串反序,memmove拷贝内存块,strlen字符串长度)
- Ubuntu Server无桌面无显示器情况下虚拟屏幕xvfb的安装及设置—ubuntu18.04server服务器系统下为python安装虚拟显示器 (使用jupyter notebook在web端播放openai的gym下保存的运行视频——需安装ipython)
- 查看Linux服务器下的内存使用情况
- QL Server数据库占用过多内存的解决方法
- 从内存缓冲区buffer读取数据
- 【sql server压测】sql server使用Diskspd测试SQL Server IO存储
- Windows Server 2008 R2服务器内存使用率过高,但与任务管理器中进程占用内存和不一致
- 最小配置启动SQL SERVER,更改SQL Server最大内存大小导致不能启动的解决方法
- sql server内存使用情况
- 关于SQL Server服务占用内存过大---限制数据库内存使用
- C语言内存分配
- 查看进程的内存布局
- HPE发布第10代ProLiant服务器 加强安全固件和永久内存
- Tomcat启动失败错误解决Could not publish server configuration for Tomcat v7.0 Server at localhost
- Delphi内存专题