Тема: Компания Кодерлайн провела вебинар на тему «Оптимизация – стоимость владения»
Вебинар будет интересен руководители IT-подразделений, IT-специалисты, заинтересованные лица
Ведущий: Александр ЛОГАЧЕВ
Описание:
На вебинаре поговорим об оптимизации запросов и кода
Программа вебинара:
1. Запросы – использование индексов, оптимизация архитектуры
2. РЛС – влияние на производительность
3. Ответы на вопросы
Будем благодарны за ваши отзывы :)
2. Железо
Как всегда: чем больше тем лучше но есть несколько заметок:
1. 1С «любит» частоту, выбор между частотами и ядрами должен быть в сторону
частоты, процессор прошлого поколения с более высокой частой покажет
больше производительности чем на новом ядре с меньшей частотой при
одинаковой стоимости.
2. Все последние конфигурации очень «любят» временные файлы и временные
таблицы SSD или RAM диски для TempDB и временных файлов 1С
3. По возможность использовать RAID 10
4. По возможности использовать Memory share или максимально снизить потери
на сеть (отдельные «хардварные» сетевые карты, двойные каналы, убрать свичи
и т.д.)
3. Архитектура БД
Типовые конфигурации:
1. Мало что поменяешь.
2. В случае изменений сложности с обновлением
В эту сторону тоже работают, например механизм расширений
Свои разработки:
1. Не стремитесть к нормализации БД
2. Обращайте внимание на порядок измерений, по возможности агрегируйте данные
3. Не давайте пользователя работать/просматривать таблицы, делайте отчеты
4. НЕ ЛЕНИТЕСЬ ОПТИМИЗИРОВАТЬ! Чем дальше, тем сложнее это будет сделать.
4. Код
Общие рекомендации:
1. Чем меньше вызовов сервера, тем лучше
2. Старайтесь получить данные за 1 обращение к БД
3. Используйте модули повторного использования
4. Не перегружайте списки данными, каждое поле другого справочника/документа
это неявное левое соединение
5. Не используйте СУБД для вычислений - она для хранения и поиска в ней
6. Чем проще запрос, тем быстрее он выполнится
7. RLS – не должно быть пересекающихся ролей! А лучше вообще не остпользовать
8. Для того чтобы пользователь не видел «тормозов» получайте данные фоном.
5. Код – отладка - циклы
1.Да, включение режима отладки на сервере замедляет его,
чем больше циклов, тем больше замедление
2.Для отладки создайте отдельный кластер на этом же
сервере
3.Анализируйте неявные вызовы сервера и обращения к СУБД
6. Код – Архитектура - запросы
ВЫБРАТЬ
МойРегистр.Измерение1 КАК Измерение1,
МойРегистр.Измерение2 КАК Измерение2,
МойРегистр.Измерение3 КАК Измерение3,
МойРегистр.Измерение4 КАК Измерение4,
МойРегистр.Измерение5 КАК Измерение5,
МойРегистр.Измерение6 КАК Измерение6,
МойРегистр.Ресурс1 КАК Ресурс1
ИЗ
РегистрСведений.МойРегистр КАК МойРегистр
ГДЕ
МойРегистр.Измерение1 = &Измерение1
И МойРегистр.Измерение3 = &Измерение
7. Код – Архитектура - запросы
ВЫБРАТЬ
НАЧАЛОПЕРИОДА(МойРегистр.Измерение3, МЕСЯЦ) КАК Поле1,
МойРегистр.Ресурс1 КАК Ресурс1
ИЗ
РегистрСведений.МойРегистр КАК МойРегистр
ГДЕ
НАЧАЛОПЕРИОДА(МойРегистр.Измерение3, МЕСЯЦ) = &Дата
8. Код – Архитектура - запросы
ВЫБРАТЬ
Справочник1.*
ИЗ
Справочник.Справочник1 КАК Справочник1
9. Код – Архитектура - запросы
ВЫБРАТЬ
МойРегистрНакопленияОстатки.Измерение1 КАК Измерение1,
МойРегистрНакопленияОстатки.Измерение2 КАК Измерение2,
МойРегистрНакопленияОстатки.Измерение3 КАК Измерение3,
МойРегистрНакопленияОстатки.Измерение4 КАК Измерение4,
МойРегистрНакопленияОстатки.Измерение5 КАК Измерение5,
МойРегистрНакопленияОстатки.Измерение6 КАК Измерение6,
МойРегистрНакопленияОстатки.Ресурс1Остаток КАК Ресурс1Остаток,
МойРегистрНакопленияОстатки.Ресурс2Остаток КАК Ресурс2Остаток,
МойРегистрНакопленияОстатки.Ресурс3Остаток КАК Ресурс3Остаток,
МойРегистрНакопленияОстатки.Измерение1.Код КАК Измерение1Код,
МойРегистрНакопленияОстатки.Измерение3.Ссылка КАК Измерение3Ссылка
ИЗ
РегистрНакопления.МойРегистрНакопления.Остатки(&Дата,
МойРегистрНакопленияОстатки.Измерение1 = &Изме555555) КАК МойРегистрНакопленияОстатки
ГДЕ
МойРегистрНакопленияОстатки.Измерение3 = &Измерение3
10. Код – Архитектура - запросы
ВЫБРАТЬ
МойРегистрНакопленияОстатки.Измерение1 КАК Измерение1,
МойРегистрНакопленияОстатки.Измерение2 КАК Измерение2,
МойРегистрНакопленияОстатки.Измерение3 КАК Измерение3,
МойРегистрНакопленияОстатки.Измерение4 КАК Измерение4,
МойРегистрНакопленияОстатки.Измерение5 КАК Измерение5,
МойРегистрНакопленияОстатки.Измерение6 КАК Измерение6,
МойРегистрНакопленияОстатки.Ресурс1Остаток КАК Ресурс1Остаток,
МойРегистрНакопленияОстатки.Ресурс2Остаток КАК Ресурс2Остаток,
МойРегистрНакопленияОстатки.Ресурс3Остаток КАК Ресурс3Остаток,
МойРегистрНакопленияОстатки.Измерение1.Код КАК Измерение1Код,
МойРегистрНакопленияОстатки.Измерение3.Ссылка КАК Измерение3Ссылка
ИЗ
РегистрНакопления.МойРегистрНакопления.Остатки(&Дата, ) КАК
МойРегистрНакопленияОстатки
ГДЕ
МойРегистрНакопленияОстатки.Измерение1 = &Измерение3 или
МойРегистрНакопленияОстатки.Измерение3 = &Измерение5
11. Код – Архитектура - запросы
ВЫБРАТЬ
МойРегистрНакопленияОстатки.Измерение1 КАК Измерение1,
МойРегистрНакопленияОстатки.Измерение2 КАК Измерение2,
МойРегистрНакопленияОстатки.Измерение3 КАК Измерение3,
МойРегистрНакопленияОстатки.Измерение4 КАК Измерение4,
МойРегистрНакопленияОстатки.Измерение5 КАК Измерение5,
МойРегистрНакопленияОстатки.Измерение6 КАК Измерение6,
МойРегистрНакопленияОстатки.Ресурс1Остаток КАК Ресурс1Остаток,
МойРегистрНакопленияОстатки.Ресурс2Остаток КАК Ресурс2Остаток,
МойРегистрНакопленияОстатки.Ресурс3Остаток КАК Ресурс3Остаток,
МойРегистрНакопленияОстатки.Измерение1.Код КАК Измерение1Код,
МойРегистрНакопленияОстатки.Измерение3.Ссылка КАК Измерение3Ссылка
ИЗ
РегистрНакопления.МойРегистрНакопления.Остатки(&Дата, ) КАК
МойРегистрНакопленияОстатки
ГДЕ
МойРегистрНакопленияОстатки.Измерение3 = &Измерение3 или
МойРегистрНакопленияОстатки.Измерение3 = &Измерение5
12. Код – Архитектура - запросы
ВЫБРАТЬ
МойРегистрНакопленияОбороты.Регистратор.Номер КАК РегистраторНомер
ИЗ
РегистрНакопления.МойРегистрНакопления.Обороты(, , Регистратор, ) КАК
МойРегистрНакопленияОбороты
ГДЕ
МойРегистрНакопленияОбороты.Регистратор ССЫЛКА Документ.Документ1
13. Код – Архитектура - запросы
ВЫБРАТЬ
МойРегистрНакопленияОбороты.Ресурс1Оборот
КАК Ресурс1Оборот
ИЗ
(ВЫБРАТЬ
Документ1.Ссылка КАК Ссылка
ИЗ
Документ.Документ1 КАК
Документ1) КАК ВложенныйЗапрос
ЛЕВОЕ СОЕДИНЕНИЕ
РегистрНакопления.МойРегистрНакопления.Обороты(, , , )
КАК МойРегистрНакопленияОбороты
ПО ВложенныйЗапрос.Ссылка =
МойРегистрНакопленияОбороты.Измерение1
ВЫБРАТЬ
МойРегистрНакопленияОбороты.Ресурс1Оборот
КАК Ресурс1Оборот
ИЗ
РегистрНакопления.МойРегистрНакопления.Обо
роты(
,
,
,
Измерение1 В
(ВЫБРАТЬ
Документ1.Ссылка КАК Ссылка
ИЗ
Документ.Документ1 КАК Документ1)) КАК
МойРегистрНакопленияОбороты
16. Спасибо что дослушали до конца,
с вами был Логачев Александр Сергеевич
Руководитель отдела разработки
Тел: +7 (495) 374-55-39 доб. 122
e-mail: alogachev@koderline.ru
Skype: alogachev1981