Discover how to avoid deadlock in sql server, include the articles, news, trends, analysis and practical advice about how to avoid deadlock in sql server on alibabacloud.com
,net_address,S1=a.spid,s2=0From Master. sysprocesses a Join (Select blocked from master. sysprocesseswhere blocked>0and (@dbid is null or [email protected])Group by blocked) B on a.spid=b.blockedwhere a.blocked=0and (@dbid is null or [email protected])UNION ALLSelect ' |_ victim _> ',Spid,kpid,blocked,dbid,uid,loginame,cpu,login_time,open_tran,Status,hostname,program_name,hostprocess,nt_domain,net_address,S1=blocked,s2=spidFrom Master. sysprocesses Awhere blockedand (@dbid is null or [email prot
Tags:whileentrycas loops serve Blocking selectobjecttran Use [master] GO/****** Object: storedprocedure [dbo]. [Sp_who_lock] script date:07/30/2015 13:52:38 ******/SET ansi_nulls on Go SET quoted_identifier on Go ALTER procedure [dbo]. [Sp_who_lock] as BEGIN declare @spid int, @bl int, @intTransactionCountOnEntry int, NBS P @intRowcount int, @intCountProperties int, @intCount ER int CREATE TABLE #tmp_lock_who (ID int identity (SMALLINT,BL), spid smallint) IF @ @ERROR
also has a spid column, indicating the ID of the system process that is accessing SQL Server. You canUse the spid column as the parameter of DBCC inputbuffer () system function. Only the SQL Server sysadmins account can execute this function. The output of this function is the 255-character command corresponding to th
:
========================================================== ========================================================== ===
In fact, the deepest reason for all deadlocks is: resource competition performance 1:A user a accesses Table A (locking table A) and then accesses Table BAnother user B accesses table B (Table B is locked) and then attempts to access Table
At this time, user a has locked table B because user B has to wait for user B to release table B to continue. Well, the old man will hav
Detailed description of SQL Deadlock Detection Methods, detailed description of SQL lock Detection
The deadlock in SQL server refers to the state in which processes are permanently blocked. The following describes how to detect
this time, we can use the following stored procedures to detect the process and SQL statements that cause the deadlock. The built-in system stored procedures sp_who and sp_lock of SQL Server can also be used to find blocking and deadlocks, but the method described here is not easy to use.
Use masterGoCreate procedur
Deadlock in SQL Server refers to a state of permanent blocking between processes, and the following will show you how to detect SQL Server deadlocks in the hope of helping you.
Deadlock (dead
What is a deadlock?
====================
A deadlock occurs when two system server process IDs (SPIDs) are waiting for a resource and neither process can advance because the other process is preventing it from getting the resource. for example, Andrew holds a lock on table A and requests a lock on table B; Lindsay holds a lock on table B and requests a lock on tab
Let's start with an example of this, which can cause deadlocks in SQL Server 2000 and 2005. In this article, I use the latest CTP (Community Technology Preview, Community Technology Preview) version of SQL Server 2005, and the same applies to SQL
Record the deadlock process and solution of the company's warehouse database server, and the warehouse database
Four Conditions for deadlock:
Mutual exclusion: resources cannot be shared and can only be used by one process.
Hold and wait: processes that have obtained resources can apply for new resources again.
No pre-emption: allocated resources cannot be forcib
Sessions 1 and Session 2 cannot continue until the other party frees resources. Therefore, SQL Server chooses a session in the deadlock as the "deadlock victim."
Note: The deadlock victim's session will be killed and the transaction will be rolled back.
Note: deadlocks and
large transaction, the transaction is too large to allow other sessions to wait for exclusive lock time to become longer
2, everyone is using the same nonclustered index, and scan the Pricingexpressproductcode field
3, the index of repeated values are many
From the above symptoms can be basically judged, this nonclustered index is useless, you can disable the
ALTER INDEX [ix_pricingexpressproductcode_state] on [dbo]. [Orderxxx] DISABLE
After disabling, the
('dbcc inputbuffer ('+ @ spid + ')')
If @ sign = 'deadlocked process' exec ('Kill '+ @ spid)
Set @ I = @ I + 1
End
End
Else
While @ I
Begin
Select @ s = 'dbcc inputbuffer ('+ Cast (process ID as varchar) +') 'from # t where id = @ I
Insert # T1 exec (@ s)
Set @ I = @ I + 1
End
Select a. *, the SQL statement of the Process = B. eventinfo
From # t a join # t1 B on A. ID = B. ID
End
Go
Set quoted_identifier off
Go
Set
T1 reads the data, performs some actions, and then updates the data. Transaction T2 Do the same thing, T1 and T2 may overwrite each other's updates when updating the data, causing an error.
A, a, two users read the same data and modify it, and one of the user's modifications destroys the result of another modification, such as a booking system
The main method of concurrency control is to prevent users from doing certain operations over a period of time by locking to
complete code usage example:The above code will prevent SQL injection. Why is it?When prepare () is called, the query statement has been sent to the database server with only placeholders at this time? Send in the past, no user submitted data, when called to execute (), the user submitted values will be sent to the database, they are separate transmission, the two independent,
Label:"SQL Server 2005 deadlock resolution Exploration" mentioned earlier, deadlock severity, an average of one deadlock per day, and a lot of data and ideas in resolving and handling SQL server2005 deadlocks, and then we used the
Select T.username,count (*) from v$session T GROUP by T.username
//Find the sql_id value that a user is executing based on the user group session Select
* From V$session t where T.username = ' BUDGET ' and t.sql_id are NOT NULL
//lookup corresponding SQL_ID's corresponding SQL statement
select M.sql_text from V$session T, V$sqlarea m where t.username = ' BUDGET ' and t.sql_id = m.sql_id
//
SELECT * from V$sqlarea t where T. sql_id = ' G92sy7kwt6mrq '
The use of SQL Server as a database application system, will not be able to sometimes create a deadlock, after the deadlock, the maintenance personnel or developers will mostly only through the sp_who to find the deadlock process, and then killed with Sp_kill. With Sp_who_lo
( "SELECT COUNT (*) from user" $d = mysql_fetch_row ( $r $rand = mt_rand (0, $d [0]-1); $r = mysql_query ( "Select username from user LIMIT $rand, 1"
7. Avoid SELECT *The more data you read from the database, the slower the query becomes. And, if your database server and Web server are two separate servers, this also increases the loa
The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion;
products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the
content of the page makes you feel confusing, please write us an email, we will handle the problem
within 5 days after receiving your email.
If you find any instances of plagiarism from the community, please send an email to:
info-contact@alibabacloud.com
and provide relevant evidence. A staff member will contact you within 5 working days.