|
v7: SQL тормозит на запросах к регистрам. | ☑ | ||
---|---|---|---|---|
0
mvk
09.03.16
✎
11:36
|
Добрый день.
1С 7.7.27 + SQL2008 Enterprise + 1С++. Самописная конфа. При перепроведении документов за несколько месяцев через "Операции"-"Проведение документов..." (движок и каталог с md локально на SQL) тормоза нарастают с 4-5 часов/месяц до 8-10 часов/месяц. Помогает прерывание проведения и переиндексация таблиц итогов регистров (RG...) средствами SQL. Оперативной памяти достаточно (более 100 гиг под SQL при базе в 48 гиг). Модель восстановления простая, уровень совместимости SQL2000, автообновление статистики отключено. Похоже, что переполняется какой-то буфер в SQL. Подскажите, плиз, как отловить? |
|||
1
Cyberhawk
09.03.16
✎
11:37
|
Может в сторону ТА?
|
|||
2
mvk
09.03.16
✎
11:38
|
Если я правильно понимаю, то при переиндексации чистится то, что переполнено. Потому и помогает. Что это может быть?
|
|||
3
mvk
09.03.16
✎
11:39
|
Переповедение этим способом подразумевает, что все проводится на ТА.
|
|||
4
mvk
09.03.16
✎
11:41
|
Может подскажете, какие счетчики поставить анализироваться в средствах наблюдения?
|
|||
5
Z1
09.03.16
✎
11:44
|
(0) Похоже статистика не обновляется.
уровень совместимости надо ставить 110 а то не факт что если движок 2008 а база 80 то вполне возможно что известная ошибка которая под sql2000, в твоей базе точно также проявляется. |
|||
6
Ёпрст
09.03.16
✎
11:46
|
>>>уровень совместимости SQL2000,
вот это исправь, сперва |
|||
7
mvk
09.03.16
✎
11:58
|
Статистика обновляется по расписанию. Уровень повышу, но сдается мне - не то. Почему переиндексация помогает?
|
|||
8
Ёпрст
09.03.16
✎
12:09
|
как дружил с 2008 ?
|
|||
9
mvk
09.03.16
✎
12:32
|
Секретный релиз http://catalog.mista.ru/public/82018/
|
|||
10
Ёпрст
09.03.16
✎
12:54
|
ну , тогда (6), для начала и в 2008 нет проблемы , как в 2000 , там не надо делать рекконект найтив
|
|||
11
Ёпрст
09.03.16
✎
12:55
|
и, надеюсь, все dll -ки родные, от 2008 скуля ? Всякие одбс от старого не переписывал, поверх ?
|
|||
12
mvk
09.03.16
✎
12:58
|
Родные, конечно. В 2008 нет проблемы реконнекта в любом уровне совместимости базы.
|
|||
13
Ёпрст
09.03.16
✎
13:01
|
ну ладно, авторасширение, какое установлено ?
тепмпдб, где валяется ? |
|||
14
Ёпрст
09.03.16
✎
13:02
|
с 4-5 часов/месяц.. это конечна жесть, у нас база за ночь за год перепроводилась, порядка полмульта доков
|
|||
15
Ёпрст
09.03.16
✎
13:03
|
мот тупо есть кучка незакрытых регистров ? Туда посмотреть в начале ? Или доки с 1980 года, от которых итоги каждый раз из периода в период едут ?
|
|||
16
Ёпрст
09.03.16
✎
13:04
|
Или.. проверить сперва пустые даты в _1sjourn/_1soper/_1scentry ..это те, которые 1573 годом
|
|||
17
Ёпрст
09.03.16
✎
13:06
|
И это, нет ли строковых измерений, с типом строка хрензнает какая длина ? ...
|
|||
18
mvk
09.03.16
✎
13:07
|
темп на отдельном ссд, авторасширение 200 метров база и 100 метров лог. База с 2002 года. Основная нагрузка на последние годы, само собой. Примерно 6000-7000 доков в день. Проблема в том, что ОДИН И ТОТ ЖЕ ПЕРИОД в одном случае проводится 4 часа, в другом - 8. База только на регистрах. Пустых дат нет.
|
|||
19
mvk
09.03.16
✎
13:07
|
Так что плевать пока на структуру регистров и т.п. Дело чисто в SQL.
|
|||
20
mvk
09.03.16
✎
13:08
|
Замер отладчика показывает резкое торможение на запросах к регистрам (виртуальные таблицы 1С++)
|
|||
21
mvk
09.03.16
✎
13:09
|
Допустим, в одном случае 1000 запросов выполняется за 80 секунд, а в другом этот же период 1000 запросов за 1000 секунд.
|
|||
22
mvk
09.03.16
✎
13:10
|
При этом сервер и база использовались монопольно. Напомню, что помогала переиндексация RG...
|
|||
23
Ёпрст
09.03.16
✎
13:14
|
А если обновить статистику, без пересчета итогов, помогает хоть ?
|
|||
24
ADirks
09.03.16
✎
13:15
|
я бы ещё попробовал периодически сбрасывать кэш планов
DBCC FREEPROCCACHE в монопольном режиме гемор конечно... |
|||
25
mvk
09.03.16
✎
13:19
|
(23) Нет, статистика не помогает.
(24) Пробовал, не то, хотя примерно нечто такое я и ищу. Какими бы счетчиками производительности обвешаться? |
|||
26
trad
09.03.16
✎
13:21
|
(16) 1753
|
|||
27
trad
09.03.16
✎
13:23
|
установить
max degree of parallelism = 1 |
|||
28
mvk
09.03.16
✎
13:26
|
(26) Все равно нету )))
(27) Ну не то это. Переполняется какая-то дрянь. |
|||
29
ADirks
09.03.16
✎
13:29
|
ну самое стандартное:
SELECT TOP 10 [Wait type] = wait_type, [Wait time (s)] = wait_time_ms / 1000, [% waiting] = CONVERT(DECIMAL(12,2), wait_time_ms * 100.0 / SUM(wait_time_ms) OVER()) FROM sys.dm_os_wait_stats WHERE wait_type NOT LIKE '%SLEEP%' and wait_type not like '%backup%' and wait_type Not IN ('REQUEST_FOR_DEADLOCK_SEARCH', 'XE_TIMER_EVENT', 'FT_IFTS_SCHEDULER_IDLE_WAIT', 'XE_DISPATCHER_WAIT', 'LOGMGR_QUEUE', 'CHECKPOINT_QUEUE', 'BROKER_TO_FLUSH' ) ORDER BY wait_time_ms DESC может с ходу чего-нить показать... а может и нет :) ещё вот такая полезная штука есть: http://simplesqlserver.com/2013/08/13/sys-dm_os_perfomance_counters-demystified/ |
|||
30
mvk
09.03.16
✎
13:37
|
Хм. А vk_Hook1C.dll не дружит с уровнем базы 110. Ладно, обойдусь без нее.
|
|||
31
ADirks
09.03.16
✎
13:38
|
и ещё, статейка: https://blogs.msdn.microsoft.com/blogdoezequiel/2014/04/09/sql-swiss-army-knife-14-troubleshooting-with-waits-and-latches/
там в самом начале ссылочка на скрипт view_Waits.sql |
|||
32
mvk
09.03.16
✎
13:39
|
ASYNC_IO_COMPLETION 71419 30.80
LCK_M_S 36595 15.78 LCK_M_U 32060 13.83 ASYNC_NETWORK_IO 31477 13.58 WRITELOG 26175 11.29 PAGEIOLATCH_SH 9094 3.92 LCK_M_X 7416 3.20 PAGEIOLATCH_EX 3269 1.41 LCK_M_IX 2888 1.25 PAGELATCH_EX 2708 1.17 |
|||
33
Ёпрст
09.03.16
✎
13:39
|
(30) это вообще надо в первую очередь выкинуть.. зачем вы вообще её используете ? не понимаю.
|
|||
34
mvk
09.03.16
✎
13:39
|
(33) )) Уже выкинул
|
|||
35
trad
09.03.16
✎
14:06
|
"Замер отладчика показывает резкое торможение на запросах к регистрам (виртуальные таблицы 1С++)"
Есть возможность получить план запроса для резко заторможенных запросов? Думаю, все же, не стоит отметать вероятность неудачного выбора плана запроса и зацикливаться на поиске кешей/буферов |
|||
36
mvk
09.03.16
✎
14:18
|
Зарядил копию проводиться. К вечеру начнет тормозить, тогда увижу. Я бы понял неудачный выбор, если бы статистика обновлялась. А так... Но данные соберу. И счетчики включу. Когда начнет тормозить.
|
|||
37
ЧеловекДуши
09.03.16
✎
14:23
|
(36) Помнится, 1С 7.7 всегда славилась тормозами при проведении очень большого пакета документов зв один "чих" :)
|
|||
38
Злопчинский
09.03.16
✎
14:26
|
(37) ну, если все впихнуть в одну транзакцию...
|
|||
39
trad
09.03.16
✎
14:32
|
(37) это замедление было только на sql2000 и при определенных условиях
|
|||
40
Злопчинский
09.03.16
✎
14:36
|
(39) ну не знаю... длительное восстановление ГП всегда было проще прервать и запустить заново с продолжением. Получалось быстрее. Видимо восстановление ГП всегда попадало под "определенные условия"
|
|||
41
mvk
09.03.16
✎
14:41
|
Historical_Latches BUFFER 16886.92 113833183 99.98 99.98 0.0001 [Buffer Pool - PAGELATCH or PAGEIOLATCH]
Historical_Latches ALLOC_IAM_PAGE_RANGE_CACHE 1.05 6 0.01 0.01 0.1742 Other Historical_Latches FGCB_ADD_REMOVE 0.84 29 0.00 0.01 0.0291 [IO Operations] Historical_Latches LOG_MANAGER 0.73 8 0.00 0.02 0.0916 [IO - Log] Historical_Latches ACCESS_METHODS_HOBT_COUNT 0.32 4792 0.00 0.01 0.0001 [HoBT - Metadata] Historical_Latches BUFFER_POOL_GROW 0.08 178 0.00 0.00 0.0004 Other Historical_Latches ACCESS_METHODS_HOBT_VIRTUAL_ROOT 0.03 147 0.00 0.00 0.0002 [HoBT - Metadata] Historical_Latches QUERY_OPTIMIZER_ID_MANAGER 0.03 1448 0.00 0.00 0.0000 Other |
|||
42
mvk
09.03.16
✎
14:42
|
Information latch_class wait_time_s waiting_requests_count pct overall_running_pct avg_wait_s latch_category
|
|||
43
mvk
09.03.16
✎
14:43
|
Что-то первая строчка меня беспокоит. Это запрос отсюда:
https://blogs.msdn.microsoft.com/blogdoezequiel/2014/04/09/sql-swiss-army-knife-14-troubleshooting-with-waits-and-latches/ |
|||
44
trad
09.03.16
✎
14:44
|
(40) восстановление ГП с применением типовых методов проведения - да, попадало
|
|||
45
trad
09.03.16
✎
14:46
|
(44) + но это в данной ветке, пока - оффтопик
|
|||
46
mvk
09.03.16
✎
14:46
|
Попадало, потому что регистры приходится очищать и пересчитывать, которые еще впереди. Я реистры чищу перед перепроведением. Получается в разы быстрее.
|
|||
47
trad
09.03.16
✎
14:49
|
(46) Замедление проведения на 2000 связано с применением множественных фильтров, например при расчете остатков.
Если избавиться от множественных фильтров, то замедления не будет и реконектнейтив не понадобится |
|||
48
toypaul
гуру
09.03.16
✎
14:54
|
не знаю для 2008 актуально это или нет, на 2000 скл была системная проблема с замедлением из-за частого создания временных таблиц.
у меня в оптимизации для ТиС была для этого предусмотрена глобальная временная таблица |
|||
49
mvk
09.03.16
✎
14:59
|
Если кому интересно, я перепровожу большие базы на копии, а потом внедряю регистры в оригинал. Разумеется с запретом редактирования документов. Накидал свое и не свое:
https://dropmefiles.com/1wS2y 1. Запрет редактирования документов ранее, скажем, 01.03.16 2. Бэкап. 3. Восставить из бэкапа в копию. (и MD и т.п. тоже) 4. Убить регистры в копии скриптом. 5. Перепровести копию до 01.03.16. 6. Бэкап. 7. Внедрить в оригинал регистры перепроведенной копии скриптом. 8. Перепровести остаток оригинала. 9. Открыть доступ к докам. |
|||
50
mvk
09.03.16
✎
15:04
|
Таким образом даже очень тяжелые базы уйдут в монопольный доступ только на время внедрения регистров и проведения хвостика.
СКРИПТЫ ПИСАЛИСЬ ТОЛЬКО ПОД РЕГИСТРЫ. ПРОВОДКИ НЕ ПЕРЕНОСЯТСЯ!!! |
|||
51
ADirks
09.03.16
✎
15:06
|
Кстати, после всяких бэкапов/ресторов, и прочих регламентов типа перестроения индексов и статистик, надо счетчики сбрасывать, а то фигня будет, а не статистика.
DBCC SQLPERF('sys.dm_os_wait_stats', CLEAR) DBCC SQLPERF(''sys.dm_os_latch_stats'', CLEAR) |
|||
52
mvk
09.03.16
✎
15:07
|
(51) Попробую, спс.
|
|||
53
mvk
22.03.16
✎
12:46
|
Похоже, что дело было в статистике индексов, которая, в силу проведения кучи документов из одного периода, настраивалась на текущий месяц. И когда начинали проводиться документы следующего месяца, система тормозила. Вылечил созданием служебного документа, который поместил в начало каждого месяца. В модуле документа перестраиваю индексы таблиц итогов регистров с целью сброса статистики и реорганизации (дефрагментации) индексов и сбрасываю кэш:
Процедура ОбработкаПроведения() Запрос = СоздатьОбъект("ODBCRecordSet"); ТекстЗапроса = " |SET NOCOUNT ON | |DECLARE @SQL NVARCHAR(900) |DECLARE @TableName char(32) |DECLARE SysCur CURSOR FOR SELECT name FROM sysobjects WHERE type='U' and name like 'RG%' order by name |OPEN SysCur |FETCH NEXT FROM SysCur INTO @TableName |WHILE @@FETCH_STATUS=0 BEGIN | SET @SQL = N'ALTER INDEX ALL ON dbo.' + @TableName + N' REBUILD WITH (SORT_IN_TEMPDB = ON, ONLINE = ON)' | EXECUTE sp_executesql @SQL | FETCH NEXT FROM SysCur INTO @TableName |END |CLOSE SysCur |DEALLOCATE SysCur | |DBCC FREEPROCCACHE |"; Попытка Запрос.ВыполнитьСкалярный(ТекстЗапроса); Исключение КонецПопытки; КонецПроцедуры Такое перестроение возможно, только если SQL Enterprise. Имеется ввиду хинт "ONLINE = ON". На рабочей базе с кучкой активных пользователей документ провелся за 12 минут. Проведение копии за последние 9 месяцев не тормозило. Стабильные 3-4 часа/месяц. |
|||
54
mvk
22.03.16
✎
12:49
|
Выполнение только (51) не помогло.
|
|||
55
Ёпрст
22.03.16
✎
12:52
|
(53) как то не кошерный код, а если баз много ? И они еще и разные ?
|
|||
56
mvk
22.03.16
✎
12:53
|
Я под себя писал. Идею донес, а там допиливайте под себя ))
А что не кошерного? Что смущает? |
|||
57
Ёпрст
22.03.16
✎
12:55
|
(56) вот это
SELECT name FROM sysobjects WHERE type='U' and name like 'RG%' |
|||
58
mvk
22.03.16
✎
12:57
|
Это модуль проведения документа, который находится в началах периодов. Нужен для перепроводки конкретной базы. Так что "баз много" - надо в каждую вставить. На счет разных баз, можно дописать под бухгалтерию, добавив обработку таблицы _1scttlc, кажется.
|
|||
59
mvk
22.03.16
✎
12:58
|
(57) а как лучше?
|
|||
60
Ёпрст
22.03.16
✎
13:00
|
(59) как минимум, добавить в запрос условие на конкретную базу.
Если несколько баз на серваке, (и не только от 7.7) он же тебе все их будет колбасить |
|||
61
mvk
22.03.16
✎
13:03
|
Не будет. Он же в контексте конкретной базы выполняется.
|
|||
62
mvk
22.03.16
✎
13:04
|
И у меня, кстати, несколько баз. Копия для программирования, как минимум. ))
|
|||
63
Ёпрст
22.03.16
✎
13:04
|
(61) ?
|
|||
64
Mikeware
22.03.16
✎
13:04
|
(61) а причем тут контекст? ты ж явно лезешь к сисобджектс...
|
|||
65
mvk
22.03.16
✎
13:06
|
Выполни
select COUNT(*) from sysobjects в Management Studio для разных баз. |
|||
66
mvk
22.03.16
✎
13:08
|
Если это представление содержит сведения обо ВСЕХ базах, то результат будет одинаковый. А если только о текущей базе - то разный. У меня разный результат получился.
|
|||
67
Ёпрст
22.03.16
✎
13:13
|
(66)ну, может быть, лень смотреть даже :)
|
|||
68
mvk
22.03.16
✎
13:17
|
:)
В обозревателе объектов: "Базы данных"-"Моя база"-"Представления"-"Системные представления"-... Там все эти служебные вьюшки лежат. Для каждой базы свои. |
|||
69
mvk
22.03.16
✎
13:23
|
Кстати, Мишаня! Поздравляю с присоединением к лиге трехкратных отцов! ))) Сам уже 3,5 года как такой )))
|
|||
70
Mikeware
22.03.16
✎
13:31
|
это ты кому?
|
|||
71
mvk
22.03.16
✎
13:52
|
Тебе! ))) Тут Мишани только ты да я )))
|
|||
72
Mikeware
22.03.16
✎
13:55
|
(71) ну, по крайней мере мне об этом ничего не известно.
Я понимаю, что "ни один мужчина не может быть уверен в количестве своих детей"©, но вряд ли за последние несколько лет что-то существенно измениллось... |
|||
73
mvk
22.03.16
✎
13:57
|
тогда извиняй ))) Мне на днях ветка попадалась, видимо обознался )
|
|||
74
mvk
22.03.16
✎
13:57
|
Точно! Это Кулешов Мишка был!
|
|||
75
Mikeware
22.03.16
✎
14:00
|
:-)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |