Имя: Пароль:
1C
 
Кратная разница производительности SQL сервера.
0 Skom2
 
20.11.23
08:12
Имеем два виртуальных сервера. серверы полные близнецы.

На одном сервере тяжелый тестовый запрос выполняется 4,5 сек. На втором 0,6 сек.

Помогите найти причину.

Версии серверов: 15.0.2093.5 (этот медленный), 15.0.2101.7 (этот шустрее)

Сначала грешил на разные сборки. На тестовом отдельном компьютере проверил эту гипотезу: ставил 3 разные версии с постепенным увеличением версии СКЛ сервера до 15.0.2101.7.
На всех сборках тестовый запрос показывал одно и то же время.

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

Было замечено, что на проблемном и быстром сервере скорость дисковой подсистемы различается.
чтение 540 МБ/с против 380.

Администраторы поменяли виртуалки в кластере местами и теперь на проблемном серваке чтение составляет 540 Мб/с, а на втором 380.
Однако, это повиляло на скорость выполнения запросов примерно на 10 мсек.

Оказалось, что запрос пожирает в большей степени ЦПУ, нежели диск.

Проверил настройки СКЛ серверов запросом
select * from sys.configurations

Настройки одинаковы.

Пока больше не знаю, куда уже и смотреть
1 Волшебник
 
20.11.23
08:13
замените сервер прода быстрым, а медленный погасите
2 Skom2
 
20.11.23
08:16
(1) у нас есть второй сервер прода, на котором также медленно, по сравнению с тестом.
Хочется понять причину.
3 Skom2
 
20.11.23
08:18
Забыл уточнить. При замерах времени я использовал время выполнения запроса на стороне СКЛ, т.е. в замерах исключено влияния сервера 1С предприятия на общую картину
4 Chai Nic
 
20.11.23
08:25
Смотрите планы запросов. Есть подозрение, что на одном сервере выбирается неоптимальные методы например из-за неактуальной статистики.
5 Skom2
 
20.11.23
08:26
(4) статистика обновлена перед контрольным замером.
Планы запросов одинаковы до неприличия :-)
6 Chai Nic
 
20.11.23
08:33
(5) То есть планы одинаковые, а временные характеристики исполнения запросов разные? Можешь сюда кинуть фактический план с таймингами?
7 Skom2
 
20.11.23
08:46
(6) в xml план?
8 Chai Nic
 
20.11.23
08:59
(7) Хотя бы. Чтобы было на что посмотреть, а не тупо фантазировать.
9 Chai Nic
 
20.11.23
08:59
+(8) Только именно фактический, а не прогнозный план
10 Skom2
 
20.11.23
09:08
(9) из хранилища запросов сейчас выдерну.
11 Lama12
 
20.11.23
09:08
(0)У меня такое было из-за распараллеливания выполнения запросов. На проде было выключено согласно рекомендациям. На тесте было включено "из коробки". Включил на проде, подобрал стоимость распараллеливания.
12 Skom2
 
20.11.23
09:13
(11) параллелиризм выключен на всех серваках
13 Волшебник
 
20.11.23
09:18
(2) Сделайте полный бэкап быстрого сервера и разверните его на вторую машину. Клонируйте скорость!
16 Xapac
 
20.11.23
09:24
(5) Нам то покажите планы.
17 Dzenn
 
20.11.23
09:26
Возможно, в новой версии добавили какой-то фикс, который в вашем случае сработал и оказал влияние на производительность.  В принципе, версии же именно для этого и делают — для устранения старых ошибок и добавления новых. Моя рекомендация — почитайте "новое в версии", возможно, именно оно оказало влияние.
18 Garykom
 
20.11.23
10:01
19 Garykom
 
20.11.23
10:03
надеюсь у вас одинаковая ось на обоих?
20 rphosts
 
20.11.23
10:10
(0) и настройки совпадают и базы околоидентичны и статистика свежая и т.п.?
21 Skom2
 
20.11.23
10:12
(16) пока небольшой баг нашелся.

восстановил копию базы с прода на тесте. теперь показывает медленное выполнение запросов :-)

Сейчас пытаюсь найти разницу между базами.
22 Skom2
 
20.11.23
10:12
(19) да.
23 Skom2
 
20.11.23
10:13
(20) как оказалось, какие-то различия есть. именно в БД.
24 Skom2
 
20.11.23
12:36
Запрос 1С

ВЫБРАТЬ РАЗЛИЧНЫЕ
    ВТ_ДанныеДляПодбораОплат.ВалютаВзаиморасчетов КАК Валюта,
    ВТ_ДанныеДляПодбораОплат.КорСчет КАК Счет,
    ВТ_ДанныеДляПодбораОплат.КорСубконто1 КАК Контрагент,
    ВТ_ДанныеДляПодбораОплат.КорСубконто2 КАК ДоговорКонтрагента,
    ВТ_ДанныеДляПодбораОплат.КорСубконто3 КАК ДокументРасчетов
ПОМЕСТИТЬ ВТ_ДанныеДляПодбораОплат
ИЗ
    &ИсходнаяТаблица КАК ВТ_ДанныеДляПодбораОплат
ГДЕ
    ВТ_ДанныеДляПодбораОплат.СуммаБУ < 0 И ВТ_ДанныеДляПодбораОплат.СуммаВзаиморасчетов < 0
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    1 КАК ВариантОстатка,
    ХозрасчетныйОстатки.Счет КАК Счет,
    ХозрасчетныйОстатки.Подразделение КАК Подразделение,
    ХозрасчетныйОстатки.Субконто1 КАК Контрагент,
    ХозрасчетныйОстатки.Субконто2 КАК ДоговорКонтрагента,
    ХозрасчетныйОстатки.Субконто3 КАК ДокументРасчетов,
    ХозрасчетныйОстатки.Валюта КАК Валюта,
    1
ПОМЕСТИТЬ ВТ_ОстаткиВзаиморасчетов
ИЗ
    РегистрБухгалтерии.Хозрасчетный.Остатки(
            &ДатаКорректировки,
            Счет В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыСПокупателямиВал)),
            ,
            Организация = &Организация
                И (Субконто1, Субконто2, Валюта) В
                    (ВЫБРАТЬ
                        А.Контрагент,
                        А.ДоговорКонтрагента,
                        А.Валюта
                    ИЗ
                        ВТ_ДанныеДляПодбораОплат КАК А)) КАК ХозрасчетныйОстатки
25 Skom2
 
20.11.23
12:36
куда план запроса выложить? на какой ресурс?
26 rphosts
 
20.11.23
12:43
(23) перетащи базу на другой сервак и сравни результат ещё раз но на идентичных базах
27 lodger
 
20.11.23
12:52
28 Skom2
 
20.11.23
12:56
Ок. Завтра вернусь к этому вопросу. У меня раб.день закончился. Пора убегать
29 Skom2
 
20.11.23
12:57
(27) спасибо
30 Skom2
 
20.11.23
13:01
Обнаружилось следующее:
если указать параметры виртуальной таблицы через временную таблицу (как в (24)), то план запроса различается,

если убрать ВТ и указать параметры напрямую, через параметры запроса (там в данных ТЗ с одной строкой)
То план запроса совпадает.

Это утренняя копия базы и пятничная на одном и том же сервере.

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

DBCC freeproccache не помогает
31 leshikkam
 
20.11.23
13:02
(29) добавь в первой ВТ индекс по самому селективному полю.
ДоговорКонтрагента
32 Chai Nic
 
20.11.23
14:29
А кстати, разве договор не определяет однозначно и контрагента и валюту? Может оставить отбор по одному полю вообще?
33 Skom2
 
20.11.23
15:24
(32) там субконто же.
(31) в ВТ всего одна строка
34 Chai Nic
 
20.11.23
15:38
(33) И что? Если одно субконто дает 100% селективность, зачем отбирать и по остальным тоже?
35 Skom2
 
20.11.23
18:00
(34) не помню, как там индексы на ВТ указаны.
Оба надо указывать или они по отдельности. Завтра в базе гляну.
36 Skom2
 
21.11.23
10:47
(34) Состав индекса по таблицам итогов по счетам так, устроен таким образом, что для попадания в индекс необходимо указать все предшествующие субконто.
37 Chai Nic
 
21.11.23
10:49
(36) И что, попадает? Дает какой-то эффект в плане быстродействия? Пробовали так и эдак, смотрели планы запросов?
38 Skom2
 
21.11.23
10:55
(37) когда миллионы записей и обращение к виртуальным таблицам в модуле проведения, то прирост скорости существенный на 50-100 тысячах документов.
39 Skom2
 
21.11.23
11:00
(37) кратко, о попадании в индекс.

Вот часть неоптимального запроса

|ИЗ
|    РегистрБухгалтерии.Хозрасчетный.Остатки(
|            &ДатаКорректировки,
|            Счет В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыСПокупателямиВал)),
//++Оптимизация попадания в индекс
|            &ВидыСубконтоСчета62,
//++Оптимизация попадания в индекс
|            Организация = &Организация
|                И (Субконто1, Субконто2, Валюта) В
|                    (ВЫБРАТЬ
|                        А.Контрагент,
|                        А.ДоговорКонтрагента,
|                        А.Валюта
|                    ИЗ
|                        ВТ_ДанныеДляПодбораОплат КАК А)) КАК ХозрасчетныйОстатки


После добавления фильтра на виды субконто запрос вместо 4-х секунд стал выполняться за 0,5 секунды.
40 Chai Nic
 
21.11.23
12:53
(39) Какая связь между отбором по видам субконто и фильтром по всем субконто сразу? Одно может быть и без другого.
41 Skom2
 
21.11.23
19:10
(40) Я не виноват, так индекс устроен.