SomewhereSomehow's Notes


Sql Server 2014 CTP Columnstore

Картинка с другого сайта.
Вашему вниманию представляется обзорный доклад на тему колоночных индексов в SQL Server 2014 CTP2.
Доклад касается CTP, т.е preview — и к релизу, что-то может измениться.
Можно посмотреть на сайте techdays или скачать со skydrive.
добавлено: 10 дек 13 просмотры: 536, комментарии: 0



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

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



Good Enough Plan

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



Cardinality Estimation Framework 2014 First Look

Картинка с другого сайта.

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

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

Пока же, я хочу поделиться с читателями результатами своих собственных экспериментов.

Читать дальше...
добавлено: 08 дек 13 просмотры: 268, комментарии: 0



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

Продолжая разговор, об упрощении дерева запроса, начатый в предыдущем посте, рассмотрим еще один интересный случай упрощения.
Читать дальше
добавлено: 25 июл 13 просмотры: 428, комментарии: 0



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

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



Columnstore Batch Execution и Compute Scalar

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



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

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

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


Осталось несколько других механизмов управляющих тем, когда происходит оптимизация и какие учитываются альтернативы:
  • Timeout
  • Cost Based Pruning Factor
  • Discarding
    Читать дальше
  • добавлено: 11 дек 12 просмотры: 958, комментарии: 3



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

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

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

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

    Далее, я расскажу о том, как заставить оптимизатор отбросить ограничения и продолжать оптимизацию до конца.
    Читать дальше
    добавлено: 06 дек 12 просмотры: 1087, комментарии: 0



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

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