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

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

❤ 515 , Категория: Новости,   ⚑ 11 Авг 2017г

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

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

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

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

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

Этот план последовательный. Он предполагает извлечение предварительно отсортированных данных из кластеризованного индекса двоичного дерева в ходе обработки в построчном режиме. Далее строки преобразуются в пакеты, и оконная функция вычисляется с помощью оператора пакетного режима 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/. Здесь представлены отличные игровые автоматы с достаточно высоким выигрышным коэффициентом. Благодаря им вы и отдохнете и сможете заработать!



По теме: ( из рубрики Новости )

Оставить отзыв

Ваш адрес email не будет опубликован. Обязательные поля помечены *

*
*

два × три =

Похожие записи

наверх