鎖原理:指在一組程序中的各個程序均占有不會釋放的資源,但因互相申請被其他程序所站用不會釋放的資源而處於的一種永久等待狀態。發生死鎖的原因如下:
一種原因是系統提供的資源太少了,遠不能滿足併發程序對資源的需求。這種競爭資源引起的死鎖是我們要討論的核心。例如:訊息是一種臨時性資源。某一時刻,程序a等待程序b發來的訊息,程序b等待程序c發來的訊息,而程序c又等待程序a發來的訊息。訊息未到,a,b,c三個程序均無法向前推進,也會發生程序通訊上的死鎖。
另一種原因是由於程序推進順序不合適引發的死鎖。資源少也未必一定產生死鎖。就如同兩個人過獨木橋,如果兩個人都要先過,在獨木橋上僵持不肯後退,必然會應競爭資源產生死鎖;但是,如果兩個人上橋前先看一看有無對方的人在橋上,當無對方的人在橋上時自己才上橋,那麼問題就解決了。所以,如果程式設計得不合理,造成程序推進的順序不當,也會出現死鎖.
在sql中,所以執行緒資訊儲存在master.dbo.sysprocesses表中,下面是該表字段的定義:
column name description
spid sql的執行緒id.
kpid microsoft windows nt 4.0® thread id.
blocked 阻塞當前執行緒的執行緒id
waittype 保留.
waittime 等待時間(ms),waittime=0表不在等待
lastwaittype 最後或當前等待型別
waitresource textual representation of a lock resource.
dbid 資料庫id (db_name(dbid)獲取資料庫名稱)
uid 執行當前命令的使用者id
cpu 程序的累計cpu時間
physical_io 累計讀寫次數
memusage 當前程式快取被程序分配的頁數,當值為負數表示 自由分配.
login_time 客戶端登入進伺服器的時間點,對於系統程序,儲存的是伺服器開啟的時間點.
last_batch 最後一次客戶端執行命令的時間點,對於系統進行,儲存的是伺服器開啟的時間點.
ecid 執行上下文id 用於標誌子執行緒作為乙個單獨的程序.
open_tran 開啟事務數
status 程序狀態 (running, sleeping, and so on).
sid 使用者的唯一識別碼
hostname 工作站名稱(傳送請求電腦名稱)
program_name 請求程式名稱
hostprocess 工作站程序id( 傳送請求電腦程序id)
cmd 當前被執行的指令.
nt_domain 客戶端 的網域名稱(假如用window驗證)
nt_username 程序的域 使用者名稱(假如用window驗證)
net_address 網絡卡位址
net_library 網路協議:tcp/ip sockets;named pipes;
nwlink ipx/spx…
loginame 登入人名稱
死鎖判定的方法是:阻塞id(blocked 字段)不為0,該id對應的執行緒就判定是造成死鎖的執行緒,當前id判斷為被阻塞執行緒.
我常用如下命令進行查詢死鎖的程序:
select spid, blocked, loginame, last_batch, status, cmd, hostname, program_name
from sysprocesses
where spid in ( select blocked from sysprocesses where blocked <> 0 ) or (blocked <>0)
MSSQL全文檢索
大家可能都會用 select from tb where field like 關鍵字 但是一旦資料量大使用者多,就會造成查詢過慢,因此ms提供一種犧牲空間來換取時間的解決方案。全文檢索。原文請看 我對自己的實現加了些注釋 use popask 使用這個庫 exec sp fulltext data...
MSSQL處理死鎖儲存過程
sql server死鎖使我們經常遇到的問題,下面就為您介紹如何查詢 sql server 死鎖,希望對您學習sql server死鎖方面能有所幫助。sql server死鎖的查詢方法 exec master.dbo.p lockinfo 0,0 顯示死鎖的程序,不顯示正常的程序 exec mast...
檢索程序資訊
步驟一 以使用者student登入,完成下列操作 分析 按ctrl shift t再開乙個終端,利用su命令切換進行操作,如圖 使用vim開啟student.txt檔案,不要編輯 不退出,命令操作如下所示 student localhost vim student.txt 按enter回車即可 切換...