Link to home
Start Free TrialLog in
Avatar of rjkirby
rjkirbyFlag for United Kingdom of Great Britain and Northern Ireland

asked on

SQL blocking a Procedure causing my SharePoint site unavailable

Hello, I am working on a SharePoint environment and I am not very much expert in SQL databases. In my environment there are 2 App Servers, 2 WFE and 1 DB server. I have 3 site collections, and the size of the one Content DB is more than 200GB, other 2 are 120GB and 100GB.

Currently I am facing an issue, that my SharePoint Portal goes down, and on further investigation we found out that there is a SQL deadlock causing the long queue in SQL that we kill manually and afterwards the site comes up and running.
The SQL Procedure that is being blocked is a stored procedure call SPROD_Contect_Intranet.dbo.pro_getStreamsForSite.
On a daily basis we get 40 to 50 plus blocks and we have to manually kill it.

The procedure name is SPPROD_Content_Intranet.dbo.proc_GetStreamsForSite, and the function which is blocking the SQL is INDEX REORGANIZE, What I can see here is very long wait situation which may not be unlocked until “INDEX REORGANIZE” is completed while another command is inserting a record into the same table. Also the SELECT command from the proc_GetStreamsForSite locked the table to get the siteID using the clustered index DocStreams_CI which is under “INDEX REORGANIZE” status. To me the situation looks almost in a dead-locked situation if not force to kill the blocking process which is the proc_GetStreamsForSite.”

Please suggest what could be the root cause and how to resolve it? Many Thanks,
SOLUTION
Avatar of Vitor Montalvão
Vitor Montalvão
Flag of Switzerland image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of rjkirby

ASKER

Thanks Vitor for your expert opinion.

There are 4 built in rules in SharePoint that are related to fragmented indices, and these runs when SQL thinks it should run (when it needs to re organize index and have resources).  And I am not 100% sure if the 4 rules are causing the SQL Locks. The 4 SharePoint rules are :

1 - Databases used by SharePoint have fragmented indices
2 - Search – One or more property databases have fragmented indices.
3 - Search - One or more crawl databases may have fragmented indices
4 - Search - One or more crawl databases may have fragmented indices

Microsoft Link on it - http://technet.microsoft.com/en-us/library/cc262731(v=office.14).aspx 

SQL Code:

1.      There were 33 processes blocked by proc_GetStreamsForSite.

a.      proc_GetStreamsForSite is selecting information from a function called TVF_DocStreams_SiteId as below.
 
SELECT
        DS.ExpirationUTC, DS.DocId, DS.SiteId, DS.Partition, DS.BSN, NULL, DS.Type, DS.Size, CASE WHEN DS.Size > @ChunkSize AND DS.Content IS NOT NULL THEN SUBSTRING(DS.Content, 1, @ChunkSize) ELSE DS.Content END, dbo.fn_RbsReference(DS.RbsId)
    FROM
        TVF_DocStreams_SiteId(@SiteId) AS DS
    WHERE
        (@IncludeRbs = 1 OR DS.RbsId IS NULL) AND
        (@IncludeInline = 1 OR DS.Content IS NULL)
 
The function TVF_DocStreams_SiteId is selecting information from the table called DocStreams as below.
    SELECT
        *
    FROM
        [dbo].[DocStreams] WITH (INDEX=DocStreams_CI, FORCESEEK)
    WHERE
        SiteId = @SiteId
 
 
2.      Among the blocked processes, I am very much interested in this one - ALTER INDEX [DocStreams_CI] ON [dbo].[DocStreams] REORGANIZE

b.      The index DocStreams_CI is a Clustered index which physically ordering the table by the configured columns order.

3.      Also Among them, majority of them were proc_WriteStreamToSQL.

c.      This stored proc has a command “INSERT INTO DocStreams (SiteId, DocId, Partition, BSN, Size, Content, RbsId, Type, ExpirationUTC) VALUES (@SiteId, @DocId,…”
 
What I can see here is very long wait situation which may not be unlocked until “INDEX REORGANIZE” is completed while another command is inserting a record into the same table.

Also the SELECT command from the proc_GetStreamsForSite locked the table to get the siteID using the clustered index DocStreams_CI which is under “INDEX REORGANIZE” status.
To me the situation looks almost in a dead-locked situation if not force to kill the blocking process which is the proc_GetStreamsForSite.
 

Thanks,
ASKER CERTIFIED SOLUTION
Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of rjkirby

ASKER

Thanks Vitor. Are these Index Rebuild activities triggered by SharePoint or SQL itself? as I plan to disable my 4 SharePoint Rules and see if we are still facing locks, these 4 rules are related with the SharePoint Databases indices fragmentation. Many Thanks,
Can be triggered from anywhere but the user that trigger it need to have the permissions for reindex.
Avatar of rjkirby

ASKER

Thanks Vitor. You are right, these 4 jobs that are triggered by SharePoint have Full rights on SQL DB so it could be the reason. Since 1 week we haven't experienced any locks so far.
That's good. Just schedule the reindex to run in non-productive periods and you won't have any issues with that.
Avatar of rjkirby

ASKER

Thanks Vitor.