SQL Server 占用内存太高,查找占用内存高以及影响其性能的sql语句

当发现SQL Server 占用的资源过高,有时重启电脑也解决不了问题时,建议通过如下语句检查SQL语句的问题,

如果是当天出的问题增加{order by last_worker_time desc,想看一下今天哪些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;当

查last_worker_time为执行毫秒数

原文地址:https://www.cnblogs.com/approx/p/12039029.html

时间: 2024-07-31 12:35:24

SQL Server 占用内存太高,查找占用内存高以及影响其性能的sql语句的相关文章

SQL Server 2012笔记分享-6:理解内存管理

内存管理 – SQL Server 2005/2008/2008r2 SQL Server 2012以前的版本(SQL 2005/2008/2008R2),有single page allocator 和multi page allocator.也就是说,如果申请的内存是8k以内的,就会有单页分配器分配,而大于8kb的内存请求,使用multi page 分配器来管理.如图所示. 使用select * from sys.dm_os_memory_clerks查询memory clerk,会发现si

sql server 查询分析器消息栏里去掉“(5 行受影响)”

sql server 查询分析器消息栏里去掉"(5 行受影响)"     在你代码的开始部分加上这个命令: set nocount on   记住在代码结尾的地方再加上: set nocount off

SQL Server 无法启动之TCP端口占用

场景再现: ------------------------------------------------------------------------------------------------------------------------------------------------ 第一步: 查看windows 日志 第二步: 查看哪个不要脸的程序占用了 1433 端口 可以看到是  5164  这个进程占用了. 第三步: 在任务管理器中 kill 这个编号为5164的进程.把

sql server 执行上100mb sql sql sql server 无法执行脚本 没有足够的内存继续执行

cmd osql -S 服务器名称 -E sql文件路径 ------------------------------------------------------ 最近遇到一个问题,在sqlserver的查询分析器里面执行一个超过100MB的数据库脚本,发现老是报“引发类型为“System.OutOfMemoryException”的异常”,上网查了一下,主要是因为.sql的脚本文件过大(一般都超过100M)造成内存无法处理这么多的数据. 解决办法有各种各样,例如: 1.用记事本打开脚本文件

SQL Server中如何识别、查找未使用的索引(unused indexes)

在SQL Server中,索引是优化SQL性能的一大法宝.但是由于各种原因,索引会被当做"银弹"滥用,一方面有些开发人员(甚至是部分数据库管理员)有一些陋习,不管三七二十一,总是根据所谓的"感觉"或"经验"先增加一些索引,而不管这些索引是否未被使用或是否合理.另外一方面在数据库的生命周期中,需求总是在变化,业务也在变化,有些当初创建的有效索引可能已经变成了unused index了.变成了数据库性能的累赘: 另外,部分数据库管理员其实很少清理索引

MS SQL SERVER执行大脚本文件时,提示“内存不足”的解决办法

问题描述: 当客户服务器不允许直接备份时,往往通过导出数据库脚本的方式来部署-还原数据库, 但是当数据库导出脚本很大,用Microsoft SQL Server Management Studio执行脚本时,往往会遇到“内存不足”的提示. 解决办法: 用微软自带的sqlcmd工具,可以导入执行.以SQL Server 2008 R2版本为例: 第一步:Win+R 键入:cmd 命令,开启命令行工具: 第二步:键入:cd C:\Program Files\Microsoft SQL Server\

sql server“键列信息不足或不正确。更新影响到多行”

环境:windows server 2003 sp2,sql server 2000,用于管理固定资产的软件. 故障现象: 要同时增加两台思科交换机的固定资产信息,由于型号什么都一致,只是序列号不一样.于是就想做完一台后,能否直接复制一条单据过来改一下不一致的地方就行了.但是前台无法实现.本着偷懒和学习的态度,杀到后台,直接打开数据库操作. 去了主键限制,用下面语句复制: INSERT INTO da111 SELECT * FROM da111 WHERE (scodel = '03-ne-0

SQL SERVER 数据日志太大,磁盘没有空间,直接删除数据库日志后,显示 恢复挂起。

问题简述: sharepoint的某个站点对应的数据库日志太大了,想把日志瘦身.于是我把整个数据库分离,然后附加数据库来重新生成日志文件.谁知道在附加的时候,居然报错"附加数据库报错:由于数据库没有完全关闭,无法重新生成日志" 问题原因:原因是数据库关闭时存在打开的事务/用户,该数据库没有检查点或者该数据库是只读的.如果事务日志文件被手动删除或者由于硬件或环境问题而丢失,则可能出现此错误. 处理办法: 一.把分离之前的日志文件也复制过来一齐附加嘛从错误提示看, 应该是你的日志文件中还包

SQL Server ->> 条件筛选做法之 -- IN(VALUE1,VALUE2,...)与INNER JOIN STRING_SPLIT()性能对比

在以逗号拼接而成的字符串,传入给IN字句的元素字符串中包涵了1400多个元素 两种做法分别为 AND e.ssPfCityId IN ( SELECT CAST(value AS INT) FROM STRING_SPLIT('110000,310000,120000,210100,210200,210400,210800,211200,350100,350500,350200,350800,350700,350900,441200,441300,440500,445100,450100,451