Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 отображение блокировок после SWITH TO Table  [new]
soljo_ua
Member

Откуда: Киев
Сообщений: 369
Может кто видел, может кто нет, но столкнулся с такой ситуацией.
Для архивации данных использую SWITH TO в темповую таблицу и заливку обратно в боевую таблицу нужных данных. После данной процедуры отображение блокировок ведет себя странно, в реальности идет блокировка боевой таблицы, но при выполнении скрипта на просмотр кол-ва и времени блокировок мне показывает блокировку на темповой таблице.
Скрипты для тестирования

USE [Test_Switching]
CREATE TABLE [dbo].[Table_1] ( [Id] [int] NOT NULL )
ON  [PRIMARY]
GO
CREATE UNIQUE CLUSTERED INDEX [ClusteredIndex-20141104-130653] ON [dbo].[Table_1]
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, 
SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, 
ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO

USE [Test_Switching]
GO
CREATE TABLE [dbo].[Table_2] ( [Id] [int] NOT NULL )
ON  [PRIMARY]
GO
CREATE UNIQUE CLUSTERED INDEX [ClusteredIndex-20141104-130718] ON [dbo].[Table_2]
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, 
SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, 
DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, 
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO

USE [Test_Switching]
GO
TRUNCATE TABLE dbo.Table_1
DECLARE @id INT
SET @id = 1
WHILE @id <> 2000 
    BEGIN 
        INSERT  INTO [dbo].[Table_1]
                ( [Id] )
                SELECT  @id 
        SET @id = @id + 1
    END 

Теперь создадим блокировку
SELECT  *
FROM    dbo.Table_1 t1 WITH ( UPDLOCK )
        CROSS JOIN dbo.Table_1 t2 WITH ( UPDLOCK )

и в параллели выполняем
UPDATE  dbo.Table_1 WITH ( UPDLOCK )
SET     Id = 2000
WHERE   Id = 555

после выполнения смотрим на блокировки
SELECT  DB_NAME(database_id) DB ,
        OBJECT_NAME(object_id) Obj ,
        row_lock_count ,
        page_lock_count ,
        row_lock_wait_count ,
        page_lock_wait_count ,
        row_lock_wait_in_ms + page_lock_wait_in_ms Block_Wait_Time ,
        ( ( row_lock_wait_in_ms + page_lock_wait_in_ms )
          / ( row_lock_wait_count + page_lock_wait_count ) ) / 1000 avg_time_block ,
        index_id,
        partition_number
FROM    sys.dm_db_index_operational_stats(NULL, NULL, NULL, NULL)
WHERE   row_lock_count + page_lock_count > 0
        AND DB_NAME(database_id) = 'Test_Switching'
        AND ( row_lock_wait_count + page_lock_wait_count ) > 0
ORDER BY 5 DESC

видим блокировку на таблице 1
выполняем скрипт
ALTER TABLE dbo.Table_1 SWITCH TO dbo.Table_2

INSERT  INTO dbo.Table_1
        ( Id 
        )
        SELECT  id
        FROM    dbo.Table_2
        WHERE   Id > 800

после чего запускаем скрипты на создание блокировки (только нужно поменять значения ID при UPDATE таблицы ) и скрипт на просмотр блокировок и там странным образом появляется вторая таблица.
Пока не нашел что где почистить чтобы выборка блокировок отображалась корректно кроме как рестарт сервиса
4 ноя 14, 14:43    [16796010]     Ответить | Цитировать Сообщить модератору
 Re: отображение блокировок после SWITH TO Table  [new]
Glory
Member

Откуда:
Сообщений: 104751
soljo_ua
Теперь создадим блокировку
SELECT  *
FROM    dbo.Table_1 t1 WITH ( UPDLOCK )
        CROSS JOIN dbo.Table_1 t2 WITH ( UPDLOCK )

А что удержит эту блокировку после завершения запроса ?
4 ноя 14, 14:52    [16796061]     Ответить | Цитировать Сообщить модератору
 Re: отображение блокировок после SWITH TO Table  [new]
soljo_ua
Member

Откуда: Киев
Сообщений: 369
Glory
soljo_ua
Теперь создадим блокировку
SELECT  *
FROM    dbo.Table_1 t1 WITH ( UPDLOCK )
        CROSS JOIN dbo.Table_1 t2 WITH ( UPDLOCK )

А что удержит эту блокировку после завершения запроса ?

в параллели запускаем второй скрипт на апдейт
4 ноя 14, 14:55    [16796071]     Ответить | Цитировать Сообщить модератору
 Re: отображение блокировок после SWITH TO Table  [new]
Glory
Member

Откуда:
Сообщений: 104751
soljo_ua
в параллели запускаем второй скрипт на апдейт

Я могу из одного коннекта указать, как должны вести себя блокировки в другом коннекте ?
4 ноя 14, 14:58    [16796083]     Ответить | Цитировать Сообщить модератору
 Re: отображение блокировок после SWITH TO Table  [new]
soljo_ua
Member

Откуда: Киев
Сообщений: 369
Glory
Я могу из одного коннекта указать, как должны вести себя блокировки в другом коннекте ?

нет конечно
4 ноя 14, 15:14    [16796139]     Ответить | Цитировать Сообщить модератору
 Re: отображение блокировок после SWITH TO Table  [new]
soljo_ua
Member

Откуда: Киев
Сообщений: 369
Glory,

если вопрос только в удержании блокировки то можно запустить в первом коннекте
BEGIN TRAN
SELECT  *
FROM    dbo.Table_1 WITH ( UPDLOCK )

во втором
UPDATE  dbo.Table_1 WITH ( UPDLOCK )
SET     Id = 2000
WHERE   Id = 555

получить блокировку ну и потом в первом коннекте выполнить
COMMIT TRAN

и получим нужную нам блокировку
4 ноя 14, 15:24    [16796171]     Ответить | Цитировать Сообщить модератору
 Re: отображение блокировок после SWITH TO Table  [new]
Glory
Member

Откуда:
Сообщений: 104751
soljo_ua
Glory
Я могу из одного коннекта указать, как должны вести себя блокировки в другом коннекте ?

нет конечно

Тогда возвращаемся к вопросу
Что заставит сервер удерживать блокировки на время большее, чем нужно для выполонения запроса
SELECT *
FROM dbo.Table_1 t1 WITH ( UPDLOCK )
CROSS JOIN dbo.Table_1 t2 WITH ( UPDLOCK )
4 ноя 14, 15:25    [16796175]     Ответить | Цитировать Сообщить модератору
 Re: отображение блокировок после SWITH TO Table  [new]
soljo_ua
Member

Откуда: Киев
Сообщений: 369
Glory,

ничего
4 ноя 14, 15:26    [16796178]     Ответить | Цитировать Сообщить модератору
 Re: отображение блокировок после SWITH TO Table  [new]
Glory
Member

Откуда:
Сообщений: 104751
soljo_ua
и получим нужную нам блокировку

И вы так сделали и все равно не получили эти блокировки в своем списке ?
4 ноя 14, 15:26    [16796182]     Ответить | Цитировать Сообщить модератору
 Re: отображение блокировок после SWITH TO Table  [new]
Glory
Member

Откуда:
Сообщений: 104751
soljo_ua
Glory,

ничего

Тогда о чем ваш вопрос ?
О том, почему я не вижу блокировок после того, как что-то отработало ?
4 ноя 14, 15:28    [16796190]     Ответить | Цитировать Сообщить модератору
 Re: отображение блокировок после SWITH TO Table  [new]
soljo_ua
Member

Откуда: Киев
Сообщений: 369
Glory,

блокировку я получил в списке, вопрос в другом почему после SWITCH TO блокировки созданные на 1 таблице отображаются как блокировка на 2 таблице
4 ноя 14, 15:28    [16796192]     Ответить | Цитировать Сообщить модератору
 Re: отображение блокировок после SWITH TO Table  [new]
Glory
Member

Откуда:
Сообщений: 104751
soljo_ua
Glory,

блокировку я получил в списке, вопрос в другом почему после SWITCH TO блокировки созданные на 1 таблице отображаются как блокировка на 2 таблице

Потому что вы получаете снапшот блокировок на какой-то момент времени.
А не историю наложения/снятия блокировок.
4 ноя 14, 15:30    [16796203]     Ответить | Цитировать Сообщить модератору
 Re: отображение блокировок после SWITH TO Table  [new]
soljo_ua
Member

Откуда: Киев
Сообщений: 369
Glory,

а при чем тут снапшот, когда блокировка накладывается/снимается на объект со своим object_id, а отображается как блокировка наложенная/снятая на другой обьект со своим object_id? хотя в запросах отправляемых работающим приложением к серверу 2 объекта никогда не будет
Вот и хочу узнать почему так ведет себя сервер после использования SWITCH TO
4 ноя 14, 15:38    [16796242]     Ответить | Цитировать Сообщить модератору
 Re: отображение блокировок после SWITH TO Table  [new]
Glory
Member

Откуда:
Сообщений: 104751
soljo_ua
а при чем тут снапшот, когда блокировка накладывается/снимается на объект со своим object_id, а отображается как блокировка наложенная/снятая на другой обьект со своим object_id? хотя в запросах отправляемых работающим приложением к серверу 2 объекта никогда не будет

Мне просто интересно, как вы, переключаясь между разными окнами запросов, точно значете, в какой стадии выполнения находится каждый из запросов ?
Вы почему то решили, что на момент вашей выборки списка блокировок, это список должен быть вот таким и никаким другим
4 ноя 14, 15:41    [16796263]     Ответить | Цитировать Сообщить модератору
 Re: отображение блокировок после SWITH TO Table  [new]
soljo_ua
Member

Откуда: Киев
Сообщений: 369
[quot Glory]Мне просто интересно, как вы, переключаясь между разными окнами запросов, точно значете, в какой стадии выполнения находится каждый из запросов ?
не знаю
Glory
Вы почему то решили, что на момент вашей выборки списка блокировок, это список должен быть вот таким и никаким другим

как по мне логично то что в списке блокировок должны быть объекты, на которых блокировки присутствовали, но ни как не те объекты, к которым даже не было обращения со стороны клиента
4 ноя 14, 15:58    [16796331]     Ответить | Цитировать Сообщить модератору
 Re: отображение блокировок после SWITH TO Table  [new]
Glory
Member

Откуда:
Сообщений: 104751
soljo_ua
как по мне логично то что в списке блокировок должны быть объекты, на которых блокировки присутствовали, но ни как не те объекты, к которым даже не было обращения со стороны клиента

Замечательная логика.
Может вы еще расскажите, как именно сервер выполнял каждый из запросов в каждый из моментов времени ?
4 ноя 14, 16:03    [16796355]     Ответить | Цитировать Сообщить модератору
 Re: отображение блокировок после SWITH TO Table  [new]
soljo_ua
Member

Откуда: Киев
Сообщений: 369
Glory
soljo_ua
как по мне логично то что в списке блокировок должны быть объекты, на которых блокировки присутствовали, но ни как не те объекты, к которым даже не было обращения со стороны клиента

Замечательная логика.
Может вы еще расскажите, как именно сервер выполнял каждый из запросов в каждый из моментов времени ?

Этого я не расскажу, как и Вы не расскажете.
У меня вопрос - Вы смоделировали описанную мною ситуацию?
4 ноя 14, 16:14    [16796401]     Ответить | Цитировать Сообщить модератору
 Re: отображение блокировок после SWITH TO Table  [new]
soljo_ua
Member

Откуда: Киев
Сообщений: 369
возможно после этого Вы поймете о чем я говорю и для корректного наблюдения за блокировками ну ни как не хочется рестартовать сервис, после каждого выполнения команды SWITCH TO
4 ноя 14, 16:17    [16796409]     Ответить | Цитировать Сообщить модератору
 Re: отображение блокировок после SWITH TO Table  [new]
Glory
Member

Откуда:
Сообщений: 104751
soljo_ua
Этого я не расскажу, как и Вы не расскажете.

Только вам, по секрету
Есть план выполнения запроса.
А профайлере есть события наложения/снятия блокировки

soljo_ua
У меня вопрос - Вы смоделировали описанную мною ситуацию?

Смоделировать что ?
Вашу логику/мнение о том, сколько и каких блокировок должен использовать сервер ?
4 ноя 14, 16:18    [16796416]     Ответить | Цитировать Сообщить модератору
 Re: отображение блокировок после SWITH TO Table  [new]
soljo_ua
Member

Откуда: Киев
Сообщений: 369
Glory
soljo_ua
Этого я не расскажу, как и Вы не расскажете.

Только вам, по секрету
Есть план выполнения запроса.
А профайлере есть события наложения/снятия блокировки


и как Вы себе представляете работу сервера при круглосуточном использовании профайлера для отлавливания блокировок на любой момент времени?

Вопрос то звучал абсолютно не про то что Вы говорите

Glory
Смоделировать что ?
Вашу логику/мнение о том, сколько и каких блокировок должен использовать сервер ?


Повторю ситуацию:
Есть объект Table1, к которому идет постоянное обращение и накладывание блокировок.
Есть объект Table2, который используется для моих целей и обращение к нему происходит только по моей инициативе.
Периодически смотрю кол-во блокировок и ожиданий на Table1.
Периодически данные из Table1 сливаются в архивную Table2 по средствам команды SWITCH TO
И после этого обращения к Table2 не происходит, то есть в запросах отправляемых к серверу Table2 отсутствует
Если после операции SWITCH TO, посмотреть кол-во блокировок и ожиданий на Table1 то видно, что кол-во блокировок и ожиданий не изменяется, но при этом растет на Table2, хотя к ней запросов на выборку, вставку, изменение данных нет.
То есть сервер возвращает не корректную информацию о кол-ве ожиданий и блокировок.
4 ноя 14, 16:42    [16796501]     Ответить | Цитировать Сообщить модератору
 Re: отображение блокировок после SWITH TO Table  [new]
Glory
Member

Откуда:
Сообщений: 104751
soljo_ua
и как Вы себе представляете работу сервера при круглосуточном использовании профайлера для отлавливания блокировок на любой момент времени?

Кто-то тут советовал "смоделировать ситуацию"

soljo_ua
То есть сервер возвращает не корректную информацию о кол-ве ожиданий и блокировок.

Т.е. вы хотите сказать, что блокировки накладываются/снимаются, но не отображаются в sys.dm_db_index_operational_stats ?
4 ноя 14, 16:45    [16796508]     Ответить | Цитировать Сообщить модератору
 Re: отображение блокировок после SWITH TO Table  [new]
soljo_ua
Member

Откуда: Киев
Сообщений: 369
soljo_ua
То есть сервер возвращает не корректную информацию о кол-ве ожиданий и блокировок.

Т.е. вы хотите сказать, что блокировки накладываются/снимаются, но не отображаются в sys.dm_db_index_operational_stats ?[/quot]

отображаются, но не на тот объект
4 ноя 14, 16:49    [16796517]     Ответить | Цитировать Сообщить модератору
 Re: отображение блокировок после SWITH TO Table  [new]
Glory
Member

Откуда:
Сообщений: 104751
soljo_ua
отображаются, но не на тот объект

Еще раз вопрос
Вы видите в профайлере наложение одних блокировок, а в sys.dm_db_index_operational_stats - других ?
Или вы видите в sys.dm_db_index_operational_stats цифры, не соответствующие вашей логике наложения блокировок ?
4 ноя 14, 16:53    [16796530]     Ответить | Цитировать Сообщить модератору
 Re: отображение блокировок после SWITH TO Table  [new]
soljo_ua
Member

Откуда: Киев
Сообщений: 369
Glory
soljo_ua
отображаются, но не на тот объект

Еще раз вопрос
Вы видите в профайлере наложение одних блокировок, а в sys.dm_db_index_operational_stats - других ?
Или вы видите в sys.dm_db_index_operational_stats цифры, не соответствующие вашей логике наложения блокировок ?

и в профайлере и в sys.dm_db_index_operational_stats показано наложение блокировки на объект с object_id например 82237397 (это Table2 в которую был SWITCH), но такого объекта физически в базе нет.
4 ноя 14, 17:09    [16796595]     Ответить | Цитировать Сообщить модератору
 Re: отображение блокировок после SWITH TO Table  [new]
soljo_ua
Member

Откуда: Киев
Сообщений: 369


К сообщению приложен файл. Размер - 126Kb
4 ноя 14, 17:14    [16796613]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить