SQL code/*--處理死鎖
創新互聯建站是一家專注于成都網站建設、成都網站設計與策劃設計,內黃網站建設哪家好?創新互聯建站做網站,專注于網站建設10年,網設計領域的專業建站公司;建站業務涵蓋:內黃等地區。內黃做網站價格咨詢:18982081108
查看當前進程,或死鎖進程,并能自動殺掉死進程
因為是針對死的,所以如果有死鎖進程,只能查看死鎖進程
當然,你可以通過參數控制,不管有沒有死鎖,都只查看死鎖進程
--鄒建 2004.4--*/
/*--調用示例
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 blocked0
)a order by s1,s2
select @count=@@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 @count=@@rowcount
end
if @count0
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=@count
begin
select @spid=進程ID,@標志=標志 from #t where id=@i
insert #t1 exec('dbcc inputbuffer('+@spid+')')
if @標志='死鎖的進程' exec('kill '+@spid)
set @i=@i+1
end
end
else
while @i=@count
begin
select @s='dbcc inputbuffer('+cast(進程ID as varchar)+')' from #t where id=@i
insert #t1 exec(@s)
set @i=@i+1
end
select a.*,進程的SQL語句=b.EventInfo
from #t a join #t1 b on a.id=b.id
end
go
SQL Server 的內存管理機制是:
有可用內存, 則為新需求分配內存
無可用內存時, 釋放內存來處理新需求.
這是SQL Server 緩沖池的預期行為。
默認情況下,在啟動 SQL Server之后,SQL Server會根據操作系統報告的物理內存數來動態增大或縮小高速緩沖存儲器的容量。
只要可用物理內存大小保持在4MB到10MB之間,SQL Server 緩沖池就會繼續增大(保留可用物理內存在4MB到10MB之間是為了
避免操作系統因為缺少內存而頻繁地換頁)。如果物理可用內存變得較少的時候,則SQL Server會將一些內存釋放給操作系統。
解決方案:
1.給操作系統、sql server打最新補丁
2.確保不是病毒原因(可能性比較?。?/p>
3.sql server設計時的要求就是最大可能的減少磁盤的I/O,磁盤I/O是比較消耗資源的,這個磁盤I/O包括了讀取數據庫文件
還有和虛擬內存的頁交換。如果還有足夠的可用內存它都會毫不吝嗇的使用的(沒有設置上限),它會根據需要動態獲取和
釋放內存的。你要分析的是這占用的內存開銷主要用做了什么?是不是有大型的查詢或事務操作。
4.如果服務器是專職的數據庫服務器,不建議設置最大內存上限。如果還有其它重要的服務在機器上運行,就要考慮它的內存
使用是否會影響其它服務的正常的運行和性能。如果你的服務器除了sql服務, 還有其他服務需求, 則需要設置sql server的最大內存限制
(1)阻塞是由于資源不足引起的排隊等待現象。
(2)死鎖是由于兩個對象在擁有一份資源的情況下申請另一份資源,而另一份資源恰好又是這兩對象正持有的,導致兩對象無法完成操作,且所持資源無法釋放。
本文題目:sqlserver自阻塞,sqlserver查詢阻塞
轉載注明:http://m.2m8n56k.cn/article18/hcecdp.html
成都網站建設公司_創新互聯,為您提供網站內鏈、服務器托管、全網營銷推廣、App設計、ChatGPT、定制網站
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:[email protected]。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯