Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / UPDATE 12 секунд / 25 сообщений из 32, страница 1 из 2
09.12.2017, 20:01:58
    #39567097
Extremist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE 12 секунд
Добрый вечер
столкнулся с неприятной ситуацией, когда в каскаде процедур нужно обновить одну маленькую, но очень важную таблицу.
Таблица простая...
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
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 записей.

Поделитесь идеями что можно сделать?
...
Рейтинг: 0 / 0
09.12.2017, 20:14:06
    #39567101
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE 12 секунд
Extremistно процедура утыкается в это обновление и валитьсяИ конечно же, как обычно, молча.
ExtremistПонимаю что что то лочит таблицу, но врага таинственного не могу найти.Откуда пришло понимание, если валится молча?
ExtremistПоделитесь идеями что можно сделать?Для начала перестать партизанить и показать сообщение об ошибке.
...
Рейтинг: 0 / 0
09.12.2017, 20:21:13
    #39567103
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE 12 секунд
ExtremistПонимаю что что то лочит таблицу, но врага таинственного не могу найти.Любое действие вызывает блокировки, их тысячи в секунду.
ExtremistПоделитесь идеями что можно сделать?Ну, нужно что нибудь поменять. От вас пока никакой конкретики, что ещё можно посоветовать? Может, у вас таймаут на выполнение 1 секунда? Может, процедура нарушает констрейн? Пока ничего непонятно, даже какая ошибка.
...
Рейтинг: 0 / 0
09.12.2017, 20:33:04
    #39567107
Extremist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE 12 секунд
invm,

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

Ощущение. что процедура попросту не дожидается ответа, притом никаких ошибок вообще. типа ничего не было.
...
Рейтинг: 0 / 0
09.12.2017, 20:37:03
    #39567108
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE 12 секунд
Extremistа никаких ошибок нет. Наставил кучу логов по ходу процедуры, точнее процедур и просто обрыв.Сервер делает вид, что процедура выполняется, но она не выполняется? Чудеса.
Откуда тогда идея про локи? Отваливание по таймауту, или отваливание по дедлокам - совершенно конкретные ошибки, с кодом и текстом.
...
Рейтинг: 0 / 0
09.12.2017, 20:39:52
    #39567111
Extremist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE 12 секунд
alexeyvg,

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


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

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

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

на которой всё красиво 12
Microsoft SQL Server 2014 - 12.0.2000.8 (X64)
...
Рейтинг: 0 / 0
09.12.2017, 20:42:20
    #39567112
Extremist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE 12 секунд
alexeyvg,

создал отдельную таблицу, пишу туда каждую строчку перед исполнением
строчка есть, исполнения нет, после строчки тишина
...
Рейтинг: 0 / 0
09.12.2017, 21:16:03
    #39567116
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE 12 секунд
Extremist,

в профайлере не видно, что происходит?
...
Рейтинг: 0 / 0
09.12.2017, 21:28:23
    #39567117
Extremist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE 12 секунд
iap,
база активно используется, бонусом радомность ошибки, сейчас профайлером записываю всё, но пока тишина
...
Рейтинг: 0 / 0
10.12.2017, 00:25:11
    #39567155
Andy_OLAP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE 12 секунд
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.
...
Рейтинг: 0 / 0
10.12.2017, 11:55:21
    #39567219
Extremist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE 12 секунд
Andy_OLAP,

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

Большое вам спасибо.
...
Рейтинг: 0 / 0
10.12.2017, 14:02:59
    #39567262
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE 12 секунд
Extremistalexeyvg,

создал отдельную таблицу, пишу туда каждую строчку перед исполнением
строчка есть, исполнения нет, после строчки тишинаИсполнения чего нет, процедуры?
Запрос к сиквелу есть, сиквел возвращает статус исполнено, но на самом деле процедуру не исполняет?
Нет, этого не происходит, это фантастика. Независимо от версий и наличия сервис-паков.
У вас либо гасятся ошибки, либо процедура содержит ошибки в логике, и не делает того, что вам нужно, а вы это интерпретируете как "невыполнение процедуры".
Extremistбонусом радомность ошибки, сейчас профайлером записываю всё, но пока тишинаТак откуда вывод, что процедура не исполнилась, если вы этого не видели в профайлере? По результатам, которые должны быть после выполнения? Хе.
...
Рейтинг: 0 / 0
11.12.2017, 11:31:09
    #39567567
Шыфл
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE 12 секунд
alexeyvg,

Бывает такое. Бежит-бежит процедура, и тут, посреди батча раз, и закончилась, в совершенно неожиданном месте. Или даже ожидаемом, но преждевременно.
У меня это было по ADO, когда set nocount off. Тогда клиент может принять за возвращаемый рекордсет результаты любого батча, если после него идёт долгая пауза (например следующий тяжёлый батч)... Репро устроить достаточно легко, например в Эксцеле или Ассесе
...
Рейтинг: 0 / 0
13.12.2017, 16:36:03
    #39569139
Extremist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE 12 секунд
alexeyvgпроцедура не исполнилась, если вы этого не видели в профайлере? По результатам, которые должны быть после выполнения? Хе.

Ну, может таблицы, которые должны были измениться не изменились? Нет изменения- нет результата
...
Рейтинг: 0 / 0
13.12.2017, 16:37:39
    #39569142
Extremist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE 12 секунд
Шыфлalexeyvg,

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

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

проапдейтил базу до SP4 11.00.7001- безтолку
...
Рейтинг: 0 / 0
13.12.2017, 16:43:05
    #39569147
Гигабайт Мегабайтович Килобайтов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE 12 секунд
Extremistalexeyvgпроцедура не исполнилась, если вы этого не видели в профайлере? По результатам, которые должны быть после выполнения? Хе.

Ну, может таблицы, которые должны были измениться не изменились? Нет изменения- нет результата
но это не означает что есть ошибка.
...
Рейтинг: 0 / 0
13.12.2017, 16:45:34
    #39569152
Extremist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE 12 секунд
Гигабайт Мегабайтович Килобайтов,

Хмм, а что же это?
некоректно завершённая процедура?
...
Рейтинг: 0 / 0
13.12.2017, 16:56:19
    #39569163
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE 12 секунд
Extremist,

что за хрень вообще обсуждается? В sql ситуация не воспроизводится? Смотрите что делает клиент, в терории кака пишут, если выполнение ожидает датасет и после сразу закрывает соединение, то по set nocount off вполне получить откат
...
Рейтинг: 0 / 0
13.12.2017, 17:00:50
    #39569166
Extremist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE 12 секунд
TaPaKчто за хрень вообще обсуждается? В sql ситуация не воспроизводится? Смотрите что делает клиент, в терории кака пишут, если выполнение ожидает датасет и после сразу закрывает соединение, то по set nocount off вполне получить откат

после

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

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

А так да- всё отлично
...
Рейтинг: 0 / 0
13.12.2017, 17:08:38
    #39569168
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE 12 секунд
Extremist,

а что должно происходить? феерверк?
...
Рейтинг: 0 / 0
13.12.2017, 17:15:29
    #39569174
AlanDenton
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE 12 секунд
Так может стоит сделать индекс и тогда не будет при обновлении записи все вычитываться:

Код: sql
1.
2.
3.
4.
5.
6.
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. Дважды перечитал так и не понял проблемы Вашей.
...
Рейтинг: 0 / 0
13.12.2017, 17:23:22
    #39569181
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE 12 секунд
- если убрать update дальше выполняется?
- попробуйте воставить любую перекомпиляция стейтмента (OPTION (RECOMPILE)) на update для интересу
- есть баг на прибитый индекс в plan guide, хотя может и пофиксен давно
...
Рейтинг: 0 / 0
13.12.2017, 17:27:33
    #39569187
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE 12 секунд
если расчехлять шар ещё дальше: DBCC CHECKDB без проблем?
...
Рейтинг: 0 / 0
13.12.2017, 18:25:59
    #39569222
Extremist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE 12 секунд
AlanDenton,

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


вот потный запрос
...
Рейтинг: 0 / 0
13.12.2017, 18:36:18
    #39569224
Extremist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE 12 секунд
TaPaK- если убрать update дальше выполняется?
- попробуйте воставить любую перекомпиляция стейтмента (OPTION (RECOMPILE)) на update для интересу
- есть баг на прибитый индекс в plan guide, хотя может и пофиксен давно

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

Запустил профайлер- пока тишина.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / UPDATE 12 секунд / 25 сообщений из 32, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]