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

Twitter RSS
formats

SQL Rally 2013 Moscow — Window Functions

Всех приветствую. Выкладываю материалы с прошедшей конференции SQL Rally.

Тема моего доклада оконные функции в SQL Server. В докладе были рассмотрены основные концепции (partitioning, ordering, framing), сделан обзор существовавших и появившихся функций в SQL Server 2012, а также приведены сведения о планах выполнения и производительности запросов с оконными функциями.
SQLRally2013.Moscow.WindowFuctions.DmitryPilugin (~1.52 MB)

Спасибо всем участникам и организаторам!

 
formats

24 HOP Columnstore Indexes

Вот и прошла глобальная on-line конференция 24 Hours of PASS Russia. В этом году, я первый раз принимал в ней участие в качестве докладчика, выступая с докладом про новую технологию Columnstore Indexes в SQL Server 2012.

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

Выступая в качестве докладчика, тоже испытываешь интересные чувства, в основном связанные с тем, что нет непосредственного контакта со слушателями. Начинают закрадываться панические мысли — «а что если меня не слышно и я рассказываю все это самому себе, а люди по другую сторону экрана сидят в недоумении» и т.д. Надеюсь, что такого не произошло =)

Хотелось сказать спасибо всем кто присоединялся, слушал доклады, задавал вопросы, а также коллегам, которые выступали. Отдельное спасибо организаторам и в частности Андрею Коршикову. Трудно представить, сколько усилий требуется, чтобы организовать столько народу по всему миру (ведь докладчики были из разных стран и часовых поясов), но явно усилий не мало. Андрей, спасибо. Надеюсь, что в будущем это мероприятие будет приобретать все бОльшую популярность и аудитория мероприятия будет расти.

Как и обещал, выкладываю свои материалы к конференции, презентацию и демонстрации.
24HOP2013 Columnstore (~ 433 KB)
Если у вас будут возникать вопросы, пожалуйста, не стесняйтесь их задавать через комментарии, твиттер, электронную почту [pilugin(at)inbox.ru].
Всем спасибо и до встречи на SQL Rally, где я буду рассказывать про оконные функции!

 
formats

Недокументированная команда dbcc csindex

По мере подготовки докладов на тему Columnstore индексов наткнулся на интересную недокументированную команду dbcc csindex. Никакой информации по ней нашел, по этому поделюсь тем что удалось выяснить самому.
Читать дальше…

 
formats

Оптимизатор без границ (ч.2)


Продолжаем отключать внутренние пороги оптимизатора.

В первой части были приведены общие теоретические сведения (на которые я буду ссылаться, по этому, рекомендую их просмотреть, если еще не успели), а так же представлен флаг трассировки 8780 который устанавливает timeout в очень большое число, фактически отключая его.

 
Осталось несколько других механизмов управляющих тем, когда происходит оптимизация и какие учитываются альтернативы:

  • Timeout
  • Cost Based Pruning Factor
  • Discarding


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

 
formats

Оптимизатор без границ (ч.1)

На недавнем мероприятии SQL Saturday 178, мне задали вопрос, можно ли сделать так, чтобы оптимизатор не прекращал оптимизацию, когда посчитает что уже нашел хороший план или наступит таймаут, а исследовал все альтернативы. Я ответил, что документированных средств нет, либо я о таких не знаю. И это действительно так, однако, возможно есть какие-то недокументированные флаги трассировки, которыми можно влиять на этот процесс. Я решил провести небольшое исследование и в этой заметке расскажу о его результатах.

Забегая вперед, сразу сообщу об итогах исследования, для тех кому не важны технические подробности, а важны выводы. Оказывается, действительно можно сделать так, чтобы оптимизатор продолжал поиски «до упора», но вероятность, что он действительно найдет гораздо более удачный план невелика. Это логично, иначе, если бы оптимизатор очень часто «недооптимизировал» запросы, прекращая поиски раньше положенного, то следовало бы поменять механизм определения того самого момента, когда считается, что искать план дальше не имеет смысла. Между тем, оптимизатор довольно неплохо справляется со своей задачей, а когда не справляется, причина очень часто кроется не в самом оптимизаторе, а в том с чем ему приходится работать (неактуальная статистика, плохо написанный код и т.д.). Хотя, ради справедливости, стоит сказать, что бывают случаи, когда причина в самом оптимизаторе.

Далее, я расскажу о том, как заставить оптимизатор отбросить ограничения и продолжать оптимизацию до конца.

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

 
Теги:, , ,
formats

SQL Saturday #178 Moscow – Inside Query Optimizer

Всем добрый день, как и обещал, выкладываю материалы своего доклада на SQL Saturday.
Выражаю благодарность всем организаторам, на мой взгляд все прошло хорошо (несмотря на проверку пожарной безопасности =)).
К сожалению, не смог присутствовать на всех докладах, на которых хотелось бы, но там где присутствовал — было здорово.
И самое главное, спасибо всем пришедшим, без вас ничего бы не получилось!
 
SQLSaturday178 — Inside Query Optimizer (~ 900 KB)

 
formats

isnumeric selectivity estimation bug (en)

Some time ago on one of the forums there was a question, about why adding to the query where clause a condition «isnumeric(column)=0», makes query very slow.
I did some investigations and that lead me to some interesting results.
Читать дальше…

 
formats

Ошибка вычисления селективности для предикатов с isnumeric

Недавно на одном из форумов был задан вопрос о том, почему при добавлении в запрос условия isnumeric(column)=0, запрос начинает выполняться очень медленно. Изучение этой ситуации привело к интересным результатам.
Читать дальше…

 
formats

RowGoal и неравномерное распределенных данных

На написание этой заметки меня подвиг доклад Алексея Эксаревского на 24 hours of PASS про наиболее часты причины ошибок в оценке кардинальности. Те, кто не видел этот доклад могут ознакомиться с ним на techdays.

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

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

RowGoal – это механизм оптимизатора, который позволяет основываясь на заранее известном числе строк, которые необходимо получить (например в запросе есть предложение Top N), ограничить число строк для обработки в более ранних операторах. Казалось бы, если мы заранее знаем число строк, то это позволит выбрать лучший план. И, как правило, это так, однако, при некотором особенном распределении данных, этот механизм может мешать.

Рассмотрим механику более подробно.

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

 
formats

Оптимизатор (недокументированное): Отключить правила преобразования в отдельном запросе

Многие, кто интересуется внутренним устройством оптимизатора, уже наверняка знают, что такое правила преобразования и то, что их можно отключить в сессии при помощи dbcc ruleoff/ruleon. В этой короткой заметке мы посмотрим на недокументированный хинт, который позволяет отключать правила преобразования в отдельно взятом запросе.

Прим:
Те, кто не знают про правила преобразования, но интересуются, могут обратиться к моему предыдущему циклу заметок, части Оптимизатор (ч.2): Optimization: Trivial Plan Optimization.  Если вкратце, речь идет о том, что оптимизатор в процессе преобразования запроса в план, использует правила преобразования. Их довольно много, набор изменяется, некоторые правила удаляются, расширяются и неизменно добавляются, в целом количество увеличивается от версии к версии. Получить их можно запросив представление sys.dm_exec_query_transformation_stats.

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