Skip to content

Как узнать, что мой запрос достаточно хорош для рабочей системы?

Пересказ статьи Brent Ozar. How Do I Know If My Query Is Good Enough for Production?


Когда меня об этом спрашивают, вот что мне приходит в голову:

  • Сколько раз я собираюсь выполнять его? Это одноразовая задача, или он будет выполняться тысячи раз в секунду на главной странице популярного веб-сайта?

  • В какое время дня/недели он будет выполняться? Будут ли это пиковые нагрузки или нерабочее время?

  • Этот сервер обычно выполняет небольшие транзакции, или он является сервером для создания отчетов?

  • Удерживает ли мой запрос блокировки во время выполнения?


Продолжить чтение "Как узнать, что мой запрос достаточно хорош для рабочей системы?"

Пример курсора в SQL Server

Пересказ статьи Jeremy Kadlec. SQL Server Cursor Example


Проблема


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

Продолжить чтение "Пример курсора в SQL Server"
Категории: T-SQL

Индексы: когда селективность столбца не является обязательным требованием

Пересказ статьи Mike Byrd. Indexes: When Column Selectivity Is Not Always A Requirement


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

Продолжить чтение "Индексы: когда селективность столбца не является обязательным требованием"

Адаптивные соединения в SQL Server

Пересказ статьи Monica Rathbun. Adaptive Joins in SQL Server


SQL Server 2017 (уровень совместимости 140) внес много интеллекта в обработку запросов, формально известного как адаптивная обработка запросов, функциональности, которая улучшает производительность при рабочих нагрузках прямо из коробки без каких-либо изменений кода. Одной из введенных новинок являются адаптивные соединения (Adaptive Joins). При этой функциональности оптимизатор динамически выбирает оператор соединения во время выполнения; для этого используется пороговое число строк, на основании которого делается выбор между операторами соединения Nested Loop (вложенные циклы) и Hash Match (соединения при поиске совпадений в хеше). Этот переключатель оператора может выбрать лучший вариант и увеличить производительность ваших запросов без прикладывания рук.

Продолжить чтение "Адаптивные соединения в SQL Server"

Новости за 2020-11-07 - 2020-11-13

§ Выполнена следующая цепочка переносов:
306 -> 57 -> 6 -> 155 (обучающий этап). Благодарим qwrqwr за предоставленные решения.
Второй этап начинается теперь с задачи 6.
Проверьте актуальность своего сертификата!


Продолжить чтение "Новости за 2020-11-07 - 2020-11-13"

Что такое пакетный режим при построчном хранении в SQL Server?

Пересказ статьи Monica Rathbun. What is Batch Mode on Rowstore in SQL Server?


При уровне совместимости 150 как в SQL Server 2019, так и в Azure SQL Database, вы можете теперь использовать пакетный режим для привязанных к ЦП рабочих нагрузок аналитического типа, не требующий поколоночных индексов. Не требуется никаких действий для переключения в пакетный режим за исключением соответствующего уровня совместимости. У вас также есть возможность разрешать его с помощью конфигурационной опции уровня базы данных (как показано ниже), и вы можете хинтами отдельных запросов использовать или не использовать пакетный режим (тоже показано ниже). Если вы помните мою прошлую статью, то пакетный режим в сочетании с сжатием страниц существенно увеличивает производительность запроса. Эта функция, пакетный режим для построчного хранения (Batch Mode on Rowstore), позволяет всем операторам, включенным в пакетный режим, работать таким образом в SQL Server.
Продолжить чтение "Что такое пакетный режим при построчном хранении в SQL Server?"

Эй, это не моя сортировка!

Пересказ статьи Erik Darling. Hey, That’s Not My Sort!


Понимание плана


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

Как отключить Query Store...в случае крайней необходимости

Пересказ статьи Erin Stellato. How to Turn Off Query Store…in an emergency


Пытались ли вы когда-нибудь отключить Query Store (хранилище запросов) при возникновении проблемы, думая, что проблема может быть связана с Query Store, а оператор ALTER DATABASE был заблокирован? И тогда вы ничего другого не можете сделать как только ждать? Я да. Представьте себе моё возбуждение, когда я обнаружил, что команда SQL Server спрятала полезный черный ход во ВСЕХ версиях, которые поддерживают Query Store.
Продолжить чтение "Как отключить Query Store...в случае крайней необходимости"

Сканирование поколоночного индекса

Пересказ статьи Hugo Kornelis. Columnstore Index Scan


Введение


Columnstore Index Scan фактически не является оператором. Вы можете встретить его в графических планах выполнения SSMS (или других инструментов), но если вы посмотрите на лежащий в основе плана выполнения XML, то увидите, что это либо оператор Index Scan, либо Clustered Index Scan. Продолжить чтение "Сканирование поколоночного индекса"

Поиск в кластеризованном индексе (Clustered Index Seek)

Пересказ статьи Hugo Kornelis. Clustered Index Seek


Введение


Оператор Clustered Index Seek использует структуру кластеризованного индекса для эффективного поиска как отдельных строк (singleton seek), так и конкретных подмножеств строк (range seek). Поскольку кластеризованный индекс всегда содержит все столбцы таблицы, Clustered Index Seek является одним из наиболее эффективных приемов, который применяет SQL Server для поиска отдельных строк и небольших диапазонов при условии наличия фильтра, который может быть эффективно использован. Продолжить чтение "Поиск в кластеризованном индексе (Clustered Index Seek)"

Поиск в индексе (Index Seek)

Пересказ статьи Hugo Kornelis. Index Seek



Введение


Оператор Index Seek использует структуру некластеризованного индекса для эффективного поиска как отдельных строк (singleton seek), так и конкретных подмножеств строк (range seek). ( Когда SQL Server требуется прочитать отдельные строки или небольшие подмножества строк из кластеризованного индекса, он использует другой оператор: Clustered Index Seek).
Продолжить чтение "Поиск в индексе (Index Seek)"