请问SQL Server进程相关详细信息的联系与区别

ChinaITOldMan 2017-09-21 02:27:15
请教大侠以下问题,谢谢!
1 请问各位大虾 dm_exec_connections、sys.sysprocesses、sys.dm_exec_sessions、dm_exec_requests 、sys.dm_os_tasks 、sys.dm_os_workers、sys.dm_os_threads
之前的详细联系和区别?
2. 如执行一个select/update/delete/insert或一个存储过程或一个view都会生成一个process吧?
3.若执行一个存储过程,会不会成很多个Process?
4. dm_exec_requests与sys.sysprocesses之前好像不是一一对应的,请问他们之间是什么关系?
...全文
594 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
OwenZeng_DBA 2017-09-22
  • 打赏
  • 举报
回复
引用 13 楼 mcxhh2005 的回复:
[quote=引用 12 楼 z10843087 的回复:] [quote=引用 11 楼 mcxhh2005 的回复:] [quote=引用 10 楼 z10843087 的回复:] @mcxhh2005 1.也可以认为大于50的就是用户的,小于50是系统的 2.用下面的代码,建立连接后就会建立一个会话, sqlConnection.Open(); 你可以运行上面代码后,查看 SELECT * FROM sys.dm_exec_sessions 3.吧2个动态管理视图join起来就可以,如下:SQL
SELECT  ds.host_name ,
        *
FROM    sys.dm_exec_requests dr
        JOIN sys.dm_exec_sessions ds ON dr.session_id = ds.session_id
WHERE   dr.session_id > 50
不好意思关于SQL Server进程还要麻烦你指点下下述问题?谢谢! 现在有sys.dm_exec_connections、sys.dm_exec_sessions、dm_exec_requests 取代sys.sysprocesses这个,请问其优点主要是体现在哪里?[/quote] 以前的sys.sysprocesses连接,会话,请求都混在一起的,现在分开每个动态管理视图显示对应的信息。功能更明确一点。其实区别不是特别大,你用熟悉了就会发现现在的挺好用的。 [/quote] 真的很谢谢你热情的帮助![/quote] 客气了,,,另外上次你那个镜像,日志传送,复制那个问题解决了吗
OwenZeng_DBA 2017-09-22
  • 打赏
  • 举报
回复
引用 11 楼 mcxhh2005 的回复:
[quote=引用 10 楼 z10843087 的回复:] @mcxhh2005 1.也可以认为大于50的就是用户的,小于50是系统的 2.用下面的代码,建立连接后就会建立一个会话, sqlConnection.Open(); 你可以运行上面代码后,查看 SELECT * FROM sys.dm_exec_sessions 3.吧2个动态管理视图join起来就可以,如下:SQL
SELECT  ds.host_name ,
        *
FROM    sys.dm_exec_requests dr
        JOIN sys.dm_exec_sessions ds ON dr.session_id = ds.session_id
WHERE   dr.session_id > 50
不好意思关于SQL Server进程还要麻烦你指点下下述问题?谢谢! 现在有sys.dm_exec_connections、sys.dm_exec_sessions、dm_exec_requests 取代sys.sysprocesses这个,请问其优点主要是体现在哪里?[/quote] 以前的sys.sysprocesses连接,会话,请求都混在一起的,现在分开每个动态管理视图显示对应的信息。功能更明确一点。其实区别不是特别大,你用熟悉了就会发现现在的挺好用的。
OwenZeng_DBA 2017-09-22
  • 打赏
  • 举报
回复
@mcxhh2005 1.也可以认为大于50的就是用户的,小于50是系统的 2.用下面的代码,建立连接后就会建立一个会话, sqlConnection.Open(); 你可以运行上面代码后,查看 SELECT * FROM sys.dm_exec_sessions 3.吧2个动态管理视图join起来就可以,如下:SQL
SELECT  ds.host_name ,
        *
FROM    sys.dm_exec_requests dr
        JOIN sys.dm_exec_sessions ds ON dr.session_id = ds.session_id
WHERE   dr.session_id > 50
ChinaITOldMan 2017-09-22
  • 打赏
  • 举报
回复
引用 12 楼 z10843087 的回复:
[quote=引用 11 楼 mcxhh2005 的回复:] [quote=引用 10 楼 z10843087 的回复:] @mcxhh2005 1.也可以认为大于50的就是用户的,小于50是系统的 2.用下面的代码,建立连接后就会建立一个会话, sqlConnection.Open(); 你可以运行上面代码后,查看 SELECT * FROM sys.dm_exec_sessions 3.吧2个动态管理视图join起来就可以,如下:SQL
SELECT  ds.host_name ,
        *
FROM    sys.dm_exec_requests dr
        JOIN sys.dm_exec_sessions ds ON dr.session_id = ds.session_id
WHERE   dr.session_id > 50
不好意思关于SQL Server进程还要麻烦你指点下下述问题?谢谢! 现在有sys.dm_exec_connections、sys.dm_exec_sessions、dm_exec_requests 取代sys.sysprocesses这个,请问其优点主要是体现在哪里?[/quote] 以前的sys.sysprocesses连接,会话,请求都混在一起的,现在分开每个动态管理视图显示对应的信息。功能更明确一点。其实区别不是特别大,你用熟悉了就会发现现在的挺好用的。 [/quote] 真的很谢谢你热情的帮助!
ChinaITOldMan 2017-09-22
  • 打赏
  • 举报
回复
引用 10 楼 z10843087 的回复:
@mcxhh2005 1.也可以认为大于50的就是用户的,小于50是系统的 2.用下面的代码,建立连接后就会建立一个会话, sqlConnection.Open(); 你可以运行上面代码后,查看 SELECT * FROM sys.dm_exec_sessions 3.吧2个动态管理视图join起来就可以,如下:SQL
SELECT  ds.host_name ,
        *
FROM    sys.dm_exec_requests dr
        JOIN sys.dm_exec_sessions ds ON dr.session_id = ds.session_id
WHERE   dr.session_id > 50
不好意思关于SQL Server进程还要麻烦你指点下下述问题?谢谢! 现在有sys.dm_exec_connections、sys.dm_exec_sessions、dm_exec_requests 取代sys.sysprocesses这个,请问其优点主要是体现在哪里?
ChinaITOldMan 2017-09-22
  • 打赏
  • 举报
回复
引用 8 楼 z10843087 的回复:
[quote=引用 7 楼 mcxhh2005 的回复:] [quote=引用 6 楼 z10843087 的回复:] @mcxhh2005 1.sys.dm_exec_request 也有一列,叫做blocking_session_id 2.你不用把sys.sysprocesses 中的SPID和 sys.dm_exec_requests对应起来的,你以后就直接看sys.dm_exec_requests 这个视图就可以。 3.在同一时间他只有一个session
谢谢你细心的解答,因为以前中sys.sysprocesses找出最终被blocked的SPID,然后用dbcc inputbuffer(spid)很容易找出其对应语句,现在用sys.dm_exec_request 怎样方便找出导致阻塞的SQL 语句呢? (假如不用SQL Server 自带的分析报表) 谢谢![/quote] 很方便,一样的,,就用sys.dm_exec_request+dbcc inputbuffer(spid) 就可以[/quote] 早上好!还麻烦下您!thank you! 1.在 sys.sysprocesses 中SPID小于或等于50的进程是SQL Server系统进程,SPID号大于50的才是用户进程;请问在sys.dm_exec_requests 中,怎样知道哪些是SQL Server系统的用户进程,哪些是用户的进程? 2.另外说在Microsoft SQL Server Management Studio中点个New Query相当于建立个Session,若在前台程序中怎样手工开个Session? 3. 在sys.sysprocesses 中通过HostName可以知道其进程是由那台电脑上执行的语句产生,请问在 sys.dm_exec_requests中 怎样知道每个进程是由哪台电脑执行的语句产生的?
OwenZeng_DBA 2017-09-21
  • 打赏
  • 举报
回复
引用 7 楼 mcxhh2005 的回复:
[quote=引用 6 楼 z10843087 的回复:] @mcxhh2005 1.sys.dm_exec_request 也有一列,叫做blocking_session_id 2.你不用把sys.sysprocesses 中的SPID和 sys.dm_exec_requests对应起来的,你以后就直接看sys.dm_exec_requests 这个视图就可以。 3.在同一时间他只有一个session
谢谢你细心的解答,因为以前中sys.sysprocesses找出最终被blocked的SPID,然后用dbcc inputbuffer(spid)很容易找出其对应语句,现在用sys.dm_exec_request 怎样方便找出导致阻塞的SQL 语句呢? (假如不用SQL Server 自带的分析报表) 谢谢![/quote] 很方便,一样的,,就用sys.dm_exec_request+dbcc inputbuffer(spid) 就可以
OwenZeng_DBA 2017-09-21
  • 打赏
  • 举报
回复
@mcxhh2005 1.sys.dm_exec_request 也有一列,叫做blocking_session_id 2.你不用把sys.sysprocesses 中的SPID和 sys.dm_exec_requests对应起来的,你以后就直接看sys.dm_exec_requests 这个视图就可以。 3.在同一时间他只有一个session
ChinaITOldMan 2017-09-21
  • 打赏
  • 举报
回复
引用 6 楼 z10843087 的回复:
@mcxhh2005 1.sys.dm_exec_request 也有一列,叫做blocking_session_id 2.你不用把sys.sysprocesses 中的SPID和 sys.dm_exec_requests对应起来的,你以后就直接看sys.dm_exec_requests 这个视图就可以。 3.在同一时间他只有一个session
谢谢你细心的解答,因为以前中sys.sysprocesses找出最终被blocked的SPID,然后用dbcc inputbuffer(spid)很容易找出其对应语句,现在用sys.dm_exec_request 怎样方便找出导致阻塞的SQL 语句呢? (假如不用SQL Server 自带的分析报表) 谢谢!
OwenZeng_DBA 2017-09-21
  • 打赏
  • 举报
回复
@mcxhh2005
第三个问题忘记回答了。其实用process这个名词不是很好。执行一个存储过程之后有一个会话就是dm_exec_request 只会有一条记录。但是可能会有多个任务。就是在 sys.dm_os_tasks会有记录。

引用 3 楼 mcxhh2005 的回复:
[quote=引用 2 楼 z10843087 的回复:]
请教大侠以下问题,谢谢!
1 请问各位大虾 dm_exec_connections、sys.sysprocesses、sys.dm_exec_sessions、dm_exec_requests 、sys.dm_os_tasks 、sys.dm_os_workers、sys.dm_os_threads之前的详细联系和区别?

sys.sysprocesses 以前用的SQL 2000使用的,现在都使用 dm_exec_connections、、sys.dm_exec_sessions、dm_exec_requests 这三个动态管理视图代替前面的视图。dm_exec_connections 是查看连接信息的,sys.dm_exec_sessions 是查看会话,dm_exec_requests 是查看请求,要讲这里面的区别,主要就是连接,会话,和请求的区别。客户端连接到数据库,首先要建立连接,,然后是建立会话(会话主要是保存一些配置信息,比如登陆用户,隔离级别等等),request就是正在执行的任务了。
后面3个就是更细粒度的视图了。每个request 就是一个任务,SQL SERVER 使用worker来处理这个任务,一个worker就是一个逻辑cpu。 sys.dm_os_workers就是查询work的信息,sys.dm_os_threads 用到比较少。

2. 如执行一个select/update/delete/insert或一个存储过程或一个view都会生成一个process吧?
你说的process是只的什么?会话吗,每次执行都会建立这样一个会话
3.若执行一个存储过程,会不会成很多个Process?
4. dm_exec_requests与sys.sysprocesses之前好像不是一一对应的,请问他们之间是什么关系?
用dm_exec_requests 更合适些,他主要显示正在执行中的请求


谢谢你耐心的指点!
1. 我所说的Process是指sys.sysprocesses中的一个spid.
2. 您所说的"会话主要是保存一些配置信息,比如登陆用户,隔离级别等等" , 也就是会话中不包括对对数据库的SELECT /INSERT/ DELETE/ UPDATE等语句吧?
3. sys.sysprocesses 与sys.dm_exec_requests有对应相关吗?[/quote]
1.
Process是指sys.sysprocesses中的一个spid. 那么, 如执行一个select/update/delete/insert或一个存储过程或一个view都会生成一个process吧?这个根据会话的情况。
比如下图:我建立了一个连接后,就会形成一个会话56.在这个会话中执行再多语句也只有一个SPID,也就是你说的process。

2.语句都记录在sys.dm_exec_sql_text这个视图里面。
3.是有对应的关系。sys.sysprocesses 就是被后面的3个动态管理视图代替了。以后尽量就用动态管理视图。sys.dm_exec_requests显示的都是活动中的会话。而sys.sysprocesses包含所有的会话,包括不活动的。
ChinaITOldMan 2017-09-21
  • 打赏
  • 举报
回复
引用 4 楼 z10843087 的回复:
@mcxhh2005 第三个问题忘记回答了。其实用process这个名词不是很好。执行一个存储过程之后有一个会话就是dm_exec_request 只会有一条记录。但是可能会有多个任务。就是在 sys.dm_os_tasks会有记录。 [quote=引用 3 楼 mcxhh2005 的回复:] [quote=引用 2 楼 z10843087 的回复:] 请教大侠以下问题,谢谢! 1 请问各位大虾 dm_exec_connections、sys.sysprocesses、sys.dm_exec_sessions、dm_exec_requests 、sys.dm_os_tasks 、sys.dm_os_workers、sys.dm_os_threads之前的详细联系和区别? sys.sysprocesses 以前用的SQL 2000使用的,现在都使用 dm_exec_connections、、sys.dm_exec_sessions、dm_exec_requests 这三个动态管理视图代替前面的视图。dm_exec_connections 是查看连接信息的,sys.dm_exec_sessions 是查看会话,dm_exec_requests 是查看请求,要讲这里面的区别,主要就是连接,会话,和请求的区别。客户端连接到数据库,首先要建立连接,,然后是建立会话(会话主要是保存一些配置信息,比如登陆用户,隔离级别等等),request就是正在执行的任务了。 后面3个就是更细粒度的视图了。每个request 就是一个任务,SQL SERVER 使用worker来处理这个任务,一个worker就是一个逻辑cpu。 sys.dm_os_workers就是查询work的信息,sys.dm_os_threads 用到比较少。 2. 如执行一个select/update/delete/insert或一个存储过程或一个view都会生成一个process吧? 你说的process是只的什么?会话吗,每次执行都会建立这样一个会话 3.若执行一个存储过程,会不会成很多个Process? 4. dm_exec_requests与sys.sysprocesses之前好像不是一一对应的,请问他们之间是什么关系? 用dm_exec_requests 更合适些,他主要显示正在执行中的请求
谢谢你耐心的指点! 1. 我所说的Process是指sys.sysprocesses中的一个spid. 2. 您所说的"会话主要是保存一些配置信息,比如登陆用户,隔离级别等等" , 也就是会话中不包括对对数据库的SELECT /INSERT/ DELETE/ UPDATE等语句吧? 3. sys.sysprocesses 与sys.dm_exec_requests有对应相关吗?[/quote] 1. Process是指sys.sysprocesses中的一个spid. 那么, 如执行一个select/update/delete/insert或一个存储过程或一个view都会生成一个process吧?这个根据会话的情况。 比如下图:我建立了一个连接后,就会形成一个会话56.在这个会话中执行再多语句也只有一个SPID,也就是你说的process。 2.语句都记录在sys.dm_exec_sql_text这个视图里面。 3.是有对应的关系。sys.sysprocesses 就是被后面的3个动态管理视图代替了。以后尽量就用动态管理视图。sys.dm_exec_requests显示的都是活动中的会话。而sys.sysprocesses包含所有的会话,包括不活动的。 [/quote] 1. sys.sysprocesses中很容易看到进程ID是被哪个进程ID blocked的,但是用新的动态sys.dm_exec_requests怎样知道哪个进程ID是被哪个进程ID blocked的呢? 2. sys.dm_exec_requests中Active的SPID,怎样知道sys.sysprocesses 中的SPID和 sys.dm_exec_requests是怎样对应的? 3. 用.net开发的数据库应用程序,若登录时连接数据库,在退出系统之前一直不断开连接,我们对数据库进行各种操作,那么这样对数据库就只有一个Session吗?谢谢
ChinaITOldMan 2017-09-21
  • 打赏
  • 举报
回复
引用 2 楼 z10843087 的回复:
请教大侠以下问题,谢谢! 1 请问各位大虾 dm_exec_connections、sys.sysprocesses、sys.dm_exec_sessions、dm_exec_requests 、sys.dm_os_tasks 、sys.dm_os_workers、sys.dm_os_threads之前的详细联系和区别? sys.sysprocesses 以前用的SQL 2000使用的,现在都使用 dm_exec_connections、、sys.dm_exec_sessions、dm_exec_requests 这三个动态管理视图代替前面的视图。dm_exec_connections 是查看连接信息的,sys.dm_exec_sessions 是查看会话,dm_exec_requests 是查看请求,要讲这里面的区别,主要就是连接,会话,和请求的区别。客户端连接到数据库,首先要建立连接,,然后是建立会话(会话主要是保存一些配置信息,比如登陆用户,隔离级别等等),request就是正在执行的任务了。 后面3个就是更细粒度的视图了。每个request 就是一个任务,SQL SERVER 使用worker来处理这个任务,一个worker就是一个逻辑cpu。 sys.dm_os_workers就是查询work的信息,sys.dm_os_threads 用到比较少。 2. 如执行一个select/update/delete/insert或一个存储过程或一个view都会生成一个process吧? 你说的process是只的什么?会话吗,每次执行都会建立这样一个会话 3.若执行一个存储过程,会不会成很多个Process? 4. dm_exec_requests与sys.sysprocesses之前好像不是一一对应的,请问他们之间是什么关系? 用dm_exec_requests 更合适些,他主要显示正在执行中的请求
谢谢你耐心的指点! 1. 我所说的Process是指sys.sysprocesses中的一个spid. 2. 您所说的"会话主要是保存一些配置信息,比如登陆用户,隔离级别等等" , 也就是会话中不包括对对数据库的SELECT /INSERT/ DELETE/ UPDATE等语句吧? 3. sys.sysprocesses 与sys.dm_exec_requests有对应相关吗?
OwenZeng_DBA 2017-09-21
  • 打赏
  • 举报
回复
请教大侠以下问题,谢谢! 1 请问各位大虾 dm_exec_connections、sys.sysprocesses、sys.dm_exec_sessions、dm_exec_requests 、sys.dm_os_tasks 、sys.dm_os_workers、sys.dm_os_threads之前的详细联系和区别? sys.sysprocesses 以前用的SQL 2000使用的,现在都使用 dm_exec_connections、、sys.dm_exec_sessions、dm_exec_requests 这三个动态管理视图代替前面的视图。dm_exec_connections 是查看连接信息的,sys.dm_exec_sessions 是查看会话,dm_exec_requests 是查看请求,要讲这里面的区别,主要就是连接,会话,和请求的区别。客户端连接到数据库,首先要建立连接,,然后是建立会话(会话主要是保存一些配置信息,比如登陆用户,隔离级别等等),request就是正在执行的任务了。 后面3个就是更细粒度的视图了。每个request 就是一个任务,SQL SERVER 使用worker来处理这个任务,一个worker就是一个逻辑cpu。 sys.dm_os_workers就是查询work的信息,sys.dm_os_threads 用到比较少。 2. 如执行一个select/update/delete/insert或一个存储过程或一个view都会生成一个process吧? 你说的process是只的什么?会话吗,每次执行都会建立这样一个会话 3.若执行一个存储过程,会不会成很多个Process? 4. dm_exec_requests与sys.sysprocesses之前好像不是一一对应的,请问他们之间是什么关系? 用dm_exec_requests 更合适些,他主要显示正在执行中的请求
听雨停了 2017-09-21
  • 打赏
  • 举报
回复
你这说的差点把我搞蒙蔽了。 1.4不太确定是什么情况。但是23可以准确的说不是你说的那样。并不是由一个select一个update就会产生的产生一个process,而是由一个连接产生一个process。比如说你在sql server management Studio新建一个查询窗口,这就是一个连接。再建一个又是另外一个连接了。不管你在一个里面写了多少个select/update,都只有一个进程,而这个进程。所以执行一个存储过程也只有一个process

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧