Независимый форум, посвященный системе БОСС-Кадровик и всему, что с ней связано
|
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
rebel25 Большой шоколадный орден

Зарегистрирован: 06.10.2008 Сообщения: 580 Откуда: Москва
|
Добавлено: Чт Фев 25, 2016 15:51 Заголовок сообщения: Формирование ведомостей в банк - зависание |
|
|
C недавнего времени, при формировании ведомостей в банк, босс навсегда зависает - висят песочные часы и в строке выполнения светится INSERT INTO GL_DOCS....
Закрываю принудительно босс, открываю и формирую ту же ведомость, она формируется быстро. Это повторяется время от времени.
Проверил вроде не тиражных объектов нет, в GL_DOCS примерно 5000 строк.
Не подскажите как выявить и устранить причину зависания формирования ведомостей в банк? |
|
Вернуться к началу |
|
 |
RVV Большой шоколадный орден

Зарегистрирован: 14.01.2010 Сообщения: 450
|
Добавлено: Чт Фев 25, 2016 16:08 Заголовок сообщения: |
|
|
Нужно создать индексы.
CREATE NONCLUSTERED INDEX [IDX_Gl_Docs__id_acc_group] ON [dbo].[Gl_Docs]
(
[id_acc_group] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
GO
CREATE NONCLUSTERED INDEX [IDX_Gl_Docs_1] ON [dbo].[Gl_Docs]
(
[id_hr_status] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
GO
CREATE NONCLUSTERED INDEX [IDX_Gl_Docs_2] ON [dbo].[Gl_Docs]
(
[idDocType] ASC,
[idFirm] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
GO
CREATE NONCLUSTERED INDEX [IDX_Gl_Docs_3] ON [dbo].[Gl_Docs]
(
[role_code] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
GO |
|
Вернуться к началу |
|
 |
Mikhail
Зарегистрирован: 16.08.2012 Сообщения: 177 Откуда: Москва
|
Добавлено: Чт Фев 25, 2016 18:12 Заголовок сообщения: |
|
|
Аналогичная проблема.
Зависает выполнение инструкции:
Код: |
INSERT INTO GL_DOCS ( comment , docnum, DocDate, role_code, idfirm, idDocType, MDATE, UNAME, id_RPVED, DocSwitch, Boss_Auto_Card, Boss_ChB_Auto_Card, Boss_name_app, Boss_ChB_name_app, Mask, pp_number, pp_date, id_acc_group ) VALUES ( 'за февраль 2016 г. ', '150', '2016-02-25', 'ROLE_NAME', 1, 2008, getdate(), 'Domain\User', 0, 0, 91299, 71409, 145, 546, '', '', '1900-01-01', 0 )
|
Через профайлер подсмотрел, что зависает после выполнения инструкций внутри триггера tI_Gl_Docs_id_acc_group_adtb_acc_group:
Код: |
SP:StmtStarting If @validcnt + @zerocnt != @numrows
SP:StmtCompleted If @validcnt + @zerocnt != @numrows
SP:StmtStarting Return
SP:StmtCompleted Return
|
|
|
Вернуться к началу |
|
 |
DUCKKK Большой шоколадный орден

Зарегистрирован: 16.09.2009 Сообщения: 1691
|
Добавлено: Чт Фев 25, 2016 18:14 Заголовок сообщения: |
|
|
Индексы помогли? |
|
Вернуться к началу |
|
 |
Mikhail
Зарегистрирован: 16.08.2012 Сообщения: 177 Откуда: Москва
|
Добавлено: Чт Фев 25, 2016 18:17 Заголовок сообщения: |
|
|
Дополнение: вышеуказанные индексы созданы, трассировку получил после их создания. |
|
Вернуться к началу |
|
 |
DUCKKK Большой шоколадный орден

Зарегистрирован: 16.09.2009 Сообщения: 1691
|
Добавлено: Чт Фев 25, 2016 18:27 Заголовок сообщения: |
|
|
А протоколирование на эти таблицы не настроено? |
|
Вернуться к началу |
|
 |
Mikhail
Зарегистрирован: 16.08.2012 Сообщения: 177 Откуда: Москва
|
Добавлено: Чт Фев 25, 2016 18:52 Заголовок сообщения: |
|
|
DUCKKK, проверил - в протоколировании данная таблица не участвует. |
|
Вернуться к началу |
|
 |
DUCKKK Большой шоколадный орден

Зарегистрирован: 16.09.2009 Сообщения: 1691
|
Добавлено: Чт Фев 25, 2016 18:55 Заголовок сообщения: |
|
|
Под sysadmin тоже виснет? А для роли, под которой заходим, VIEW есть? |
|
Вернуться к началу |
|
 |
Mikhail
Зарегистрирован: 16.08.2012 Сообщения: 177 Откуда: Москва
|
Добавлено: Чт Фев 25, 2016 19:50 Заголовок сообщения: |
|
|
Пробовал формировать ведомости пару раз под sa - проблем не возникало, но не берусь утверждать, что отсутствие зависаний является следствием именно этой причины.
Для пользовательской роли view не созданы. Да, есть интересный момент, что зависание под пользовательской ролью происходит не каждый раз. Соотношение между успешными попытками сформировать ведомость и неудачными примерно 1:2.
В момент неудачной попытки сформировать пользователем ведомость остальные пользователи с ведомостями не работают. |
|
Вернуться к началу |
|
 |
DUCKKK Большой шоколадный орден

Зарегистрирован: 16.09.2009 Сообщения: 1691
|
Добавлено: Пт Фев 26, 2016 00:23 Заголовок сообщения: |
|
|
Ну вот что здесь сказать ... Возможно, и сервер как-то глючит, строит такие планы запросов .... |
|
Вернуться к началу |
|
 |
Volod Большой шоколадный орден

Зарегистрирован: 11.02.2015 Сообщения: 252
|
Добавлено: Пт Фев 26, 2016 09:17 Заголовок сообщения: |
|
|
А какая у Вас версия sql ? |
|
Вернуться к началу |
|
 |
Spartak
Зарегистрирован: 18.03.2010 Сообщения: 185
|
Добавлено: Пт Фев 26, 2016 10:29 Заголовок сообщения: |
|
|
мне помогло убрать вставку в поле id_acc_group из инструкции
INSERT INTO GL_DOCS (...).
А чтобы записывать чего-то в id_acc_group добавил отдельной строкой
update gl_docs set id_acc_group=@sel:id_acc_group where id=identity_; |
|
Вернуться к началу |
|
 |
Mikhail
Зарегистрирован: 16.08.2012 Сообщения: 177 Откуда: Москва
|
Добавлено: Пт Фев 26, 2016 12:09 Заголовок сообщения: |
|
|
Версия SQL:
Microsoft SQL Server 2012 - 11.0.5058.0 (X64)
May 14 2014 18:34:29
Copyright (c) Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 6.3 <X64> (Build 9600: )
Spartak, ваше решение вполне логично, поскольку упомянутый выше триггер tI_Gl_Docs_id_acc_group_adtb_acc_group настроен на срабатывание при условии if update(id_acc_group).
К слову, я вчера вовсе отключил на время этот триггер, после чего пользователь пару-тройку раз успешно сфомирмировал ведомости, но этого количества недостаточно для вынесения заключения, надо бы еще провести несколько попыток со сбором трассировки. |
|
Вернуться к началу |
|
 |
rebel25 Большой шоколадный орден

Зарегистрирован: 06.10.2008 Сообщения: 580 Откуда: Москва
|
Добавлено: Вт Сен 06, 2016 15:59 Заголовок сообщения: |
|
|
мне помогло убрать вставку в поле id_acc_group из инструкции при отключенных тригерах. Не знаю как это работает, но помогло, вероятно индекс виноват, больше нечему. |
|
Вернуться к началу |
|
 |
DUCKKK Большой шоколадный орден

Зарегистрирован: 16.09.2009 Сообщения: 1691
|
Добавлено: Вт Сен 06, 2016 16:17 Заголовок сообщения: |
|
|
Можем только предположить, что произошли какие-то изменения в системных библиотеках операционной системы, которые "приехали" с каким-то из последних обновлений от Microsoft.
В частности - в системных функциях преобразования типов данных.
В качестве решение "методом тыка" пришли вот к чему.
Зависание происходит на самом деле не на операциях INSERT, а на следующей строке, которая, как правило, выглядит вот так:
SELECT @@identity INTO identity_;
Если ее переписать вот так:
Let identity_ = @@identity as integer
или
SELECT convert(integer, @@identity) INTO identity_;
зависания исчезают.
Поскольку понятно, что переменная @@identity в нашем случае и так имеет тип INTEGER, то преобразование ее к целому типу – это получается «масло масляное». Но это, судя по всему, работает ...
Сможете проверить это решение, например, при подготовке ведомостей в банк и сообщить нам, решается ли эта проблема у вас ? |
|
Вернуться к началу |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|