经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MS SQL Server » 查看文章
解釋 SQL Server 的狀態值 Runnable、Running、Suspended、Sleeping
来源:cnblogs  作者:WizardWu  时间:2020/11/9 15:56:15  对本文有异议

在做 SQL Server 的管理、監控、效能調校時,我們可能會執行以下的 SQL 指令,去觀察 SQL Server 裡的狀態:

  1. SELECT * FROM sys.sysprocesses;
  2. EXEC sp_who2;
  1. SELECT sqltext.TEXT, req.session_id, req.status, req.command, req.cpu_time, req.blocking_session_id, req.total_elapsed_time
  2. FROM sys.dm_exec_requests req (NOLOCK)
  3. CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS sqltext

如下圖 1,各個運作中的 process 裡,有一個 status 欄位。
而 status 欄位的值,有這幾種 : Pending, Runnable, Running, Suspended, Sleeping, Dormant, Background, Spinlock

本文是參考 SQLAuthority.com 的文章 [1],加上自己的實務經驗,解釋 status 欄位的這幾個值,代表什麼意思。

status
圖 1 status 欄位的值


"pending" (等待),代表這個 process,既沒有 Thread 可用,也沒有 CPU 可用,正在同時等待這兩項系統資源。

Pending
圖 2 Pending


"runnable",代表這個 process,有 Thread 可用,但沒有 CPU 可用,所以它正在等待 CPU 這項系統資源。

Runnable
圖 3 Runnable


"running",代表這個 process,有 Thread 可用,有 CPU 可用。

Running
圖 4 Running


"suspended" (暫停),代表這個 process,正在「等待」別的 process 執行,等待的系統資源可能是 Disk I/O 或資料庫的 Lock。

版工註:若這個 process 執行的 SELECT 沒加上 NOLOCK 關鍵字,而別的 process 正在進行「交易」或寫入 (會加 Lock),則這個 SELECT 的 process 就會呈現 "suspended" 的狀態。

Suspended
圖 5 Suspended


"sleeping",代表這個 process,目前沒在做任何事,正在等待進一步的指令。

Sleeping
圖 6 Sleeping


"dormant" (暫時擱置),代表 SQL Server 正在對這個 process 做 reset。

Dormant
圖 7 Dormant


"background",代表這個 process 正在 SQL Server 背景執行。 即使你看到有很多 "background" process 正在執行,也不必擔心。

Background
圖 8 Background


spin lock essentially means that query is in kind of running mode where it is busy waiting in cpu for its own turn.

Spinlock
圖 9 Spinlock


下圖 10 為版工實際遇到的案例。 經回報,發現有系統卡住無法動彈。 版工去 SQL Server 做檢查,發現有大量的 INSERT 指令,呈現 "suspended" 狀態,代表這些 process,正在「等待」別的 process 執行,等待的系統資源可能是 Disk I/O 或資料庫的 Lock。

後來發現,這些被卡住的 "suspended" process,大家等的都是 session_id 為 70 的這一個 "runnable" process。

實際案例
圖 10 實際案例

 


----------------------------------------------------------------------------------------------------------------------------------------
參考文章:

[1] Sleeping vs Suspended Process
https://blog.sqlauthority.com/2020/09/10/sleeping-vs-suspended-process-sql-in-sixty-seconds-122/?fbclid=IwAR1hbs8IWBER9orsnA72lvKqD0S5mPg6ifcfUh5L4I0Ah_4WiglNswmGRKw

[2] Find Currently Running Query
https://blog.sqlauthority.com/2009/01/07/sql-server-find-currently-running-query-t-sql/
----------------------------------------------------------------------------------------------------------------------------------------

 

原文链接:http://www.cnblogs.com/WizardWu/p/13649548.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号