Запросы и оптимизация

Petro Bazeliuk —  Апрель 23, 2017 — Оставьте комментарий

Хочу рассмотреть вопросы и подготовку к сертификации. Учить правильные ответы плохой путь, а вот понимать ответы и применять их, вы тем самым становитесь на путь к уровню «1С:Эксперт». По сути это цикл записей с расширенными ответами на несколько вопросов из тестов.

План запроса, формируемый SQL Server, можно получить с помощью таких инструментов:

  • SQL Server Profiler;
  • Технологический журнал;
  • Центр управления производительностью (ЦУП).

Элемент plansql предназначен для управления сбором планов запроса, формируемых при работе различных СУБД. Собственно планы запросов содержатся в свойстве  planSQLText событий, связанных с СУБД. Источники:
• ИТС: Структура конфигурационного файла
• ИТС: Описание расположения служебных файлов


Performance\Showplan Statistics Profile и Performance\Showplan XML Statistics Profile — позволяют получить как графическое, так и текстовое представление плана запроса.
Источники:
• книга «Microsoft SQL Server 2014 Unleashed»
• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 94.


Index Scan — оператор получает все записи некластерного индекса, указанного в столбце Argument. Index Scan является логическим и физическим оператором. См. книгу «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 101.


План запроса — последовательность физических и логических операций, необходимых для получения результата SQL-запроса в реляционной СУБД.


Index Seek — оператор использует возможности поиска по индексам для получения строк из некластерного индекса, указанного в столбце Argument. Index Seek является логическим и физическим оператором.
Источники:
• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 102.


Clustered Index Scan — оператор сканирует кластерный индекс, указанный в столбце Argument. Clustered Index Scan является логическим и физическим оператором.
Источники:
• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 101.


Clustered Index Seek — оператор использует поисковые возможности индексов для получения строк из кластерного индекса, указанного в столбце Argument. Clustered Index Seek – это логический и физический оператор.
Источники:
• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 102.


Table Scan — получает строки из таблицы, указанной в столбце Argument плана выполнения запроса. Table Scan является логическим и физическим оператором.
Источники:
• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 101.


Clustered Index Scan сканирует кластерный индекс, а Table Scan возвращает все строки из таблицы указанной в столбце Argument. Clustered Index Scan используется для сканирования сортированных таблиц целиком, а Table Scan — не сортированных.
Источники:
• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 101.


Clustered Index Scan — операция, выполняемая над кластерным индексом. Index Scan — операция, выполняющая сканирование некластерного индекса. Источники:
• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 101.


Чтобы найти длительный запрос MS SQL Server, в файле технологического журнала необходимо прописать DBMSSQL и использовать фильтр по полю Durations.
Источники:
ИТС: Оценка производительности и оптимизация многопользовательской системы. Общий подход.


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


Конструкция ДЛЯ ИЗМЕНЕНИЯ используется, чтобы вместо разделяемой блокировки установить блокировку обновления.
Источники:
• ИТС: Использование предложения «ДЛЯ ИЗМЕНЕНИЯ» в языке запросов.


Конструкция ДЛЯ ИЗМЕНЕНИЯ в запросах используется для защиты от взаимоблокировки, которая возникает при повышении уровня блокировки в транзакциях с уровнем изоляции:
Repeatable Read — обеспечивает повторяемость чтения данных. Если моя транзакция начинает читать данные, то другая транзакция не может их изменить до окончания моей транзакции.
Serializable — последовательное выполнение. Этот уровень изоляции является максимальным и обеспечивает полную изоляцию транзакций друг от друга.
Источники:
ИТС: Блокировки данных в 1С:Предприятии 8
ИТС: Управление блокировками данных в транзакции


Data Definition Language (DDL) (язык описания данных) — это семейство компьютерных языков, используемых в компьютерных программах для описания структуры баз данных.
Источники:
wiki: DDL.


Data Control Language (DCL) — подмножество языка управления базами данных SQL, предназначенное для осуществления административных операций, присваивающих или отменяющих право (привилегию) использовать базу данных, таблицы и другие объекты базы данных, а также выполнять те или иные операторы SQL.
Источники:
wiki: DCL


Data Manipulation Language (DML) (язык управления (манипулирования) данными) — это семейство компьютерных языков, используемых в компьютерных программах или пользователями баз данных для получения, вставки, удаления или изменения данных в базах данных.
Источники:
wiki: DML


План запроса — нужен для формирования последовательности операций, необходимых для получения результата запроса в СУБД. По фактическому плану можно понять, какой именно алгоритм СУБД выбрала для решения поставленной перед ней задачи, какие операторы решила использовать.
Источники:
• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 94.


SQL:BatchCompleted, RPC:Completed, Showplan Statistic Profile, Showplan XML Statistic Profile — позволяют получить как графическое, так и текстовое представление плана запроса, текст запроса, длительность выполнения.
Источники:
• «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 94.


Showplan XML — скомпилированный план запроса, полученный до выполнения по этому плану.
Showplan XML Statistic Profile — план, включающий реальную статистику после выполнения запроса по этому плану.
Источники:
• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 94.


Showplan XML — показывается перед каждым выполнением запроса. Showplan XML for Query Compile — не показывается при повторном исполнении, так как план берется из кэша.


Nested loops соединяет таблицы вложенным циклами. Является физическим оператором.
Hash join соединяет таблицы хешированием не сортированных таблиц. Является физическим оператором.
Источники:
• «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 104.


Соединение хэшированием — меньшая из двух входных таблиц помещается в специальную структуру данных в памяти: хэш-таблицу, которая обеспечивает очень высокую скорость поиска. Затем для каждой строки из большей таблицы выполняется поиск значений, соответствующих условию соединения. Результаты помещаются в выходную таблицу.
Источники:
• wiki: Алгоритм соединения хэшированием


Соединения слиянием — входные таблицы должны быть отсортированы по столбцам, участвующим в условии соединения. Соединение осуществляется за одно сканирование (проход по) каждой из входных таблиц. То есть одна и та же строка считывается только один раз, что даёт преимущество перед соединением вложенными циклами.
Источники:
• wiki: Алгоритм соединения слиянием


Соединение вложенными циклами — для каждой строки одной из таблиц (ведущей) выполняется поиск в другой таблице (ведомой) строк, соответствующих условию соединения.
Источники:
• wiki: Алгоритм соединения вложенными циклами


Merge join — соединяет сортированные таблицы слиянием.
Nested loops
— соединяет таблицы вложенными циклами.


При соединение с вложенными запросами, весь запрос может выполняться крайне медленно.
Источники:
• ИТС: Ограничения на соединения с вложенными запросами и виртуальными таблицами


При соединение с вложенными запросами, оптимизатор сервера СУБД не всегда может правильно оптимизировать такой запрос, ему может быть трудно понять какое количество записей может быть возвращено в подзапросе. В этом случае СУБД может ошибиться с планом запроса, что приведет к катастрофическому падению производительности запроса.
Источники:
• ИТС: Ограничения на соединения с вложенными запросами и виртуальными таблицами


Не оптимальные длительные запросы с использованием соединений с подзапросами следует переписать с использованием временных таблиц.
Источники:
• ИТС: Ограничения на соединения с вложенными запросами и виртуальными таблицами


Если в запросе используется соединение с виртуальной таблицей языка запросов «1С:Предприятия» (например, РегистрНакопления.Товары.Остатки() ) и запрос работает с неудовлетворительной производительностью, то рекомендуется вынести обращение к виртуальной таблице в отдельный запрос с сохранением результатов во временной таблице.
Источники:
• ИТС: Ограничения на соединения с вложенными запросами и виртуальными таблицами


Для оптимизации запроса с получением данных через точку от полей составного типа рекомендуется в запросе использовать условие «ВЫБОР», а затем фильтр «ВЫРАЗИТЬ». В этом случае можно значительно ускорить работу запроса, ограничив количество соединений.
Источники:
• ИТС: Разыменование ссылочных полей составного типа в языке запросов


Если в запросе используется получение данных через точку от полей составного типа, то при выполнении такого запроса будет выполняться соединение с таблицами объектов, входящих в составной тип.
Источники:
• ИТС: Разыменование ссылочных полей составного типа в языке запросов


Основные причины неоптимальных запросов — соединения с подзапросами, соединения с виртуальными таблицами, несоответствие индексов и условий запросов, использование подзапросов в условии соединения, получение данных через точку от полей составного типа, фильтрация виртуальных таблиц без использования параметров, условия, не предполагающие поиск по индексу («ИЛИ», «не равно» и прочие).
Источники:
• ИТС: Оптимизация запросов


Подходящим является индекс, удовлетворяющий требованиям:
• индекс содержит все поля перечисленные в условии;
• поля перечисленные в условии, идут подряд, между ними не «вклиниваются» поля, не участвующие в условии запроса.
Источники:
• ИТС: Несоответствие индексов и условий запроса


Критерии неоптимального запроса:
• медленное выполнение запроса при слабой нагрузке на оборудование;
• возникновение избыточных блокировок;
• значительная разница по времени выполнения запроса на разных СУБД;
• повышенная чувствительность запроса к актуальности и полноте статистик;
• нестабильная работа запроса. При некоторых условиях запрос может работать достаточно быстро, при других — очень медленно.


JOIN — добавляет столбцы в результирующую таблицу.
UNION — добавляет таблицу с тем же составом столбцов.


UNION — полностью заменяет одинаковые строки одной, на что затрачивается дополнительное время, даже в случаях, когда одинаковых строк в запросах заведомо быть не может.


 

select 
    * 
from 
    dbo._document180 
where 
    _number like 'ТД00%' 
order by  
    _number

 


 

delete 
from 
   dbo._document180 
where 
   _number = 'ТД00-000003'

 


 

update 
    dbo._document180 
set 
    _number = 'ТД00-000003' 
where 
    _number= 'ТД00-000002'

 


 

 

select 
    _number, 
    posted 
from 
    dbo._document180 
where 
    _number like 'ТД00%' 

union all 

select 
    _number, 
    posted 
from 
    dbo._document182 

order by 
    _number

 


 

 

select 
    * 
from 
    dbo.document180 

inner join dbo.document180_vt4131 
on dbo.document180._idrref = dbo.document180_vt4131._idrref 

where 
    dbo.document180._number like 'ТД00%'

 


 

Последовательность элементов event определяет условие, при выполнении которого событие будет помещено в журнал. В журнал помещаются только такие события, которые удовлетворяют условию. Иначе говоря, если условие, определяемое последовательностью элементов event, принимает значение Истина, то событие будет записано в журнал.
DBORACLE —
исполнение операторов SQL СУБД Oracle Database.
DB2 — исполнение операторов SQL СУБД DB2.
DBPOSTGRS — исполнение операторов SQL СУБД PostgreSQL.
DBV8DBENG — исполнение операторов SQL файловой СУБД.
EDS — работа с внешними источниками данных.
Источники:
• ИТС: Приложение 3. Описание и расположение служебных файлов

Petro Bazeliuk

Записи

Опыт работы с «1С:Предприятие 8» — более 10 лет, за это время реализовано 30 успешных проектов по итеративным методологиям Scrum и Kanban. Оптимальные решения для высоконагруженных ИБ с онлайном от 400 человек. Занимаюсь продвижением в массы системы контроля версий — git и методики git-flow, TDD, BDD, а также проработкой паттерна минимальной модификации конфигурации и внесением изменений без обновления базы данных. Время от времени участвую в проекте xUnitFor1C.

Комментариев нет

Be the first to start the conversation!

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s