Имя: Пароль:
1C
1С v8
Где посмотреть скрипт для SQL, для определения самых "неэффективных " индексов?
0 e053nk
 
23.05.17
15:39
Здраствуйте.
База Альфа авто ред.5, работает под платформой 8.2, на SQl 2012. Ситуация следующая: в одно прекрасное утро (несколько месяцев назад) стали долго заполнятся новые документы при  вводе на основании.Время ожидания может достигать 5-7минут. Обычно в течении максимум пары секунд-документ уже сформирован. Так как В Альфе Кусок ода закрыт от просмотра, диагностировать до конца отладчиком причину не получается. Выходом (что бы не перезагружать сервак SQl или 1с) является только запуск перестроения индекса и обновления статистики средствами SQL (Причем именно последовательно и вместе-в другом варианте не срабатывает). Поисходит обработка всех таблиц базы данных- а это довольно длительный процесс и в момент выполнения -база 1с подтормаживает. Хватает этого на разные отрезки времени от нескольких часов до нескольких суток.  Причем чем дальше-тем короче период возникновения сабжа (примерное наблюдение). Для ускорения работы этогомеханизма хочу отловить таблицу(-ы) которая наиболее нужны в обработке и написать задание в SQL именно обработки этих таблиц-должно быстрее обновляться . Кто знает, каким скриптом SQl можно получить таблицы -котрые наимболе нуждаются в обработке?
1 Вафель
 
23.05.17
15:48
можно сделать запрос по недостающим индексам
2 Вафель
 
23.05.17
15:50
3 ДемонМаксвелла
 
23.05.17
16:17
(0) ты лучше посмотри, какие запросы на SQL сервере выполняются, когда ты проводишь докуменнт
4 Вафель
 
23.05.17
16:24
А неэффективные индексы - это индексы, которые места занимают много, а используются мало раз.
Но они никак не скорость выполнения запросов не влияют. Разве что на запись
5 Вафель
 
23.05.17
16:25
Вернее их называть избыточными, а не неэффетивными
6 e053nk
 
23.05.17
16:25
(3) Проблема не в процессе проведения, а в процессе ввода на основании. Запросы я пытаюсь поймать -пока каша какая та...
7 Вафель
 
23.05.17
16:28
замерь профайлером запросы более 1-2с
8 piter3
 
23.05.17
16:29
(6) Может в коде дело все-таки?А в поддержку не обращались?
9 Ц_У
 
23.05.17
16:41
Можно я тут спрошу быстренько? :)
В окне показателей производительности:
Вызовов 1 время 0.02 отправлено 200 получено 300
Сам вопрос:
отправлено НА сервер или ОТ сервера, получено сервером или клиентом?
Исходя из контекста что это серверные вызовы, то, думаю, что сервер получил 300 и вернул 200.
Или нет?
10 SSSSS_AAAAA
 
23.05.17
16:50
(0) "Выходом (что бы не перезагружать сервак SQl или 1с) является только запуск перестроения индекса и обновления статистики средствами SQL (Причем именно последовательно и вместе-в другом варианте не срабатывает)."
Поставьте выполнение сего в ночной джоб/задачу планировщика винды.
11 e053nk
 
23.05.17
23:56
(10) Ночью набор регламентов выполняется -проблема может возникнуть через пару часов работы
12 Мимохожий Однако
 
24.05.17
06:57
Замер производительности делал? Видно какая процедура или строка кода больше всех кушает? ТИИ?
13 dubraver
 
24.05.17
07:40
Есть несколько способов которые я использовал на практике для поиска "тяжелых" запросов:
1. Чтобы поймать в sql profiler'e длительные по времени запросы, необходимо создать трассировку с фильтром по показателю duration (в миллисекундах больше или равно), а события выбрать  RPC:Completed и SQL: BatchCompleted. Мне таким образом удалось поймать все длительные запросы к базе, и понять какие механизмы требуют оптимизации.
2. Также в Вашем случае вполне возможно что возникают блокировки таблиц, их можно поймать выполнив процедуру sp_locks на базе, в которой Вы работаете, в тот момент когда "подвисает создание докуменов на основании".Процедура Вам вернет заблокированные объекты БД. Через DBID с помощью функции DB_Name() Вы найдете наименование таблицы в БД, а через обработку "ПосмотрМетаданных.epf" вы найдете наименование таблицы в конфигурации 1С.
14 МихаилМ
 
24.05.17
09:26
15 e053nk
 
24.05.17
16:47
(12) Самый долгий вызов процедуры-уходит в защищенный модуль, и собственно посмотреть что там дальше происходит-почти не получается..
16 e053nk
 
05.06.17
12:09
Подниму тему. Ситуацию поймал при зависании ввода на основании. Профайлером Sql снял информацию ,что происходит в этот момент. нашел самый длительный запрос-71сек. (фильтр по длительности более 2сек поставил, остальные запросы от 2 сек до 10 сек по времени и их очень много). Сам пока не очень разобрался в записях профайлера-может кто поможет из более опытных людей-что там  в этом самом длинном запросе тормозит?

http://ximage.ru/index.php?id=1496653218
http://ximage.ru/index.php?id=1496653311
http://ximage.ru/index.php?id=1496653334
http://ximage.ru/index.php?id=1496653355
http://ximage.ru/index.php?id=1496653373
17 Йохохо
 
05.06.17
12:46
(16) надо поискать обработку которая гуглится по "1с получить структуру хранения метаданных"
18 e053nk
 
05.06.17
13:14
Таблицы 1с , участвующие в запросе , я нашел. Не пойму что дальше делать. Один и тот же запрос 1с отрабатывает по времени по разному до перестроения индексов и после. Как проанализировать на чем спотыкается и тормозит запрос?
19 Йохохо
 
05.06.17
14:17
хз, мб кто поправит
смотрим на запрос из 5 и видим (раз) два условия на НеРавно не по кластерному индексу и (два) соединение потом по не ссылочному типу. Из (раз) получаем два скана долгих по не кластеру и потом цикл по кластеру. Из (два) в довесок получаем тяжелую сортировку для соединения
20 Йохохо
 
05.06.17
14:18
тяжесть видно по ссылке 3 из (16)
21 Йохохо
 
05.06.17
14:24
а перестроение вероятно дает сортировку как бонус. И пока не испортится во время работы распределение индекса, то есть статистика, все шуршит
22 e053nk
 
05.06.17
14:59
CСпасибо за направление поиска. Пока мало понимания, сижу разбираюсь
23 Йохохо
 
05.06.17
15:05
https://habrahabr.ru/company/pgdayrussia/blog/329542/ про постгри, но классно написано
24 H A D G E H O G s
 
05.06.17
15:24
(22) Оперативный СрезПоследних там у вас, без Итогов.

Но могу ошибаться.

Добавьте галочку "итоги по срезу последних"

или избавьтесь от необходимости срезапоследних по методике Ненавижу1С
25 H A D G E H O G s
 
05.06.17
15:28
(22) Но лучше найти наименование регистра сведений с помощью обработки структуры таблиц 1С и глобальным поиском по конфе найти все запросы по срезам последних(первых, но вряд ли), проставить точки останова и дождаться воспроизведения.

И прислать текст запроса и структуру регистра сюда.
26 Йохохо
 
05.06.17
20:16
(24) там РС, не РН
27 H A D G E H O G s
 
05.06.17
20:23
(26) Я о РС и веду речь.
28 Йохохо
 
05.06.17
21:26
(27) пару страничек, позязя
29 H A D G E H O G s
 
05.06.17
21:36
(28) шта?
30 Йохохо
 
05.06.17
21:36
он должен доказать
31 Йохохо
 
05.06.17
21:39
не интересно, раз модуль закрыт
32 e053nk
 
06.06.17
11:45
Сейчас опять попал на тормоза ввода на основании документа. Методом перебора попробовал отобрать таблицу из которой притормаживает. Начал с самого длинного запроса и сразу угадал. текст запроса:
Самыйдлинныйзапрос  71271мс РегистрСведений.РегистрацияВремениРабот

exec sp_executesql N'SELECT
T1.Q_001_F_000RRef,
T3.Q_002_F_001RRef,
T3.Q_002_F_002_
FROM (SELECT
T2._Fld7406RRef AS Q_001_F_000RRef,
MAX(T2._Period) AS Q_001_F_001_,
T2._Fld7411 AS Q_001_F_002_
FROM _InfoRg7405 T2 WITH(NOLOCK)                            
WHERE (T2._Fld7408RRef = P1) AND (T2._Fld7407RRef <> @P2)
GROUP BY T2._Fld7406RRef,
T2._Fld7411) T1
LEFT OUTER JOIN (SELECT
T4._Fld7406RRef AS Q_002_F_000RRef,
T4._Fld7407RRef AS Q_002_F_001RRef,
T4._Fld7411 AS Q_002_F_002_,
MAX(T4._Period) AS Q_002_F_003_
FROM _InfoRg7405 T4 WITH(NOLOCK)
WHERE (T4._Fld7408RRef = @P3) AND (T4._Fld7407RRef <> @P4)
GROUP BY T4._Fld7406RRef,
T4._Fld7407RRef,
T4._Fld7411) T3
ON (((T1.Q_001_F_000RRef = T3.Q_002_F_000RRef) AND (T1.Q_001_F_001_ = T3.Q_002_F_003_)) AND (T1.Q_001_F_002_ = T3.Q_002_F_002_))',N'P1 varbinary(16),@P2 varbinary(16),@P3 varbinary(16),@P4 varbinary(16)',0x00000000000000000000000000000000,0xA4A10D6407153BC548BAFB0D700F8CFA,0x00000000000000000000000000000000,0xA4A10D6407153BC548BAFB0D700F8CFA"

Поставил в SQL пересоздание индекса только по этой таблице,отработало быстро-сек 5 наверное. После этого документ стал вводится достаточно быстро. Приведенный запрос отработал за 258 мс-и он самый длительный из цепочки запросов. Поэтому пока поставлю в планы обслуживания SQL задание на перестроение индекса этой таблицы раз 3 часа -понимаю,что это костыль, но пока времени нет плотнее заниматься. Вызов это запроса формируется (как я понял) где то в закрытом модуле, я его расположение примерно увидел,но переделывать пока не придумал как.
AdBlock убивает бесплатный контент. 1Сергей