ok, I will check if index is being utilized or not. The deadlock issue happens only in production. This started from last 8 months I would say. We have had several applications for last 4 years and only recently we have started to notice these deadlock errors.
Thanks, <Ajas Mohammed /> http://ajashadi.blogspot.com We cannot become what we need to be, remaining what we are. No matter what, find a way. Because thats what winners do. You can't improve what you don't measure. Quality is never an accident; it is always the result of high intention, sincere effort, intelligent direction and skillful execution; it represents the wise choice of many alternatives. On Tue, Jan 26, 2010 at 11:06 PM, Greg McTure <gmct...@gmail.com> wrote: > You can copy one of the update statements that you are using inside the > sproc (stored procedure) into the query analyzer and see the execution plan > for the update query. If the columns of the WHERE clause is in an index see > if than index is being utilized in the execution plan. > > Also, do you get the deadlock issue in all of your environments (i.e. dev, > test, and prod) or just in prod? > > Greg McTure > ------------------------------ > *From: * Ajas Mohammed <ajash...@gmail.com> > *Date: *Tue, 26 Jan 2010 22:17:03 -0500 > *To: *<discussion@acfug.org> > *Subject: *Re: [ACFUG Discuss] Issue --- Transaction (Process ID 136) was > deadlocked on lock | communication buffer resources with another process and > has been chosen as the deadlock victim. Rerun the transaction. > > Hi Greg, > > I will try to answer to the best of my knowledge. > > There are 407359 records in the table. There is only 1 record being > updated. > > Not sure if its full table is being locked or not. > > Do you have the ability to analyze the actual statement to get an execution > plan? > Well, let me see if I understand this first. Do you mean to say, I can copy > the stored proc code in sql query analyzer and run the stored procedure code > and see the execution plan perhaps? > > <Ajas Mohammed /> > http://ajashadi.blogspot.com > We cannot become what we need to be, remaining what we are. > No matter what, find a way. Because thats what winners do. > You can't improve what you don't measure. > Quality is never an accident; it is always the result of high intention, > sincere effort, intelligent direction and skillful execution; it represents > the wise choice of many alternatives. > > > On Tue, Jan 26, 2010 at 9:45 PM, Greg McTure <gmct...@gmail.com> wrote: > >> Hi Ajas: >> >> It may be helpful to see a section of your stored procedure code that is >> doing the updates. Also, approximately how many records are in each of the >> tables being updated and approximately how many records are being updated? >> The SQL engine or optimizer may behave differently depending on the database >> brand (i.e. Oracle, MSSQL, Sybase, MySQL, etc); however, generally speaking >> if the predicate of your WHERE clause covers most of the records in your >> table then the optimizer will complete a full table scan even with the >> presence of the indices. >> >> I would also consider looking to see if the full table is being locked on >> the updates. This should not be happening but it is just another angle to >> check out. I would not think this would not be an issue since I know in >> Oracle even if you are updating an entire table only the current row will be >> locked during the update. >> >> I don't see anything off-hand with your update statements. One can expect >> the best performance by updating the table with a single statement instead >> of multiple statements unless of'course you have so many records that your >> rollback segment becomes too small to support the number of records to be >> updated. >> >> Do you have the ability to analyze the actual statement to get an >> execution plan? >> >> >> On Tue, Jan 26, 2010 at 11:30 AM, Ajas Mohammed <ajash...@gmail.com>wrote: >> >>> Hi Greg, >>> >>> I found the stored proc which results in deadlock situation. It has lets >>> say about 10 updates like this >>> >>> update tbl set col3 = someval where col1 = @col1 and col2 = @col2 >>> >>> update tbl set col4= someval where col1 = @col1 and col2 = @col2 >>> >>> update tbl set col5 = someval where col1 = @col1 and col2 = @col2 >>> and so on for other cols 6-10. >>> >>> col1 and col2 are part of clustered index. >>> >>> I can share the code off the list. >>> >>> Thanks for your input. Makes lot of sense to get started with >>> troubleshooting. >>> >>> <Ajas Mohammed /> >>> http://ajashadi.blogspot.com >>> We cannot become what we need to be, remaining what we are. >>> No matter what, find a way. Because thats what winners do. >>> You can't improve what you don't measure. >>> Quality is never an accident; it is always the result of high intention, >>> sincere effort, intelligent direction and skillful execution; it represents >>> the wise choice of many alternatives. >>> >>> >>> >>> On Fri, Oct 30, 2009 at 5:14 PM, Greg McTure <gmct...@gmail.com> wrote: >>> >>>> Hi Ajas. >>>> >>>> Do you have any way of monitoring the SQL that is being passed across >>>> from CF to MSSQL ( preferably something better than SQL profiler but that >>>> will do in a pinch). >>>> >>>> Once you verify the SQL that is being sent to MSQL from CF, analyze the >>>> SQL to see if the expected index is actually hit when the query is ran >>>> through the SQL engine. That may identify a bottleneck or unexpected >>>> behavior right there. If the expected index is not being "hit" then you >>>> can >>>> revise the SQL to include a SQL to force the index usage. >>>> >>>> Also, if you have a monitoring tool that is able to capture the SQL in >>>> real time when being passed see if there are concurrent SQL threads running >>>> that are causing deadlocks, especially "blocking" locks. This would >>>> indicate multiple sql threading executing simultaneously and competing for >>>> the same SQL resources. I would also begin to check if the tables that the >>>> SQL is running against has "row level" or "table level" locking. I have >>>> seen cases before when somehow the tables unknowingly became configured for >>>> "table" level locking and that caused the deadlock. >>>> >>>> Hopefully, these checks can get you started with trying to isolate the >>>> cause of the deadlock. >>>> >>>> >>>> >>>> On Fri, Oct 30, 2009 at 4:55 PM, Ajas Mohammed <ajash...@gmail.com>wrote: >>>> >>>>> Hi, >>>>> >>>>> Just wondering if anyone faced the SQL Server deadlock error returned >>>>> by ColdFusion. WE are using SQL Server 2000 and ColdFusion 7. The error >>>>> returned is >>>>> >>>>> Error Executing Database Query. [Macromedia][SQLServer JDBC >>>>> Driver][SQLServer]Transaction (Process ID 136) was deadlocked on lock | >>>>> communication buffer resources with another process and has been chosen as >>>>> the deadlock victim. Rerun the transaction. >>>>> >>>>> Now, I do understand( from google search) that this could be because of >>>>> bad indexing or long processing update insert select at same time etc. Can >>>>> someone share their experience if any with this kind of issue. It would be >>>>> nice to know how to tackle this issue because we are seeing this >>>>> frequently >>>>> in several applications. >>>>> >>>>> thanks, >>>>> >>>>> Ajas Mohammed. >>>>> >>>>> >>>> >>> >> >