Заметки Дмитрия Пилюгина о Microsoft SQL Server 

Twitter RSS
formats

Что можно узнать из плана запроса

Введние

SQL запрос описывает результат, который необходимо получить, но не способ его получения. Набор конкретных шагов, которые сервер должен предпринять, чтобы вернуть результат называется планом выполнения запроса, его построением занимается оптимизатор. От выбора плана зависит скорость выполнения, поэтому, он является одним из самых важных элементов при анализе проблем производительности запроса.

План выполнения состоит из операторов и их свойств, связанных между собой в древовидную структуру, каждый из которых отвечает за определенную логическую и физическую операцию. Все вместе они обеспечивают получения того результата, который описан текстом запроса. Внутри сервера операторы представляют собой объекты классов в памяти SQL Server. Пользователи сервера, т.е. мы с вами, видим их описание, сформированное в виде документа XML с определенной схемой, и отображаемое средой SQL Server Management Studio (SSMS) в графическом виде.

Существует множество разнообразных операторов плана, а их свойств еще больше, кроме того, периодически появляются новые. Эта заметка не ставит целью описать всё возможное многообразие операторов, вместо этого, я хотел бы поделиться наиболее интересными добавлениями в этой области, а также вcпомнить некоторые старые, но полезные элементы.

Читать дальше…

 
formats

Возобновляю публикации в русскоязычном блоге

В 2014 году, я начал вести англоязычный блог www.queryprocessor.com, пообещав не забрасывать свой первоначальный блог и продолжать публиковать в нем статьи по мере сил и возможностей. С тех пор, мужественно и последовательно, за 2.5 года я не опубликовал в нем ни одной статьи. Хватит это терпеть!

Появились интересные вещи, которыми бы я хотел поделиться с читателями, кроме того, я просто соскучился по написанию статей на русском языке, поэтому, я решил возобновить публикацию статей в этом блоге. На этот раз я не буду ничего обещать, посмотрим, как пойдет.

 
formats

QueryProcessor.com

I’m glad to say, that I started the English version of my blog called www.QueryProcessor.com, where I’m going to publish my notes about Query Optimization and Query Execution in SQL Server.

This will help me to learn English better and share my experience with more readers!

Welcome everybody!

Рад сообщить, что я запустил английскую версию своего блога www.QueryProcessor.com!
Новый блог будет целиком и полностью посвящен обработке запросов в SQL Server, это включает в себя компоненты Query Optimization и Query Execution.

Это позволит мне лишний раз поупражняться в английском языке и рассказать про оптимизацию запросов более широкому кругу читателей.

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

Всем welcome!

 

 
formats

Оконные функции и row goal

blogpost_min

В этой заметке, я хочу описать один любопытный случай падения производительности в запросах с оконными функциями и неравномерным распределением данных. Для людей, работающих с SQL Server, использование оконных функций, как и неравномерное распределение данных – обычное и довольно частое явление, с которым периодически сталкиваешься в реальной жизни. При определенном стечении обстоятельств, два фактора соединенных вместе, могут стать источником низкой производительности.

 

 

Читать дальше…

 
 Share on Facebook Share on Twitter Share on Reddit Share on LinkedIn
Комментарии отключены  comments 
formats

Good Enough Plan

blogpost_min
Когда-то, я уже писал заметки на тему факторов, ограничивающих процесс оптимизации, с целью сократить его время. Это timeout и good enough plan. Особенно подробно я расписывал концепцию таймаута, сегодня я хочу рассказать про «good enough plan». Я начну с одной любопытной, на мой взгляд, истории, которую слышал от одного из членов команды разработки оптимизатора на Платформе 2008. А недавно наткнулся на более подробную версию этой истории в Интернете, которая была даже снабжена фотографией. И хотя сами публикации довольно старые и история известна многим, я все же начну с нее, т.к. она релевантна теме заметки.
 

 
Читать дальше…

 
 Share on Facebook Share on Twitter Share on Reddit Share on LinkedIn
Комментарии отключены  comments 
formats

Cardinality Estimation Framework 2014 First Look

blogpost_min

Введение

На прошедшем мероприятии SQLSaturday #261 — Moscow 2013 я рассказывал о том, как оптимизатор оценивает предполагаемое число строк и на основании этого строит план запроса. Иными словами я говорил про оценки кардинальности, и разумеется, не смог обойти вниманием новую версию механизма оценки кардинальности в SQL Server 2014.

What’s New (Database Engine)

01
Информации на эту тему пока довольно мало, в конце заметки я приведу список всех известных мне на сегодня статей на эту тему. Информации из первоисточников пока нет вовсе, надеюсь, с официальным выходом SQL Server 2014 ситуация изменится в лучшую сторону.
Пока же, я хочу поделиться с читателями результатами своих собственных экспериментов.
Читать дальше…

 
 Share on Facebook Share on Twitter Share on Reddit Share on LinkedIn
Комментарии отключены  comments 
formats

Sql Server 2014 CTP Columnstore


3

Вашему вниманию представляется обзорный доклад на тему колоночных индексов в SQL Server 2014 CTP2.
Доклад касается CTP, т.е preview — и к релизу, что-то может измениться.
 

 
Читать дальше…

 
Теги:
 Share on Facebook Share on Twitter Share on Reddit Share on LinkedIn
Комментарии отключены  comments 
formats

Забавный случай упрощения соединений 2

blogpost30_minПродолжая разговор, об упрощении дерева запроса, начатый в предыдущем посте, рассмотрим еще один интересный случай упрощения.
Читать дальше…

 
 Share on Facebook Share on Twitter Share on Reddit Share on LinkedIn
Комментарии отключены  comments 
formats

Забавный случай упрощения соединений

blogpost29_minНедавно, просматривая план запроса, я обратил внимание, что в одной ветке плана таблицы соединяются при помощи Nested Loops Join (NL), хотя логичнее было бы видеть там Merge Join (SM). Я решил разобраться, почему так происходит и наткнулся на интересную особенность оптимизатора.

Читать дальше…

 
 Share on Facebook Share on Twitter Share on Reddit Share on LinkedIn
Комментарии отключены  comments 
formats

Columnstore Batch Execution и Compute Scalar


На прошедшей конференции 24HOP Russia я рассказывал о Columnstore индексах и оптимизаторе запросов. К сожалению, мне не хватило времени поделиться всеми интересными примерами, и в этой заметке я расскажу об одном любопытном случае, который влияет на производительность запроса и Columnstore индекса.
Читать дальше…