Новость из категории: Информация

SQL Server 2016: агрегатный оконный оператор пакетного типа | Строки с разделителями UNBOUNDED и CURRENT ROW. Продолжение

SQL Server 2016: агрегатный оконный оператор пакетного типа | Строки с разделителями UNBOUNDED и CURRENT ROW. Продолжение

План выполнения данного запроса представлен на рисунке ниже.

SQL Server 2016: агрегатный оконный оператор пакетного типа | Строки с разделителями UNBOUNDED и CURRENT ROW. Продолжение
План выполнения запроса Query 2 (ROWS, пакетный режим обработки данных в представлении columnstore)

На этот раз мы имеем дело с параллельным планом, реализующим обработку данных в пакетном режиме. Данные извлекаются из индекса columnstore, отсюда снижение издержек на операции ввода-вывода; однако необходимость сортировки данных для вычисления оконной функции сохраняется, хотя при этом используется оператор пакетного режима Sort. Затем почти все чудеса происходят с привлечением оператора пакетного режима Window Aggregate; он заменяет следующие пять операторов из предыдущего плана: Segment, Sequence Project, Segment, Window Spool и Stream Aggregate. В дополнение к очевидным достоинствам пакетного режима обработки этот оператор обеспечивает оптимизированный путь кода для всех оконных функций. Снижающие эффективность обстоятельства, связанные с использованием буфера и появлением двух строк на каждую базовую строку, уже не сдерживают производительность. Наконец, при нулевом числе строк оператор Compute Scalar воз-вращает значение NULL, а оператор Gather Streams собирает строки из нескольких потоков в один поток строк.



При выполнении данного запроса я получил следующие статистические данные: продолжительность — 8 секунд, процессор — 19 секунд, логические операции считывания — 6 К, записи — 0. Обратите внимание на сокращение времени выполнения с 28 до 8 секунд.

SQL Server 2016: агрегатный оконный оператор пакетного типа | Строки с разделителями UNBOUNDED и CURRENT ROW. Продолжение
Запрос Query 3

По-видимому, самая затратная часть этого плана — это явно заданная сортировка. Необходимость сортировки можно было бы исключить, предварительно отсортировав данные в индексе двоичного дерева, но ведь для нас важно располагать индексом columnstore, пусть даже фиктивным, чтобы иметь возможность обрабатывать данные в пакетном режиме. Для демонстрации стратегии «пакетная обработка данных в представлении rowstore» я буду пользоваться запросом, приведенным в коде выше (назовем его Query 3), к таблице TransactionsDCS (rowstore с фиктивным columnstore).

SQL Server 2016: агрегатный оконный оператор пакетного типа | Строки с разделителями UNBOUNDED и CURRENT ROW. Продолжение
План выполнения запроса Query 3 (ROWS, пакетная обработка данных rowstore)

План выполнения этого запроса представлен на рисунке выше.

Этот план последовательный. Он предполагает извлечение предварительно отсортированных данных из кластеризованного индекса двоичного дерева в ходе обработки в построчном режиме. Далее строки преобразуются в пакеты, и оконная функция вычисляется с помощью оператора пакетного режима Window Aggregate. Обратите внимание на то, что, если у вас в таблице имеются как индекс rowstore, так и подлинный индекс columnstore, оптимизатор отдает предпочтение не стратегии rowstore, а обработке данных в пакетном режиме.

Вот статистические показатели, полученные мною при выполнении данного запроса: продолжительность — 7 секунд, процессор — 7 секунд, логические операции считывания — 31 К, записи — 0. Есть одно свойство, отсутствие которого весьма заметно снижает ценность данного плана; я имею в виду параллелизм. На данный момент система SQL Server 2016 все еще не позволяет эффективно использовать сочетание параллельно упорядоченного оператора Index Scan и операторов Window Aggregate. Предстоит еще кое-что усовершенствовать в ядре, и, будем надеяться, у нас появится такая возможность. И тогда показатели времени выполнения, указанные в статье, снизятся еще больше.

Работа с агрегатным оконным оператором пакетного типа в SQL Server 2016 - это та еще головная боль. Поэтому предлагают отвлечься, прежде чем приступать к изучению следующей части статьи. Сделать это можно, к примеру, на http://www.777-sloti.com/igrat-na-dengi/ (http://www.777-sloti.com/igrat-na-dengi/). Здесь представлены отличные игровые автоматы с достаточно высоким выигрышным коэффициентом. Благодаря им вы и отдохнете и сможете заработать!

<<К началу статьи

Рейтинг статьи

Оценка
0/5
голосов: 0
Ваша оценка статье по пятибальной шкале:
 
 
   

Поделиться

Похожие новости

Комментарии

^ Наверх