【发布时间】:2013-12-24 08:16:28
【问题描述】:
我基本上是在尝试捕获 sql 命令及其对 CPU 的等待时间,我只想运行 60 秒的 while 循环并将所有数据插入临时表中。我不是很好while游标,或者如何在sql中完成这个。
开始 创建表#DiagTable ( sessionID NVARCHAR (MAX), 数据库名称 NVARCHAR (MAX), 开始时间 NVARCHAR (MAX), cmd NVARCHAR (MAX), 统计 NVARCHAR (MAX), cputime NVARCHAR (MAX), totallapsedtime NVARCHAR (MAX), 读取 NVARCHAR (MAX), 写入 NVARCHAR (MAX), [查询] NVARCHAR (MAX) ) 声明@id INT 宣布 x 光标 选择 60 打开 x 从 x 中获取下一个到 @id 而@@FETCH_STATUS = 0 开始 等待延迟'000:00:01' -- 从这里开始循环 插入#DiagTable 选择一个.session_id, db_name (a.database_id) AS db_name, a.start_time, a.命令, a.状态, a.cpu_time, a.total_elapsed_time, a.读取, a. 写, b.文本AS查询 FROM sys.dm_exec_requests 外部应用 sys.dm_exec_sql_text (a.sql_handle) b WHERE a.session_id > 50 -- 过滤掉后台任务 AND a.session_id @@spid -- 过滤掉这个查询会话 按 a.cpu_time DESC 排序; 等待延迟'00:00:01' 从 x 中获取下一个到 @id 结尾 关闭 x 解除分配 x -- 在此结束循环 从#DiagTable中选择*; 删除表#DiagTable; 结尾不确定选择 60 是否是我想要的...
【问题讨论】:
-
你是什么意思“60秒的while循环”?你的意思是你想每秒捕获一次这个数据,持续 60 秒(所以你会得到 60 组查询)?或者您想每 60 秒捕获一次此数据,n 次?
-
您可以使用带有 WAITFOR technet.microsoft.com/en-us/library/ms187331.aspx 的 while 循环
-
@AaronBertrand 查看我的编辑,基本上每秒 1 分钟我想运行一个插入临时表的选择命令
-
@EricZ,
WAITFOR就像一个睡眠命令,它只是暂停那么久。不要以为这就是 OP 所追求的。 -
@Andrew 如果我的光标暂停一秒钟 60 次
标签: sql-server