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

Откуда: Толком не помню, но помоему отуда же..
Сообщений: 509
Добрый вечер
столкнулся с неприятной ситуацией, когда в каскаде процедур нужно обновить одну маленькую, но очень важную таблицу.
Таблица простая...
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[account](
	[id] [int] IDENTITY(1,1) NOT NULL,
	[user_id] [int] NOT NULL,
	[amount_open] [int] NOT NULL,
	[amount_freez] [int] NOT NULL,
	[transaction_id] [int] NOT NULL,
	[status_id] [smallint] NOT NULL,
	[amount_request] [int] NOT NULL,
 CONSTRAINT [PK_account] PRIMARY KEY CLUSTERED 
(
	[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

ALTER TABLE [dbo].[account] ADD  DEFAULT ((0)) FOR [amount_open]
GO

ALTER TABLE [dbo].[account] ADD  DEFAULT ((0)) FOR [amount_freez]
GO

ALTER TABLE [dbo].[account] ADD  DEFAULT ((0)) FOR [transaction_id]
GO

ALTER TABLE [dbo].[account] ADD  DEFAULT ((1)) FOR [status_id]
GO

ALTER TABLE [dbo].[account] ADD  DEFAULT ('0') FOR [amount_request]
GO


и вот, в одной из процедур мне надо обновлять эту таблицу, обновить amount(ы) да ид транзакции, по ИД записи, но процедура утыкается в это обновление и валиться, причём в рандомное время на рандомном ИД что совсем обидно. Естественно всё что после обновления не проходит это заставляет в субботу искать правды по форумам.

Понимаю что что то лочит таблицу, но врага таинственного не могу найти.
Таблица то меньше чем 20 000 записей.

Поделитесь идеями что можно сделать?
9 дек 17, 20:01    [21021025]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE 12 секунд  [new]
invm
Member

Откуда: Москва
Сообщений: 9128
Extremist
но процедура утыкается в это обновление и валиться
И конечно же, как обычно, молча.
Extremist
Понимаю что что то лочит таблицу, но врага таинственного не могу найти.
Откуда пришло понимание, если валится молча?
Extremist
Поделитесь идеями что можно сделать?
Для начала перестать партизанить и показать сообщение об ошибке.
9 дек 17, 20:14    [21021043]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE 12 секунд  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30829
Extremist
Понимаю что что то лочит таблицу, но врага таинственного не могу найти.
Любое действие вызывает блокировки, их тысячи в секунду.
Extremist
Поделитесь идеями что можно сделать?
Ну, нужно что нибудь поменять. От вас пока никакой конкретики, что ещё можно посоветовать? Может, у вас таймаут на выполнение 1 секунда? Может, процедура нарушает констрейн? Пока ничего непонятно, даже какая ошибка.
9 дек 17, 20:21    [21021050]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE 12 секунд  [new]
Extremist
Member

Откуда: Толком не помню, но помоему отуда же..
Сообщений: 509
invm,

а никаких ошибок нет. Наставил кучу логов по ходу процедуры, точнее процедур и просто обрыв.
Перезапуск последней команды на апдейт таблицы и он исполняется, но 5-12 секунд.

Ощущение. что процедура попросту не дожидается ответа, притом никаких ошибок вообще. типа ничего не было.
9 дек 17, 20:33    [21021066]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE 12 секунд  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30829
Extremist
а никаких ошибок нет. Наставил кучу логов по ходу процедуры, точнее процедур и просто обрыв.
Сервер делает вид, что процедура выполняется, но она не выполняется? Чудеса.
Откуда тогда идея про локи? Отваливание по таймауту, или отваливание по дедлокам - совершенно конкретные ошибки, с кодом и текстом.
9 дек 17, 20:37    [21021072]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE 12 секунд  [new]
Extremist
Member

Откуда: Толком не помню, но помоему отуда же..
Сообщений: 509
alexeyvg,

тай аутов нет, все известные на эту таблицу WITH (NOLOCK)


>Может, процедура нарушает констрейн?

можно чуть подробнее?

по поводу ошибки- нет ошибки. В ручную добиться такого поведения не могу
на второй базе такая же структура как часики работает, только разница версий, на которой лаги
Microsoft SQL Server 2012 (SP1) - 11.0.3128.0 (X64)

на которой всё красиво 12
Microsoft SQL Server 2014 - 12.0.2000.8 (X64)
9 дек 17, 20:39    [21021079]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE 12 секунд  [new]
Extremist
Member

Откуда: Толком не помню, но помоему отуда же..
Сообщений: 509
alexeyvg,

создал отдельную таблицу, пишу туда каждую строчку перед исполнением
строчка есть, исполнения нет, после строчки тишина
9 дек 17, 20:42    [21021086]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE 12 секунд  [new]
iap
Member

Откуда: Москва
Сообщений: 46954
Extremist,

в профайлере не видно, что происходит?
9 дек 17, 21:16    [21021138]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE 12 секунд  [new]
Extremist
Member

Откуда: Толком не помню, но помоему отуда же..
Сообщений: 509
iap,
база активно используется, бонусом радомность ошибки, сейчас профайлером записываю всё, но пока тишина
9 дек 17, 21:28    [21021154]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE 12 секунд  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
Extremist
на которой лаги
Microsoft SQL Server 2012 (SP1) - 11.0.3128.0 (X64)

С того момента вышли SP2, SP3, SP4.

А в SP2 был фикс KB805659, который сильно смахивает на Ваши условия. Не дословно, конечно, но вот это "в каскаде процедур нужно обновить одну маленькую, но очень важную таблицу" и "[id] [int] IDENTITY(1,1) NOT NULL".
И был достаточно забавный фикс KB1347204, где речь шла о последовательностях и cross-database transaction. "процедура утыкается в это обновление и валиться, причём в рандомное время на рандомном ИД что совсем обидно" - а учитывая, что правили как раз те места, которые Вам мешают своими падениями...Плюс в SP3 был фикс KB3107397, тоже видно, что оптимизатор запросов чинили.

И еще, коллега, после фикса KB3146404 работать на 2012-м без SP4 - это достаточно легкомысленно. Не думайте, что я призываю Вас все бросить и накатить, но лучше, чтобы у Вас версия релиза стала 11.00.7001, а не 11.00.3128.
10 дек 17, 00:25    [21021365]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE 12 секунд  [new]
Extremist
Member

Откуда: Толком не помню, но помоему отуда же..
Сообщений: 509
Andy_OLAP,

Большое спасибо.
Да, обновление версии уже рассматривалось как опция, но менеджеры не верят в способность базы данных содержать ошибки.
Думаю аргументов в вашем письме достаточно что бы необходимые средства были выделены.

Большое вам спасибо.
10 дек 17, 11:55    [21021581]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE 12 секунд  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30829
Extremist
alexeyvg,

создал отдельную таблицу, пишу туда каждую строчку перед исполнением
строчка есть, исполнения нет, после строчки тишина
Исполнения чего нет, процедуры?
Запрос к сиквелу есть, сиквел возвращает статус исполнено, но на самом деле процедуру не исполняет?
Нет, этого не происходит, это фантастика. Независимо от версий и наличия сервис-паков.
У вас либо гасятся ошибки, либо процедура содержит ошибки в логике, и не делает того, что вам нужно, а вы это интерпретируете как "невыполнение процедуры".
Extremist
бонусом радомность ошибки, сейчас профайлером записываю всё, но пока тишина
Так откуда вывод, что процедура не исполнилась, если вы этого не видели в профайлере? По результатам, которые должны быть после выполнения? Хе.
10 дек 17, 14:02    [21021733]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE 12 секунд  [new]
Шыфл
Member

Откуда: Прага
Сообщений: 774
alexeyvg,

Бывает такое. Бежит-бежит процедура, и тут, посреди батча раз, и закончилась, в совершенно неожиданном месте. Или даже ожидаемом, но преждевременно.
У меня это было по ADO, когда set nocount off. Тогда клиент может принять за возвращаемый рекордсет результаты любого батча, если после него идёт долгая пауза (например следующий тяжёлый батч)... Репро устроить достаточно легко, например в Эксцеле или Ассесе
11 дек 17, 11:31    [21023484]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE 12 секунд  [new]
Extremist
Member

Откуда: Толком не помню, но помоему отуда же..
Сообщений: 509
alexeyvg
процедура не исполнилась, если вы этого не видели в профайлере? По результатам, которые должны быть после выполнения? Хе.


Ну, может таблицы, которые должны были измениться не изменились? Нет изменения- нет результата
13 дек 17, 16:36    [21031259]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE 12 секунд  [new]
Extremist
Member

Откуда: Толком не помню, но помоему отуда же..
Сообщений: 509
Шыфл
alexeyvg,

Бывает такое. Бежит-бежит процедура, и тут, посреди батча раз, и закончилась, в совершенно неожиданном месте. Или даже ожидаемом, но преждевременно.
У меня это было по ADO, когда set nocount off. Тогда клиент может принять за возвращаемый рекордсет результаты любого батча, если после него идёт долгая пауза (например следующий тяжёлый батч)... Репро устроить достаточно легко, например в Эксцеле или Ассесе


Как отремонтировать идеи есть?

проапдейтил базу до SP4 11.00.7001- безтолку
13 дек 17, 16:37    [21031266]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE 12 секунд  [new]
Гигабайт Мегабайтович Килобайтов
Member [заблокирован]

Откуда:
Сообщений: 5975
Extremist
alexeyvg
процедура не исполнилась, если вы этого не видели в профайлере? По результатам, которые должны быть после выполнения? Хе.


Ну, может таблицы, которые должны были измениться не изменились? Нет изменения- нет результата

но это не означает что есть ошибка.
13 дек 17, 16:43    [21031287]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE 12 секунд  [new]
Extremist
Member

Откуда: Толком не помню, но помоему отуда же..
Сообщений: 509
Гигабайт Мегабайтович Килобайтов,

Хмм, а что же это?
некоректно завершённая процедура?
13 дек 17, 16:45    [21031302]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE 12 секунд  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Extremist,

что за хрень вообще обсуждается? В sql ситуация не воспроизводится? Смотрите что делает клиент, в терории кака пишут, если выполнение ожидает датасет и после сразу закрывает соединение, то по set nocount off вполне получить откат
13 дек 17, 16:56    [21031349]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE 12 секунд  [new]
Extremist
Member

Откуда: Толком не помню, но помоему отуда же..
Сообщений: 509
TaPaK
что за хрень вообще обсуждается? В sql ситуация не воспроизводится? Смотрите что делает клиент, в терории кака пишут, если выполнение ожидает датасет и после сразу закрывает соединение, то по set nocount off вполне получить откат


после

UPDATE account SET transaction_id = @transaction_id, amount_open = @amount_open WHERE user_id = @user_id

Вообще ничего не происходит!

А так да- всё отлично
13 дек 17, 17:00    [21031368]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE 12 секунд  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Extremist,

а что должно происходить? феерверк?
13 дек 17, 17:08    [21031403]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE 12 секунд  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Так может стоит сделать индекс и тогда не будет при обновлении записи все вычитываться:

CREATE INDEX ix ON dbo.account (user_id)

UPDATE /*TOP(1)*/ dbo.account
SET transaction_id = @transaction_id
  , amount_open = @amount_open
WHERE user_id = @user_id 

как вариант.... и если поле user_id уникальное, то почему не подсказать оптимизатору об этом. Либо свойством UNIQUE в индексе либо в самом UPDATE. Дважды перечитал так и не понял проблемы Вашей.
13 дек 17, 17:15    [21031441]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE 12 секунд  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
- если убрать update дальше выполняется?
- попробуйте воставить любую перекомпиляция стейтмента (OPTION (RECOMPILE)) на update для интересу
- есть баг на прибитый индекс в plan guide, хотя может и пофиксен давно
13 дек 17, 17:23    [21031490]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE 12 секунд  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
если расчехлять шар ещё дальше: DBCC CHECKDB без проблем?
13 дек 17, 17:27    [21031519]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE 12 секунд  [new]
Extremist
Member

Откуда: Толком не помню, но помоему отуда же..
Сообщений: 509
AlanDenton,

Извиняюсь, мой косяк
UPDATE account SET transaction_id = @transaction_id, amount_open = @amount_open, amount_freez=@amount_freez WHERE id = @some_id 

вот потный запрос
13 дек 17, 18:25    [21031733]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE 12 секунд  [new]
Extremist
Member

Откуда: Толком не помню, но помоему отуда же..
Сообщений: 509
TaPaK
- если убрать update дальше выполняется?
- попробуйте воставить любую перекомпиляция стейтмента (OPTION (RECOMPILE)) на update для интересу
- есть баг на прибитый индекс в plan guide, хотя может и пофиксен давно


Во первых даже не убирая проходит в 95% случаем
косячит на 5%, конечно если убрать то и косяка не будет. Селеты инсерты работают на ура, лагает именно на апдейте и то не всегда.
Перекопал все запросы, что бы SELECT WITH (NOLOCK) везде, пока хватает глаз везде не точил.
Грешу на глубокую вложенность запроса, но запрос то конечный и должен фиксировать конечные данные , выше не поставишь никак.
Таблица то не более 30 000 записей
Логи чистые, подняли версию базы- не помогло.
Но что самое паршивое, рядом стоит такая же база, чуток меньше загруженная и всё ок.

Запустил профайлер- пока тишина.
13 дек 17, 18:36    [21031751]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить