Esc (esc) wrote,
Esc
esc

Парашютист Cardinality Estimator, сволочь, задолбал!

SQL Server сильно оптимизировал свой cardinality estimator. Это такая штука, которая в оптимизаторе плана исполнения SQL-запроса отвечает за оценку, сколько записей вернёт запрос. Если записей ожидается много, запрос будет выполняться одним методом, если побольше - то уже другим. Грубо говоря, если вы уронили пуговицу, её проще поднять рукой. А если 200 - то уже надо идти за веником.

Так вот, не знаю, зачем я это объяснял, потому что непрограммистам дальше всё равно будет непонятно.

Эти микроредиски заявили, что их эстиматор теперь "предполагает", что таблицы в запросе связаны между собой, даже когда этого из структуры базы не следует. Фактически же, они теперь наткнувшись на любое дополнительное условие, связывающее таблицы, сильно урезают Estimated Number of Rows. Иногда это верно. Но не всегда же! И что делать, если у тебя возвращается 20 миллионов записей, а эстиматор в своей новообретённой мудрости ожидает всего 10 тысяч и начинает пестрить nested loop-ами и lazy spool-ами, совершенно неясно. Более того, нигде никаких рекомендаций по преодолению. Я опять что ли одинок в своей проблеме?

Точнее рекомендация есть - включить compatibility mode с 2012 версией и наслаждаться старым эстиматором. Но это же не настоящее решение. И в ряде случаев новый работает хорошо. Есть конечно ещё замечательный вариант - перепроектировать те части базы, где возникают подобные проблемы. Непонятно пока, как. И непонятно, кто мне это даст сделать. Ибо части не мои, я из них только читаю.
Tags: программизмы
Subscribe

  • (без темы)

    Вчера я видел победителя. Я не придумал, в чем именно соревнование, но человек с двумя масками под носом обязан быть победителем.

  • (без темы)

    Из моих наушников на работе вылетела моль, когда я взял их в руки. Органик они у меня, что ли?

  • (без темы)

    Новая реальность американского офиса. Сходить в туалет, чтобы подышать воздухом.

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 8 comments