1. 程式人生 > >sqlserver 死鎖 檢視當前程序,或死鎖程序,並能自動殺掉死程序

sqlserver 死鎖 檢視當前程序,或死鎖程序,並能自動殺掉死程序

/*--處理死鎖

因為是針對死的,所以如果有死鎖程序,只能檢視死鎖程序
當然,你可以通過引數控制,不管有沒有死鎖,都只檢視死鎖程序

--
*//*--呼叫示例

exec p_lockinfo
--
*/ create proc p_lockinfo
@kill_lock_spid bit=1,  --是否殺掉死鎖的程序,1 殺掉, 0 僅顯示
@show_spid_if_nolock bit=1 --如果沒有死鎖的程序,是否顯示正常程序資訊,1 顯示,0 不顯示
as
declare @count int,@s nvarchar(1000),@i int
select id=identity(int,1,1),標誌,
程序ID=spid,執行緒ID=kpid,塊程序ID=blocked,資料庫ID=dbid,
資料庫名=db_name(dbid),使用者ID=uid,使用者名稱=loginame,累計CPU時間=cpu,
登陸時間=login_time,開啟事務數=open_tran, 程序狀態=status,
工作站名=hostname,應用程式名=program_name,工作站程序ID=hostprocess,
域名=nt_domain,網絡卡地址=net_address
into #t from(
select 標誌='死鎖的程序',
  spid,kpid,a.blocked,dbid,uid,loginame,cpu,login_time,open_tran,
  status,hostname,program_name,hostprocess,nt_domain,net_address,
  s1=a.spid,s2=0
from master..sysprocesses a join (
  select blocked from master..sysprocesses group by blocked
  )b on a.spid=b.blocked where a.blocked=0
union all
select '|_犧牲品_>',
  spid,kpid,blocked,dbid,uid,loginame,cpu,login_time,open_tran,
  status,hostname,program_name,hostprocess,nt_domain,net_address,
  s1=blocked,s2=1
from master..sysprocesses a where blocked<>0
)a order by s1,s2

select @
[email protected]
@rowcount,@i=1

if @count=0 and @show_spid_if_nolock=1
begin
insert #t
select 標誌='正常的程序',
  spid,kpid,blocked,dbid,db_name(dbid),uid,loginame,cpu,login_time,
  open_tran,status,hostname,program_name,hostprocess,nt_domain,net_address
from master..sysprocesses
set @[email protected]
@rowcount
end

if @count>0
begin
create table #t1(id int identity(1,1),a nvarchar(30),b Int,EventInfo nvarchar(255))
if @kill_lock_spid=1
begin
  declare @spid varchar(10),@標誌 varchar(10)
  while @i<[email protected]
  begin
   select @spid=程序ID,@標誌=標誌 from #t where [email protected]
   insert #t1 exec('dbcc inputbuffer('
[email protected]
+')')
   if @標誌='死鎖的程序' exec('kill '[email protected])
   set @[email protected]+1
  end
end
else
  while @i<[email protected]
  begin
   select @s='dbcc inputbuffer('+cast(程序ID as varchar)+')' from #t where [email protected]
   insert #t1 exec(@s)
   set @[email protected]+1
  end
select a.*,程序的SQL語句=b.EventInfo
from #t a join #t1 b on a.id=b.id
end
go

相關推薦

sqlserver 檢視當前程序,程序,自動殺掉程序

/*--處理死鎖 因為是針對死的,所以如果有死鎖程序,只能檢視死鎖程序 當然,你可以通過引數控制,不管有沒有死鎖,都只檢視死鎖程序 --*//*--呼叫示例 exec p_lockinfo --*/ create proc p_lockinfo @kill_lock_spi

檢視當前oracle中正在執行的sql語句——即查詢oracle程序的sql

select a.program, b.spid, c.sql_text,c.SQL_ID from v$session a, v$process b, v$sqlarea c where a.paddr = b.addr and a.sql_hash_value = c.hash_value an

如何讓管理員密碼輸入3此錯誤以後自動當前管理員登陸的許可權24小時後自動才可以再次登陸

在使用者資訊表中增加使用者的錯誤登入次數計數器欄位、最後一次登陸失敗的時間戳欄位和鎖定登入標誌, 每正確登入一次,都將該計數器清零,清除鎖定登入標誌 每錯誤登入一次,計數器增加一,同時設定失敗登入時間戳,並檢查是失敗次數是不是大於等於3次,設定鎖定登入標誌 每次登入驗證使用

jenkins自動殺掉衍生程序怎麼解決

解決辦法: 啟動 Jenkins 的時候:加上 -Dhudson.util.ProcessTree.disable=true,也就是 java -Dhudson.util.ProcessTree.disable=true -jar jenkins.war 或者 修改/etc/sysconf

jenkins ssh 自動殺掉衍生程序 linux centos

首先網上針對該問題的解決方案: 1.啟動 Jenkins 的時候加上 -Dhudson.util.ProcessTree.disable=true,也就是 java -Dhudson.util.ProcessTree.disable=true -jar jenkins.

mysql檢視

檢視事務等待狀況 select r.trx_id waiting_trx_id, r.trx_mysql_thread_id waiting_thread, r.trx_query waiting_query, b.trx_id bloc

程序的活、飢餓和阻塞

死鎖: 解釋: 執行緒A或者B需要過獨木橋(使用該程序),而C還沒有走完(程序還在佔用),於是三方僵死;          也可以是沒有C 的情況下,A和B互不禮讓僵死.         &

執行緒的建立 驗證執行緒之間共享資料 守護執行緒 執行緒程序效率對比 遞迴

執行緒(from threading import Thread):CPU排程的最小單位 執行緒的兩種建立方式:方式一: 1 from threading import Thread 2 def f1(i): 3 print(i) 4 if __name__ == '__main__': 5

day33 執行緒的建立 驗證執行緒之間共享資料 守護執行緒 執行緒程序效率對比 遞迴

今日內容: 1.執行緒理論 2.鎖: 犧牲了效率,保證了資料的安全(重點) 3.守護執行緒 4.GIL鎖:(重點) 5.計算密集型和IO密集型 6.訊號量,事件(瞭解)  7.補充. 子程序中不能input 1.執行緒理論 什麼是執行緒:cpu的執行單位(實體) 程序: 資源

flock導致程序, 如何檢視

具體的用法檢視man flock就ok了。 因為遇到用flock鎖一直鎖住的情況,所以想寫個指令碼看看到底是哪個程序一直佔著資源。 用法:開幾個shell視窗,執行此指令碼,tailf  /tmp/gaussdbControl,檢視程序獲得鎖和釋放鎖的情況,同時可以用lso

Linux如何檢視當前佔用CPU記憶體最多的K個程序

一、可以使用以下命令查使用記憶體最多的K個程序 方法1: ps -aux | sort -k4nr | head -K 如果是10個程序,K=10,如果是最高的三個,K=3 說明:ps -aux中(a指代all——所有的程序,u指代userid——執行該程序的使

有了MDL檢視,業務從此一目瞭然

摘要:MDL鎖檢視讓一線運維人員清晰地檢視資料庫各session持有和等待的元資料鎖資訊,從而找出資料庫MDL鎖等待的根因,準確地進行下一步決策。 當多使用者共同存取資料時,資料庫中就會產生多個事務同時存取同一資料的情況。若不控制這種併發操作,資料庫的一致性就會被破壞。這種情況下,加鎖是實現資料庫併發控制的關

關於循環while(true){}for(;;){}的總結

選擇結構 for bsp sys 文字 產生 標識符 while 一個 關於死循環while(true){}或for(;;){}的總結 1、基本用法: while(true){ 語句體; } for(;;){ 語句體; } 以上情況,語句體會一直執行。 2

發編程---||遞歸---信號量---Event事件---定時器

遞歸 spa sleep 事件 lang tin lap 計數器 name 死鎖 互斥鎖:Lock(),互斥鎖只能acquire一次 遞歸鎖: RLock(),可以連續acquire多次,每acquire一次計數器+1,只有計數為0時,才能被搶到acquire # 死

select 時進行update的操作,在高發下引起

xxxx 數據 高並發 select 聚集索引 操作 加鎖 content 其他 場景:當用戶查看帖子詳情時,把帖子的閱讀量:ReadCount+1 select title,content,readcount from post where id=‘xxxx‘ --根

通過順序來避免動態的順序

通過鎖順序來避免動態的鎖順序死鎖 歡迎關注作者部落格 簡書傳送門 前言   兩個執行緒試圖通過不同的順序獲取多個相同的鎖。如果請求的順序不相同,那麼會出現迴圈的鎖依賴現象,產生死鎖。但是如果保證同時請求鎖L和鎖M的每一個執行緒,都是按照從 L 到 M 的順

linux ps sort命令檢視佔用CPU記憶體最大的幾個程序

ps aux | sort -k 3 -rn |head  檢視系統內佔用cpu最大的幾個程序 ps aux | sort -k 4 -rn |head  檢視系統內佔用記憶體最大的幾個程序     sort 升序排列 引數:

mysql檢視當前資料庫請求

information_shcema下的三張表(通過這三張表可以更新監控當前事物並且分析存在的鎖問題)  —— innodb_trx (列印innodb核心中的當前活躍事務)  —— innodb_locks ( 列印當前狀態產生的innodb鎖 僅在有鎖等待時列印) ——

SqlServer 檢視的表和解除被的表

檢視被鎖的表 1 2 select   request_session_id   spid,OBJECT_NAME(resource_associated_entity_id) tableName   from   sys.dm

學習進度:記錄執行緒,迴圈檢視當前執行的程序

  import threading # 匯入執行緒模組 import time def demo1(): for temp in range(5): # 建立整數列表,迴圈5次 print("-----demo1---%d---" % temp)