Skip to content

Начинаем чтение планов выполнения: оператор с наибольшей стоимостью

Пересказ статьи Grant Fritchey. GETTING STARTED READING EXECUTION PLANS: HIGHEST COST OPERATOR


Читать планы выполнения в SQL Server довольно тяжело. Много чего нужно узнать и понять. Ранее я очертил основные моменты, с которых я начинаю изучение плана выполнения. Однако только этого недостаточно. Я хочу продолжить объяснение немного глубже, почему и как эти базовые шаги помогут вам начать читать планы выполнения. Вместо обсуждения первого оператора поговорим сначала о операторах, имеющих максимальную стоимость. Continue reading "Начинаем чтение планов выполнения: оператор с наибольшей стоимостью"

Планы выполнения, на что следует обращать внимание?

Пересказ статьи Grant Fritchey. EXECUTION PLANS, WHAT DO I LOOK AT?


Возник вопрос - какие самые важные вещи, на которые нужно обращать внимание в запросе. Я осознал, что на самом деле не писал об этом. Есть несколько мест, которые позволяют мне сразу узнать довольно много, где в плане заложены проблемы. При взгляде на эти вещи вы не обязательно найдете ответ, но узнаете о наличии проблемы. Как это мне свойственно, я не смог ограничиться 5-ю, поэтому вот 6 таких вещей: Continue reading "Планы выполнения, на что следует обращать внимание?"

Когда Intellisense не видит ваш новый объект

Пересказ статьи Andy Galbraith. Toolbox - When Intellisense Doesn't See Your New Object


Я работал над новым SQL заданием (SQL job), и частью задания было добавление нескольких новых таблиц в нашу базу данных обслуживания DBA для хранения данных задания. Я создал запросы мониторинга, а затем - новые таблицы для хранения этих данных. Continue reading "Когда Intellisense не видит ваш новый объект"

Новости за 2021-02-20 - 2021-02-26

§ Благодаря Kursist, пофиксили старый баг, связанный с проверкой некоторых задач с отрицательными номерами. Рекомендуем проверить свои решения.


§ Под номерами 306 и 235 опубликованы две однобальные задачи от Baser.

Continue reading "Новости за 2021-02-20 - 2021-02-26"

Любопытный случай сортировки с Top N

Пересказ статьи DANIEL HUTMACHER. The curious case of the Top N Sort


Просматривая сессию саммита PASS 2017 Брента Озара на Youtube, я узнал, что оператор сортировки Top N в SQL Server резко меняет свое поведение в зависимости от того, сколько строк вы хотите получить из TOP.

Рассмотрим следующий пример запроса в базе данных Stack Overflow:
Continue reading "Любопытный случай сортировки с Top N"

Блокировки, блокирование и тупики в SQL Server

Пересказ статьи John McCormack. Locks, blocks and deadlocks in SQL Server


Терминология имеет значение: Locks, blocks и deadlocks


Я потерял счет тому, сколько раз мне говорили о существовании тупика в базе данных, но стоило проверить и посмотреть, так никаких тупиковых ситуаций не обнаруживалось. В этом сценарии обычно они пытались описать блокировку. Администратору баз данных или разработчику важно знать различие между блокировками (Lock), блокированием (block) и тупиками (deadlock).
Continue reading "Блокировки, блокирование и тупики в SQL Server"

3 лучших совета для написания более быстрых представлений SQL

Пересказ статьи Edwin Sanchez. Top 3 Tips You Need to Know to Write Faster SQL Views


Друг или враг? Представления SQL Server были предметом жарких дебатов, когда я только начал использовать SQL Server. Говорилось, что это плохо, поскольку медленно. Но как обстоят дела сейчас?
Continue reading "3 лучших совета для написания более быстрых представлений SQL"

Агрегатные функции

Пересказ статьи Hugo Kornelis. Aggregate Functions


Введение


В настоящее время SQL Server поддерживает три оператора, которые могут вычислять агрегаты: Hash Match, Stream Aggregate и Window Aggregate. Все эти операторы используют один и тот же базовый принцип поддержки внутренних счетчиков по мере обработки строк, так что финальное значение этих внутренних счетчиков и является ожидаемым значением.
Continue reading "Агрегатные функции"

Некоторые преобразования агрегата ANY нарушаются

Пересказ статьи Paul White. Some ANY Aggregate Transformations are Broken


Агрегат ANY - это не то, что мы можем непосредственно написать на Transact SQL. Это только внутренняя функция, используемая оптимизатором запросов и движком.

Я сам очень люблю агрегат ANY, поэтому был несколько огорчен, узнав, что он нарушается довольно фундаментальным образом. Говоря «нарушается», я имею в виду получение неправильных результатов.

Здесь я рассмотрю два конкретных случая, где обычно присутствует агрегат ANY, для демонстрации проблемы неправильных результатов и предложу при необходимости обходные пути.
Continue reading "Некоторые преобразования агрегата ANY нарушаются"

Недокументированные планы запросов: агрегат ANY

Пересказ статьи Paul White. Undocumented Query Plans: The ANY Aggregate


Как обычно, начнем с тестовой таблицы:

CREATE TABLE #Example
(
pk numeric IDENTITY PRIMARY KEY NONCLUSTERED,
col1 sql_variant NULL,
col2 sql_variant NULL,
thing sql_variant NOT NULL,
);

Continue reading "Недокументированные планы запросов: агрегат ANY"

Последнее слово о хранилище для DATETIME2

Пересказ статьи Randolph West. The final word on storage for DATETIME2


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