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

Откуда: ☭
Сообщений: 72988
SSMS показывает еxecuting, и хоть ногами его пинай. Выбор пункта script view as подтормаживает, но исполняется, а alter уже пару минут висит. Висит один конкретный view, остальные проверенные альтерятся мгновенно.

Пока писал, отработало. Времени заняло 3:26.

Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64)
26 ноя 13, 14:55    [15191864]     Ответить | Цитировать Сообщить модератору
 Re: Почему может зависать alter view?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Потому что в другом коннекте кто-то блокировал этот view ?
26 ноя 13, 14:56    [15191872]     Ответить | Цитировать Сообщить модератору
 Re: Почему может зависать alter view?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
автор
Времени заняло 3:26.


За это время можно было посмотреть какие блокировки и на какие объекты необходимы ALTER VIEW и какие процессы и какими блокировками этому мешают.
26 ноя 13, 14:58    [15191901]     Ответить | Цитировать Сообщить модератору
 Re: Почему может зависать alter view?  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72988
А еще могут быть причины?

Просто у проекта меньше десятка активных пользователей, а альтер я пытался запустить несколько раз в течении минут десяти, прежде чем запаниковать. И это первый случай, чтобы альтер подвис так надолго. В последнее время я часто этот view правил.
26 ноя 13, 15:01    [15191935]     Ответить | Цитировать Сообщить модератору
 Re: Почему может зависать alter view?  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72988
pkarklin
автор
Времени заняло 3:26.


За это время можно было посмотреть какие блокировки и на какие объекты необходимы ALTER VIEW и какие процессы и какими блокировками этому мешают.
Как смотреть блокировки? Кажется ни разу не приходилось.
26 ноя 13, 15:02    [15191951]     Ответить | Цитировать Сообщить модератору
 Re: Почему может зависать alter view?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Antonariy
А еще могут быть причины?

Причины надо мониторить в момент возникновения.
А не угадывать после

Antonariy
Просто у проекта меньше десятка активных пользователей,

Вы сами в одном коннекте окрыли представление на выборку данных, а во втором пытаетесь его править
26 ноя 13, 15:04    [15191969]     Ответить | Цитировать Сообщить модератору
 Re: Почему может зависать alter view?  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72988
Glory
Причины надо мониторить в момент возникновения.
А не угадывать после
Я это понимаю так: блокировка это единственная причина такого поведения. Блокировки нужно в момент выполнения, а не угадывать после.

Glory
Вы сами в одном коннекте окрыли представление на выборку данных, а во втором пытаетесь его править
Я сам не открывал его на выборку данных. Я останавливал alter и выполнял команду script view as.
26 ноя 13, 15:08    [15192012]     Ответить | Цитировать Сообщить модератору
 Re: Почему может зависать alter view?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Antonariy,

автор
Как смотреть блокировки?


sys.dm_tran_locks

автор
Просто у проекта меньше десятка активных пользователей, а альтер я пытался запустить несколько раз в течении минут десяти, прежде чем запаниковать. И это первый случай, чтобы альтер подвис так надолго.


Для того, чтобы выполнить ALTER VIEW надо наложить Sch-M на само view и Sch-S на все таблицы, которые в нем участвуют. Так как эти блокировки ни с какими другими не совместимы, придется ждать момента, когда все блокировки со всем "причастных" объектов будут "сняты".
26 ноя 13, 15:09    [15192018]     Ответить | Цитировать Сообщить модератору
 Re: Почему может зависать alter view?  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72988
А как узнать, почему может не работать триггер? На тестовой базе работает, на рабочей — нет. Версии серверов немного отличались:

Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64) Jun 28 2012 08:36:30 Copyright (c) Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
Тут работает.

Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) Apr 2 2010 15:48:46 Copyright (c) Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)
Тут нет.

Перед написанием поста накатил 2й сервиспак на рабочий сервер, триггер не заработал. А потом эта долбаная виртуалка откатилась обратно к 10.50.1600.1.

Триггер:
create TRIGGER [dbo].[AddSuppliers] 
   ON  [dbo].[tblPrice] 
   FOR INSERT
AS 
BEGIN
	SET NOCOUNT ON;

	insert into tblParticipant(ProductionID, OrganizationID, ActivityTypeID)
	select distinct I.ProductionID, I.OrganizationID, 2
	from inserted I
	left join tblParticipant P on 
		P.ProductionID = I.ProductionID and
		P.OrganizationID = I.OrganizationID and
		P.ActivityTypeID = 2 
	where P.ParticipantID is null
	
END	
Пробовал делать не insert, а select into tmp, табличка с правильными данными создается. То есть принципиально триггер срабатывает, но данные не попадают, куда нужно.
Пробовал удалять все ключи и связи в tblParticipant, результат нулевой.

Счетчик identity при этом в tblParticipant растет.

На tblPrice есть еще 4 триггера, 1 after delete, 1 for update и 2 for insert, update. Они все работают. Триггеры for insert, update правят данные в tblPrice при обновлении определенных полей, они как бы не при делах. Триггер for delete удаляет из tblParticipant, а триггер for update удаляет из tblParticipant при определенных условиях. Но они тоже вроде как не при делах, я insert делаю.

Что еще попробовать?
4 дек 13, 15:04    [15239725]     Ответить | Цитировать Сообщить модератору
 Re: Почему может зависать alter view?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Antonariy
Счетчик identity при этом в tblParticipant растет.

rollback transaction делается
4 дек 13, 15:06    [15239741]     Ответить | Цитировать Сообщить модератору
 Re: Почему может зависать alter view?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Или у tblParticipant есть свой триггер, который удаляет данные
4 дек 13, 15:07    [15239747]     Ответить | Цитировать Сообщить модератору
 Re: Почему может зависать alter view?  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72988
Glory
Или у tblParticipant есть свой триггер, который удаляет данные
У нее нет триггеров.

Попробовал таки дропнуть триггер for update, данные в tblParticipant стали вставляться.
4 дек 13, 15:33    [15239961]     Ответить | Цитировать Сообщить модератору
 Re: Почему может зависать alter view?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Antonariy
У нее нет триггеров.

Попробовал таки дропнуть триггер for update, данные в tblParticipant стали вставляться.

Ну так все равно триггер

ЗЫ
Вот интересно, как люди узнают что триггер "работает/не работает" без нормального дебаггинга или трассировки ?
4 дек 13, 15:45    [15240066]     Ответить | Цитировать Сообщить модератору
 Re: Почему может зависать alter view?  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72988
Еще одна загадка.

До сего дня такая конструкция работала нормально:

declare @Qry nvarchar(max), @handle int, @rows int

set @Qry = 'select ProductionID, [Index], Name, Code, OrgFull from rvProduction order by Name'

EXEC sp_cursoropen 
  @handle OUT, 
  @Qry, 
  1, 1, 
  @rows OUT 
EXEC sp_cursorfetch 
  @handle, 
  16, 1, 20
EXEC sp_cursorclose @handle;
Но внезапно стала отваливаться по таймауту. Причем только на вьюшке rvProduction.
Однако, стоило сделать
set @Qry = 'select * from rvProduction order by Name'

— заработало.

В чем тут-то проблема?
11 дек 13, 12:30    [15276226]     Ответить | Цитировать Сообщить модератору
 Re: Почему может зависать alter view?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Antonariy
Но внезапно стала отваливаться по таймауту.

Таймаут времени выполнения задает только клиентское приложение
Если выполнение команды не укладывается в заданный вами таймаут, то
- либо меняйте таймаут
- либо оптимизируйте запрос
11 дек 13, 12:32    [15276238]     Ответить | Цитировать Сообщить модератору
 Re: Почему может зависать alter view?  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72988
Оба варианта запроса я делал под SSMS без ограничений по времени. Select * from отрабатывает мгновенно, окончания селекта с полями я ни разу не дождался.
11 дек 13, 12:37    [15276286]     Ответить | Цитировать Сообщить модератору
 Re: Почему может зависать alter view?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Antonariy
Оба варианта запроса я делал под SSMS без ограничений по времени

Еще раз - Таймаут времени выполнения задает только клиентское приложение
Если вы лично не указали таймаут, то не не значит, что таймаута нет.

Antonariy
Select * from отрабатывает мгновенно, окончания селекта с полями я ни разу не дождался.

И чего вы ждете ?
Что кто-то придет и начнет сравнивать планы выполнения ? искать узкие места ? оптимизировать их ?
11 дек 13, 12:40    [15276308]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить