获得客户端详细信息以及每个进程的sql语句
db性能下降时很多朋友都想监控到是哪个客户端、哪个用户、哪台客户端发起的什么会话sql语句,
但是微软自带的要使用profiler才能实现,但是考虑性能问题,很多人不愿意!
网上有很多脚本能监控到客户端信息,但是唯独不能获取客户端进程的sql语句!
我自己写了一个,供参考:
--1.新建存储过程
--create proc prtest
--@spid int
--as
--dbcc inputbuffer (@spid)
--go
--2.将结果保存到临时变量#tmp
SELECT [Session ID] AS 会话ID ,
[Login] AS 用户名 ,
[Database] AS 数据库 ,
[Task State] AS 状态 ,
[Command] AS 命令 ,
[Application] AS 应用软件 ,
[Wait Time (ms)] AS 等待时间 ,
[Wait Type] AS 等待类型 ,
[Host Name] AS 客户机名 ,
[Net Address] AS IP地址 INTO #tmp FROM ( SELECT [Session ID] = s.session_id ,
[User Process] = CONVERT(CHAR(1), s.is_user_process) ,
[Login] = s.login_name ,
[Database] = ISNULL(DB_NAME(p.dbid), N'') ,
[Task State] = ISNULL(t.task_state, N'') ,
[Command] = ISNULL(r.command, N'') ,
[Application] = ISNULL(s.program_name, N'') ,
[Wait Time (ms)] = ISNULL(w.wait_duration_ms, 0) ,
[Wait Type] = ISNULL(w.wait_type, N'') ,
[Wait Resource] = ISNULL(w.resource_description, N'') ,
[Blocked By] = ISNULL(CONVERT (VARCHAR, w.blocking_session_id),
'') ,
[Head Blocker] = CASE
WHEN r2.session_id IS NOT NULL
AND ( r.blocking_session_id = 0
OR r.session_id IS NULL
) THEN ''
ELSE ''
END ,
[Total CPU (ms)] = s.cpu_time ,
[Total Physical I/O (MB)] = ( s.reads + s.writes ) * 8
/ 1024 ,
[Memory Use (KB)] = s.memory_usage * 8192 / 1024 ,
[Open Transactions] = ISNULL(r.open_transaction_count, 0) ,
[Login Time] = s.login_time ,
[Last Request Start Time] = s.last_request_start_time ,
[Host Name] = ISNULL(s.host_name, N'') ,
[Net Address] = ISNULL(c.client_net_address, N'') ,
[Execution Context ID] = ISNULL(t.exec_context_id, 0) ,
[Request ID] = ISNULL(r.request_id, 0) ,
[Workload Group] = ISNULL(g.name, N'')
FROM sys.dm_exec_sessions s
LEFT OUTER JOIN sys.dm_exec_connections c ON ( s.session_id = c.session_id )
LEFT OUTER JOIN sys.dm_exec_requests r ON ( s.session_id = r.session_id )
LEFT OUTER JOIN sys.dm_os_tasks t ON ( r.session_id = t.session_id
AND r.request_id = t.request_id
)
LEFT OUTER JOIN (
SELECT * ,
ROW_NUMBER() OVER ( PARTITION BY waiting_task_address ORDER BY wait_duration_ms DESC ) AS row_num
FROM sys.dm_os_waiting_tasks
) w ON ( t.task_address = w.waiting_task_address )
AND w.row_num = 1
LEFT OUTER JOIN sys.dm_exec_requests r2 ON ( s.session_id = r2.blocking_session_id )
LEFT OUTER JOIN sys.dm_resource_governor_workload_groups g ON ( g.group_id = s.group_id )
LEFT OUTER JOIN sys.sysprocesses p ON ( s.session_id = p.spid )
) t
WHERE t.Command IN ( 'SELECT', 'UPDATE', 'DELETE' ) --3.创建保存结果的临时表
CREATE TABLE #jttest(
[会话ID] [smallint] NOT NULL,
[用户名] [nvarchar](128) NOT NULL,
[数据库] [nvarchar](128) NOT NULL,
[状态] [nvarchar](60) NOT NULL,
[命令] [nvarchar](16) NOT NULL,
[应用软件] [nvarchar](128) NOT NULL,
[等待时间] [bigint] NOT NULL,
[等待类型] [nvarchar](60) NOT NULL,
[客户机名] [nvarchar](128) NOT NULL,
[IP地址] [varchar](48) NOT NULL,
[TSQL] [varchar](4000) NULL
)
--4.将#tmp中值导入到临时表变量#jttest
INSERT INTO #jttest
([会话ID]
,[用户名]
,[数据库]
,[状态]
,[命令]
,[应用软件]
,[等待时间]
,[等待类型]
,[客户机名]
,[IP地址]
)
SELECT [会话ID]
,[用户名]
,[数据库]
,[状态]
,[命令]
,[应用软件]
,[等待时间]
,[等待类型]
,[客户机名]
,[IP地址]
FROM #tmp
--5.获得每个spid对应的TSQL语句
create table #tmp01(
EventType nvarchar(100),
Parameters Int,
EventInfo nvarchar(max)
)
declare @cursid int
declare cur cursor for select [会话ID] from #jttest
open cur
fetch next from cur into @cursid
while @@FETCH_STATUS=0
begin
insert into #tmp01 exec prtest @cursid
UPDATE #jttest SET TSQL=(SELECT EventInfo FROM #tmp01 )
WHERE 会话ID=@cursid
truncate table #tmp01
fetch next from cur into @cursid
end
close cur
deallocate cur
DROP TABLE #tmp01
--6.查看最终结果
SELECT * FROM #jttest
DROP TABLE #tmp
DROP TABLE #jttest --dbcc inputbuffer (896)
转自:http://blog.csdn.net/yangzhawen/article/details/7241200
获得客户端详细信息以及每个进程的sql语句的更多相关文章
- 如何进行SCCM中客户端记录信息维护
SCCM 部署完毕之后,不久我们就会发现客户端代理状态,因为重装系统,非正常的退域,长时间不开机,导致客户端状态有不可用的,有过期的,重复的记录很多.当然我们可以手动的快速删除重复的记录,那么怎么能做 ...
- oracle从客户端到sql语句追踪
这两天看小布老师的视频学习了一下从客户端到oracle数据库发送执行的SQL语句的跟踪,整理一下笔记. 需要用到的命令:netstat oracle端要用到的四个视图为: V$session:当前有多 ...
- Linux 查找指定名称的进程并显示进程详细信息
实际应用中可能有这样的场景:给定一个进程名称特征串,查找所有匹配该进程名称的进程的详细信息. 解决的办法是: (1) 先用pgrep [str] 命令进行模糊匹配,找到匹配该特征串的进程ID: (2) ...
- linux下查看运行进程详细信息
通过ps及top命令查看进程信息时,只能查到相对路径,查不到的进程的详细信息,如绝对路径等.这时,我们需要通过以下的方法来查看进程的详细信息: Linux在启动一个进程时,系统会在/proc下创建一个 ...
- [ArgumentException: 可能证书“CN=JRNet01-PC”没有能够进行密钥交换的私钥,或者进程可能没有访问私钥的权限。有关详细信息,请参见内部异常。]
堆栈跟踪: [CryptographicException: 密钥集不存在. ] System.Security.Cryptography.Utils.CreateProvHandle(CspPara ...
- 操作系统复习——如何查看一个进程的详细信息,如何追踪一个进程的执行过程 ,如何在 Linux 系统下查看 CPU、内存、磁盘、IO、网卡情况?epoll和select区别?
1. 如何查看一个进程的详细信息,如何追踪一个进程的执行过程 通过pstree命令(根据pid)进行查询进程内部当前运行了多少线程:# pstree -p 19135(进程号) 使用top命令查看(可 ...
- 在Visual Studio中调试时,如何检查有关进程令牌的详细信息?
从Visual Studio 2005开始,watch窗口获得了一个伪寄存器,用于调查有关进程令牌的详细信息.所以,你只要开始调试,在监视窗口中写下“$user”, 有时查看特权和组的扩展视图会很有趣 ...
- PHP获取当前服务器详细信息
最近正在用PHP写一个企业级的CMS,后台需要用到PHP获取当前服务器的详细信息以及相关系统参数信息,整理了整理,现在贴这儿,以备后用. 获取系统类型及版本号: php_uname() (例:W ...
- 【好文推荐】黑莓OS手册是如何详细阐述底层的进程和线程模型的?
「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...
随机推荐
- 【贪心大水题】BZOJ3410-[Usaco2009 Dec]Selfish Grazing 自私的食草者
[题目大意] 给出n个区间,问最多选取多少个区间使得它们互相不重叠. [思路] 水题quq改善心情用.按照右端点大小排序,每次更新上一次的右端点,如果当前左端点大于上次右端点可取. #include& ...
- Dalvik和ART的区别
什么是Dalvik: Dalvik是Google公司自己设计用于Android平台的Java虚拟机.Dalvik虚拟机是Google等厂商合作开发的Android移动设备平台的核心组成部分之一. ...
- bzoj 1015 维护连通块个数,离线并查集
水. /************************************************************** Problem: 1015 User: idy002 Langua ...
- bzoj 2733: [HNOI2012]永无乡 -- 线段树
2733: [HNOI2012]永无乡 Time Limit: 10 Sec Memory Limit: 128 MB Description 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自 ...
- 一次经典的tcp三次握手
TCP报头 在三次握手中使用的字段: 32位序列号 seq:表示的是本次报文发送的数据的第一个字节的序号. 32位确认号:ack 表示期望下一次应该接受到的报文的第一个字节的序号,若ack = N则 ...
- react-native-image-zoom-viewer学习
github原地址 react-native-image-zoom-viewer实现了类似微信朋友圈浏览图片的效果,点击小图片实现浏览原图效果. 安装: npm i react-native-imag ...
- linuxmint - setup - 搜狗输入法
安装好linuxmint18后,官网下载搜狗输入法安装包安装.安装成功后,发现缺失部分界面,包括输入候选框,软件设置,fcitx设置都不太正常. 解决: 安装:fcitx-ui-classic 另: ...
- Chrome无法播放m3u8格式的直播视频流的问题解决
出国,然后安装这个插件即可:Native HLS Playback https://chrome.google.com/webstore/detail/native-hls-playback/emnp ...
- hadoop招聘需求每天都在添加,短短半个月时间,需求量差点儿翻了一番,这是大数据要爆发的节奏么?
近期常常关注企业hadoop招聘需求的动态变化,多说无益,直接上几张百度的截图: 4月20日: 4月22日: 4月27日: 5月8日:
- 水平ListView
/* * HorizontalListView.java v1.5 * * * The MIT License * Copyright (c) 2011 Paul Soucy (paul@dev-sm ...