Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как можно посмотреть детали блокировки.  [new]
nnedc
Member

Откуда:
Сообщений: 193
Есть Biztalk 2009. MS SQL 2008. В одном из интерфейсов при выполнении процедуры, блокируются запросы к базе.
Даже блокируется селект из таблицы, которая никак не связана с интерфейсом.
Подскажите, как посмотреть какая именно команда в процедуре вызывает блокировку.
Смотрю через TOAD Spotlight. Статус при выполнении процедуры - sleeping, blocking.
7 окт 12, 20:49    [13281029]     Ответить | Цитировать Сообщить модератору
 Re: Как можно посмотреть детали блокировки.  [new]
nnedc
Member

Откуда:
Сообщений: 193
Выяснил детали
Lock Type Mode Status Database Count Index Object Name
DATABASE S GRANT EDI 1
KEY X GRANT EDI 1 PK__ORSPHEAD__FDFC6CA533F4B129 ORSPHEAD
KEY X GRANT EDI 1 PK__AspNet_S__93F7AC693EFC4F81 AspNet_SqlCacheTablesForChangeNotification
OBJECT IX GRANT EDI 1 AspNet_SqlCacheTablesForChangeNotification
OBJECT IX GRANT EDI 1 ORSPHEAD
OBJECT IX GRANT EDI 1 BILLING_EVENTS_LOG
PAGE IX GRANT EDI 1 PK__ORSPHEAD__FDFC6CA533F4B129 ORSPHEAD
PAGE IX GRANT EDI 1 PK__AspNet_S__93F7AC693EFC4F81 AspNet_SqlCacheTablesForChangeNotification

Интересно, что блокируется вся база.
Две процедуры, которые вызывают блокировки:

+
USE [EDI]
GO
/****** Object:  StoredProcedure [dbo].[SP_GetDSADV_11]    Script Date: 10/08/2012 03:55:44 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER Procedure [dbo].[SP_GetDSADV_11]
AS
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
DECLARE @DOC_KEY bigint;

SELECT TOP 1 @DOC_KEY = DH.DESADV_KEY
FROM DESHEAD DH,
     PRTNR_STAT_REF PRT
WHERE DH.EDI_EXTRACT_FLAG='R'
  AND DH.BUYER_GLN=PRT.PARTNER
  AND PRT.STATUS_TYPE='EXTRACT_DESADV_DB_EANCOM_IF11'
  AND PRT.STATUS_VALUE='Y'
  AND DH.STATUS<>'DELETED';

UPDATE DESHEAD SET EDI_EXTRACT_FLAG = 'F' WHERE DESADV_KEY = @DOC_KEY;

SELECT TOP 1 DH.AD_NO_SUP,DH.BUYER_GLN,CONVERT(VARCHAR,DH.DELIVERY_DATE,112) as DELIVERY_DATE,DH.DELIVERY_NOTE_NO,CONVERT(varchar,DH.DESADV_DATE,112) as DESADV_DATE,
			DH.DESADV_KEY,DH.DESADV_NO,DH.DISPATCH_DATE,DH.PICKUP_DATE,DH.REQUIRED_DATE,DH.STATUS,DH.SUPPLIER_GLN,
			DH.TRANS_DOC,DH.TRANS_DOC_TYPE,
    (SELECT 
    S.CITY,S.CODE,S.COUNTRY_ID,S.DEPT,S.GLN,S.GLN_TYPE,S.NAME,S.STREET
    FROM DESGLNS S WHERE S.DESADV_KEY=DH.DESADV_KEY
    FOR XML AUTO,elements,TYPE),
    
    (SELECT 
    DP.BATCH_NO,DP.BBD,DP.BUYER_ART_NO,DP.COLOR,DP.CPS_NO,DP.DECLAR_NO,
    DP.GTIN,DP.ITEM_DESCR,DP.ITEM_NO,DP.ORDER_LINE_NO,DP.PART_ORD,
    DP.QTY_DELIVER,DP.QTY_ORDERED,DP.SIZE,DP.SIZE_DESCR,DP.SP_CONDITION,
    DP.SUP_ART_NO,DP.UOM_DELIV,DP.UOM_ORDERED
    FROM DESPOS DP WHERE DP.DESADV_KEY=DH.DESADV_KEY
    FOR XML AUTO,elements,TYPE),

    (SELECT REC.GLN FROM DESGLNS REC WHERE REC.DESADV_KEY=DH.DESADV_KEY AND REC.GLN_TYPE='REC' FOR XML AUTO,ELEMENTS,TYPE),
	(SELECT SEN.GLN FROM DESGLNS SEN WHERE SEN.DESADV_KEY=DH.DESADV_KEY AND SEN.GLN_TYPE='SEN' FOR XML AUTO,ELEMENTS,TYPE),
	
	(SELECT REF.DOC_DATE,REF.DOC_KEY,REF.DOC_NO,REF.DOC_TYPE
	 FROM DESDOC_REFS REF WHERE REF.DESADV_KEY=DH.DESADV_KEY FOR XML AUTO,ELEMENTS,TYPE),
	 
	 (SELECT CPSS.CPS_NO,CPSS.PARENT_CPS_NO
	 FROM DESCPSS CPSS WHERE CPSS.DESADV_KEY=DH.DESADV_KEY FOR XML AUTO,ELEMENTS,TYPE),

     (SELECT PACKS.CPS_NO,PACKS.GIN,PACKS.PACK_IDENT,PACKS.PACK_NO,PACKS.PACK_TYPE,PACKS.PCI,PACKS.QTY,PACKS.MEA_LAYER
	 FROM DESPACKS PACKS WHERE PACKS.DESADV_KEY=DH.DESADV_KEY FOR XML AUTO,ELEMENTS,TYPE)
    
    FROM DESHEAD DH
    WHERE DH.DESADV_KEY=@DOC_KEY      
    FOR XML auto, elements;


USE [EDI]
GO
/****** Object:  StoredProcedure [dbo].[SP_GET_ORDRSP_22]    Script Date: 10/08/2012 03:57:24 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author:		<Author,,Name>
-- Create date: <Create Date,,>
-- Description:	<Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[SP_GET_ORDRSP_22]
AS
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
DECLARE @DOC_KEY bigint;

SELECT TOP 1 @DOC_KEY = OH.ORDRSP_KEY
FROM PRTNR_STAT_REF PRT,ORSPHEAD OH
	WHERE OH.XML_EXTRACT_FLAG='R' 
      AND OH.BUYER_GLN=PRT.PARTNER 
      AND OH.STATUS <> 'DELETED'
      AND PRT.STATUS_TYPE='EXTRACT_ORDRSP_DB_XML_IF22' 
      AND PRT.STATUS_VALUE='Y';
      
UPDATE ORSPHEAD SET XML_EXTRACT_FLAG = 'F' where ORDRSP_KEY = @DOC_KEY;

	SELECT TOP 1
	OH.AD_NO_SUP,OH.BUYER_GLN,OH.CURRENCY,OH.ORDRSP_KEY,OH.ORDRSP_NO,
	OH.PICKUP_DATE,OH.PLAN_DATE_EST,OH.PLANNED_DATE,OH.PROMO_NO,
	OH.RETURN_DATE,OH.STATUS,OH.SUPPLIER_GLN,OH.VAT_RATE,OH.ORDRSP_DATE,
	(SELECT
	OP.BUYER_ART_NO,OP.COLOR,OP.GTIN,OP.ITEM_DESCR,OP.ITEM_NO,OP.NET_PRICE_DELIVERED,
	OP.NET_PRICE_ORDERED,OP.PROMO_NO as PPROMO_NO,OP.QTY_DELIVERED,OP.QTY_ORDERED,OP.SIZE,
	OP.SIZE_DESC,OP.SUP_ART_NO,OP.UOM
	FROM ORSPPOS OP WHERE OP.ORDRSP_KEY=OH.ORDRSP_KEY FOR XML AUTO,ELEMENTS,TYPE
	),
	(SELECT
	GLNS.CITY,GLNS.CODE,GLNS.COUNTRY_ID,GLNS.DEPT,GLNS.GLN,GLNS.GLN_TYPE,
	GLNS.NAME,GLNS.STREET,GLNS.VAT_NO
	FROM ORSPGLNS GLNS WHERE GLNS.ORDRSP_KEY=OH.ORDRSP_KEY FOR XML AUTO,ELEMENTS,TYPE
	),
	(SELECT
	RFF.DOC_KEY,RFF.DOC_NO,RFF.DOC_TYPE,RFF.DOC_DATE
	FROM ORSPDOC_REFS RFF WHERE RFF.ORDRSP_KEY=OH.ORDRSP_KEY FOR XML AUTO,ELEMENTS,TYPE
	)
	
	FROM ORSPHEAD OH
	WHERE OH.ORDRSP_KEY=@DOC_KEY
    FOR XML AUTO,ELEMENTS;


Получается, проблема в этой команде UPDATE ORSPHEAD SET XML_EXTRACT_FLAG = 'F' where ORDRSP_KEY = @DOC_KEY;
Что можно сделать в этом случае?

Сообщение было отредактировано: 8 окт 12, 12:28
8 окт 12, 02:25    [13281944]     Ответить | Цитировать Сообщить модератору
 Re: Как можно посмотреть детали блокировки.  [new]
aleks2
Guest
Чтой-то я ничо фатального не усматриваю в ваших блокировках.

Сообщение об ошибке приведите и журнал сервера посмотрите.

А так, общеукрепляюще, показана терапия
1. chkdsk /R/F диск_с_базой:
2. dbcc checkdb ('база', repair_allow_data_loss)
8 окт 12, 05:34    [13281977]     Ответить | Цитировать Сообщить модератору
 Re: Как можно посмотреть детали блокировки.  [new]
nnedc
Member

Откуда:
Сообщений: 193
aleks2,

Делалось. В логах ошибок нет.
Мне непонятно почему блокируется вся база.
8 окт 12, 09:10    [13282296]     Ответить | Цитировать Сообщить модератору
 Re: Как можно посмотреть детали блокировки.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31444
nnedc
Мне непонятно почему блокируется вся база.
Вы про DATABASE S GRANT EDI 1?
Это шаред-блокировка, чтоб во время выполнения запроса нельзя было дропнуть базу, только когда выполнится :-)
aleks2
А так, общеукрепляюще, показана терапия
2. dbcc checkdb ('база', repair_allow_data_loss)
Ну зачем такие серьёзные вещи советовать? Это уж слишком.

Просто сделать dbcc checkdb без repair это полезно в любом случае.
8 окт 12, 09:15    [13282311]     Ответить | Цитировать Сообщить модератору
 Re: Как можно посмотреть детали блокировки.  [new]
Glory
Member

Откуда:
Сообщений: 104760
nnedc
Мне непонятно почему блокируется вся база.

DATABASE S GRANT EDI 1 - это не "блокируется вся база"
Это общая блокировка, показывающая, что к базе кто-то подсоединен и использует ее
8 окт 12, 09:16    [13282314]     Ответить | Цитировать Сообщить модератору
 Re: Как можно посмотреть детали блокировки.  [new]
aleks2
Guest
nnedc
aleks2,

Делалось. В логах ошибок нет.
Мне непонятно почему блокируется вся база.


Вы ужо нам глупым разжуйте: как выглядит "блокируется вся база"?
8 окт 12, 09:32    [13282372]     Ответить | Цитировать Сообщить модератору
 Re: Как можно посмотреть детали блокировки.  [new]
nnedc
Member

Откуда:
Сообщений: 193
Не спорю, могу ошибаться.
Может поменять уровень изоляции?
8 окт 12, 11:03    [13282857]     Ответить | Цитировать Сообщить модератору
 Re: Как можно посмотреть детали блокировки.  [new]
Glory
Member

Откуда:
Сообщений: 104760
nnedc
Может поменять уровень изоляции?

Может сначала разобраться, какого же ресурса ждут блокированные ?
8 окт 12, 11:08    [13282893]     Ответить | Цитировать Сообщить модератору
 Re: Как можно посмотреть детали блокировки.  [new]
nnedc
Member

Откуда:
Сообщений: 193
Блокированные ждут окончания выполнения одной из двух процедур, которые приведены выше.
Только не знаю как посмотреть чего ждут процедуры, если это не взаимная блокировка.
8 окт 12, 11:43    [13283157]     Ответить | Цитировать Сообщить модератору
 Re: Как можно посмотреть детали блокировки.  [new]
aleks2
Guest
nnedc
Блокированные ждут окончания выполнения одной из двух процедур, которые приведены выше.
Только не знаю как посмотреть чего ждут процедуры, если это не взаимная блокировка.

1. Дык, если там надо модицировать ту же строку или страницу , то неизбежно будут ждать.
2. Тут надо бороться за сокращение времени исполнения процедуры. А не с блокировками.
8 окт 12, 11:53    [13283248]     Ответить | Цитировать Сообщить модератору
 Re: Как можно посмотреть детали блокировки.  [new]
Glory
Member

Откуда:
Сообщений: 104760
nnedc
Блокированные ждут окончания выполнения одной из двух процедур, которые приведены выше.

Откуда вы это знаете ? Где вы это увидели ?
8 окт 12, 11:56    [13283279]     Ответить | Цитировать Сообщить модератору
 Re: Как можно посмотреть детали блокировки.  [new]
nnedc
Member

Откуда:
Сообщений: 193
Как-то так
Картинка с другого сайта.
Можно ли в spotlight точно узнать, что приводит к блокировке?
14 окт 12, 16:08    [13315808]     Ответить | Цитировать Сообщить модератору
 Re: Как можно посмотреть детали блокировки.  [new]
nnedc
Member

Откуда:
Сообщений: 193
Ребят, ну подскажите что-нить.
С Sql Server особо нет опыта работы.
15 окт 12, 13:18    [13319539]     Ответить | Цитировать Сообщить модератору
 Re: Как можно посмотреть детали блокировки.  [new]
Glory
Member

Откуда:
Сообщений: 104760
nnedc
Ребят, ну подскажите что-нить.
С Sql Server особо нет опыта работы.

И что вам не понятно ?
коннект 109 с запросом SELECT блокирован коннектом 95 с запросом UPDATE
15 окт 12, 13:25    [13319617]     Ответить | Цитировать Сообщить модератору
 Re: Как можно посмотреть детали блокировки.  [new]
nnedc
Member

Откуда:
Сообщений: 193
Это да, но речь идет о двух разных таблицах. Я просто не могу понять причину этого.
15 окт 12, 13:41    [13319814]     Ответить | Цитировать Сообщить модератору
 Re: Как можно посмотреть детали блокировки.  [new]
Glory
Member

Откуда:
Сообщений: 104760
nnedc
Это да, но речь идет о двух разных таблицах. Я просто не могу понять причину этого.

Да что вы говорите ?
И как же один и тот же KEY:7:7205759 может принадлежать двум разным таблицам ?
Или вы научились делать один индекс для нескольких таблиц ?
15 окт 12, 13:46    [13319862]     Ответить | Цитировать Сообщить модератору
 Re: Как можно посмотреть детали блокировки.  [new]
Glory
Member

Откуда:
Сообщений: 104760
И еще там кто-то запустил процедуру SP_GetDAADV_??? и не торопится выбирать результаты ее работы.
Наверное кофе пошел пить ?
15 окт 12, 13:51    [13319919]     Ответить | Цитировать Сообщить модератору
 Re: Как можно посмотреть детали блокировки.  [new]
nnedc
Member

Откуда:
Сообщений: 193
Это процедура одного из интерфейса Biztalk (SP_GetDSADV_11)
Она приведена во втором посте.
Получается, что статус sleeping указывает на то, что база выполнила запрос, но новых не поступает?
Т.е. где-то в процедуре есть ожидание какого-то ресурса?
15 окт 12, 13:59    [13320005]     Ответить | Цитировать Сообщить модератору
 Re: Как можно посмотреть детали блокировки.  [new]
Glory
Member

Откуда:
Сообщений: 104760
nnedc
Получается, что статус sleeping указывает на то, что база выполнила запрос, но новых не поступает?
Т.е. где-то в процедуре есть ожидание какого-то ресурса?

сервер ждет новых команд, а не каких то ресурсов
15 окт 12, 14:02    [13320048]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить