首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SPID与session_id的区别

SPID与session_id的区别
EN

Database Administration用户
提问于 2016-07-26 23:04:43
回答 1查看 10.6K关注 0票数 3

我正在配置一个作业,以获取违规进程的SPID并将其终止。我在使用@AdamMachanic中伟大的sp_Whoiscative与登录名上的sysprocesses以及SPID和session_id值之间的混合,因为它们应该是相同的(或者我错了,这就是我的错误吗?)

我得到了一些我不明白的东西:对于来自sysprocesses的同一个SPID,我从所有的活动结果中得到不同的session_id值。这里有什么不对的?

这是我正在使用的代码。在当前日期时间之前获取值10s的筛选器是因为whoisactive正使用参数@deltainterval运行,该参数在每次运行时执行大约需要10s。

代码语言:javascript
运行
复制
USE master;

--  Log information about current running processes to table Log_WhoIsActive
    EXEC [master].[dbo].[sp_WhoIsActive]
        @get_full_inner_text = 1,
        @get_plans = 2,
        @get_outer_command = 1,
        @get_transaction_info = 1,
        @get_task_info = 2,
        @get_locks = 1,
        @get_avg_time = 1,
        @get_additional_info = 1,
        @delta_interval = 2,
        @sort_order = '[start_time] DESC',
        @destination_table = 'Log_WhoIsActive_tests';

--compare date from sysprocesses with data gathered on sp_whosiactive
SELECT  dt.collection_time, sp.spid, dt.[dd hh:mm:ss.mss], sp.loginame,
        dt.login_name, dt.session_id
FROM    sys.sysprocesses sp JOIN Log_WhoIsActive_tests dt
            ON sp.loginame = dt.login_name
WHERE   sp.loginame = 'my_login_name'
        AND sp.status = 'runnable'
        AND sp.spid > 50
        AND dt.collection_time > DATEADD(ss, -10, GETDATE());
EN

回答 1

Database Administration用户

回答已采纳

发布于 2016-07-26 23:56:41

=== session_id.

您所看到的是笛卡儿产品,因为您正在加入一个在数据集中并不是唯一的字段。你目前有:

代码语言:javascript
运行
复制
FROM    sys.sysprocesses sp JOIN Log_WhoIsActive_tests dt
            ON sp.loginame = dt.login_name

您至少应该在该联接中添加以下条件:

代码语言:javascript
运行
复制
          AND sp.spid = dt.session_id

另外,请不要使用sysprocesses。在Server 2005发布时,不推荐使用它,您使用的sys.sysprocesses“表”只是一个兼容性视图。sys.sysprocesses的MSDN页面顶部甚至有一条注释,声明:

此Server 2000系统表是作为向后兼容性视图而包含的。建议您改用当前的Server系统视图。若要查找等效的系统视图,请参阅将系统表映射到系统视图(Transact-SQL)。此功能将在Microsoft Server的未来版本中删除。避免在新的开发工作中使用此功能,并计划修改当前使用此功能的应用程序。

您应该使用新的DMV (动态管理视图):

请注意,登录可能需要获得VIEW SERVER STATE的服务器级权限,以便查看比他们自己的sys.dm_exec_sessionssys.dm_exec_requests数据更多的内容,或者在sys.dm_exec_connections中看到任何内容。

如果需要此权限,则运行GRANT语句时的当前数据库需要为master,因为这是服务器级权限。

票数 6
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/145032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档