Показаны сообщения с ярлыком T-SQL. Показать все сообщения
Показаны сообщения с ярлыком T-SQL. Показать все сообщения

14.10.24

CASE Subqueries in BETWEEN and CASE Statements

Автор: Craig Freedman Subqueries in BETWEEN and CASE Statements

Рассмотрим следующий запрос:

CREATE TABLE T1 (A INT, B1 INT, B2 INT)

CREATE TABLE T2 (A INT, B INT)


SELECT *

FROM T1

WHERE (SELECT SUM(T2.B) FROM T2 WHERE T2.A = T1.A) BETWEEN T1.B1 AND T1.B2

26.9.24

Новое в SQL Server 2022: улучшения в sys.dm_exec_query_statistics_xml

Автор: Vivek Janakiraman Unleashing SQL Server 2022: Enhancements to sys.dm_exec_query_statistics_xml

Одним из улучшений в SQL Server 2022 является дальнейшее совершенствование динамического административного представления (DMV)  sys.dm_exec_query_statistics_xml. Этот DMV предоставляет подробную статистику выполнения запросов, что очень полезно для повышения их производительности и для оптимизации.

3.7.24

Новое в SQL Server 2022: tempdb Contention Enhancements with Page Latch Concurrency

https://www.mssqltips.com/sqlservertip/8025/sql-server-2022-tempdb-contention-enhancements/

Автор Simon Liew

Tempdb используется в качестве промежуточного хранилища и репозитория метаданных, и все эти объекты в SQL Server могут быть источником высокой нагрузки, а также приводить к конфликтам и конкуренции в критически-важных для работы сервера местах. Проявление этих негативных факторов возможно при использовании временных таблиц, триггеров, промежуточной материализации данных для спулов, курсоров, сортировок, хэш-соединений и больших объектов (LOB), и это лишь наиболее очевидные источники проблем. Ещё одной распространённой проблемой является конкуренция за страницы системных объектов Global Allocation Map (GAM) и Shared Global Allocation Map (SGAM), это особенно актуально для некоторых видов нагрузки с высоким уровнем параллелизма.

SQL Server 2022 привнёс множество впечатляющих новых функций, некоторые из которых более широко известны, чем другие. Одно из менее известных новшеств — улучшение параллелизма блокировки системных страниц.

В SQL Server 2022 страницы GAM практически лишены кратких блокировок (latch-free), и это меняет правила игры для тех типов рабочей нагрузки, где это порождало проблемы и с которыми было нелегко справиться. Однако эта функция недоступна в более ранних версиях SQL Server, поэтому для получения выгоды от этого улучшения необходимо выполнить обновление версии.

14.5.24

Conversion and Arithmetic Errors

Craig Freedman's SQL Server Blog

https://learn.microsoft.com/en-us/archive/blogs/craigfr/conversion-and-arithmetic-errors

Давайте посмотрим на простой запрос:

CREATE TABLE T1 (A INT, B CHAR(8))
INSERT T1 VALUES (0, '0')
INSERT T1 VALUES (1, '1')
INSERT T1 VALUES (99, 'Error')
SELECT T1.A, CONVERT(INT, T1.B) AS B_INT FROM T1

Невозможно преобразовать строку «Error» в целое число, поэтому неудивительно, что этот запрос завершается ошибкой преобразования:

A           B_INT
----------- -----------
1           1

Msg 245, Level 16, State 1, Line 1
Conversion failed when converting the varchar value 'Error   ' to data type int.

25.4.24

Hash Join

Автор оригинала: Craig Freedman

По материалам статьи Craig Freedman: Hash Join

Когда Вы встречаете случай использования оператора Hash Join (хэш-соединение), это говорит о наличии тяжелого запроса. В отличие то соединения Nested Loops Join, которое хорошо для относительно маленьких наборов данных, и от соединения Merge Join, которое помогает при умеренных размерах наборов данных, хэш-соединение превосходит другие типы соединений при необходимости соединения огромных наборов данных. Хэш-соединения распараллеливается и масштабируется лучше любого другого соединения и сильно выигрывает при большой производительности информационных хранилищ (я вернусь к обсуждению параллельного выполнения запросов в следующей серии статей).

23.4.24

Функции ранжирования: RANK, DENSE_RANK, and NTILE

Автор оригинала: Craig Freedman


В предыдущей статье обсуждалась функция ROW_NUMBER. Сейчас же мы рассмотрим другие функции ранжирования: RANKDENSE_RANK и NTILE. Начнем с RANK и DENSE_RANK. Эти функции по функциональности и реализации аналогичны ROW_NUMBER. Разница заключается в том, что ROW_NUMBER присваивает уникальные возрастающие значения каждой строке, не обращая внимания на повторение значений выражения сортировки, тогда как RANK и DENSE_RANK присваивают одинаковые значения строкам с одинаковым значением выражения сортировки. Разница между функциями RANK и DENSE_RANK заключается в том, как значения присваиваются строкам.

17.4.24

Nested Loops Join


Автор оригинала: Craig Freedman

По материалам статьи Craig Freedman: Nested Loops Join

SQL Server поддерживает три физические оператора соединений: соединение вложенных циклов, соединение слиянием и хэш-соединение. В этой статье я опишу соединение вложенных циклов - Nested Loops Join (или NL-соединение, для краткости).

27.3.24

Ranking Functions: ROW_NUMBER

 Автор оригинала: Craig Freedman


Четыре функции ранжирования: ROW_NUMBER, RANK, DENSE_RANK и NTILE появились в SQL Server 2005 и отличаются от обычных скалярных функций тем, что результат, который они выдают для строки, зависит от других строк выборки. От агрегатных функций они отличаются тем, что возвращают только одну строку для каждой строки на входе, т.е. они не объединяют набор строк в одну. В этой статье мы рассмотрим ROW_NUMBER — самую простую из всех функций ранжирования.

20.2.24

Оператор распараллеливания (Exchange)

По материалам статьи Craig Freedman: The Parallelism Operator (aka Exchange)


Перевод Ирины Наумовой.

Как я уже писал в статье Введение в распараллеливание исполнения запроса , итератор параллелизма (или обмена - Exchange operator) фактически привносит в процесс выполнения запроса возможность распараллеливания задачи. Оптимизатор помещает оператор обмена в том месте, где происходит разделение на несколько потоков, и оператор обмена перемещает строки между потоками.

15.2.24

Рекурсивные CTE

Автор оригинала: Craig Freedman


Одним из наиболее важных применений CTE являются рекурсивные запросы, для которых CTE является фактически единственным средством реализации. Как отмечалось в предыдущей статье, в Books Online есть несколько примеров использования CTE, включая и рекурсивный CTE. Тут мы будем использовать эти примеры из Books Online, используя один из ранних образов базы данных AdventureWorks.

Рекурсивные CTE все сделаны по одному шаблону. Тело CTE представляет собой запрос с UNION ALL, который объединяет один или несколько подзапросов называемых закреплёнными элементами, которые заполняют набор результатов. Кроме закреплённых элементов есть один или несколько рекурсивных подзапросов, называемых рекурсивными элементами, которые возвращают оставшуюся часть результирующего набора. Эти рекурсивные подзапросы ссылаются на сам рекурсивный CTE. Получается, у нас есть один или несколько закреплённых подзапросов и один или несколько рекурсивных подзапросов, объединенных UNION ALL. 

13.2.24

Parallel Nested Loops Join

По материалам статьи Craig Freedman: Parallel Nested Loops Join


Перевод Ирины Наумовой.

SQL Server распараллеливает Nested Loops Join, распределяя в случайном порядке строки внешней таблицы по потокам вложенных циклов. В данном случае, речь идёт о строках, которые поступают первыми, и мы их видим вверху, на графическом плане запроса. Например, если на входе соединения вложенных циклов имеется два потока, каждый поток получит приблизительно половину строк. Потоки проходятся по строкам внутренней таблицы соединения (то есть, по строкам, поданным во вторую очередь, мы их видим ниже в плане запроса), точно по такому же алгоритму, как это было бы реализовано в сценарии с последовательной обработкой строк. Таким образом, для каждой обрабатываемой потоком строки внешней таблицы, поток обеспечивает соединение своей внутренней таблицы, используя эту строку в качестве источника коррелированных параметров. Это позволяет потокам работать независимо друг от друга. При этом для внутренней таблицы соединения вложенных циклов SQL Server не добавляет операторы параллелизма и работу с ней не распараллеливает.

30.1.24

Common Table Expressions


Автор оригинала: Craig Freedman

Common Table Expressions (CTE) или обобщенное табличное выражение, впервые появилось в версии SQL Server 2005, и это простой способ разбить сложный запрос T-SQL на несколько запросов, что придаёт больше гибкости и управляемости. CTE во многом очень похожи на представления. В отличие от представления, которое можно создать один раз и потом использовать в других запросах, CTE привязан только к одному запросу. В Books Online есть несколько отличных примеров CTE, включая и рекурсивные CTE. Вместо того, чтобы продемонстрировать их устройство на своих примерах, в этой статье будут использоваться примеры из Books Online. Чтобы попробовать эти примеры у себя, используйте один из ранних образов базы данных AdventureWorks.

25.12.23

Агрегат WITH CUB

Автор оригинала: Craig Freedman


В предыдущей статье говорилось о том как  работает агрегат WITH ROLLUP. В этой статье мы рассмотрим, как реализована агрегация WITH CUBE. Как и предложение WITH ROLLUP, предложение WITH CUBE позволяет просчитать несколько «уровней» агрегации в одном операторе. Разницу между двумя этими агрегатами давайте рассмотрим на примере. Мы будем использовать те же вымышленные данные о продажах, что и в прошлый раз.

14.12.23

Новое в SQL Server 2022: изменения в функции ISJSON

Автор оригинала: Daniel Calbimonte

SQL Server поддерживает работу с данными типа JSON, и имеет для этого необходимый функционал, в который входит функция ISJSON, для проверки, соответствует ли значение типу JSON. Она вернет 0, если это не правильный JSON, и 1, если JSON правильный. Если JSON содержит недопустимые данные, функция помогает это обнаружить.

26.9.23

Новое в SQL Server 2022: опция WAIT_AT_LOW_PRIORITY для создания индексов

Автор оригинала: Daniel Calbimonte

Эта новинка в SQL Server 2022 позволяет создавать, изменять и перестраивать индексы, и при этом пережидать перед получением доступа к ресурсу другие задачи, чтобы снизить конфликты за этот ресурс, которые могут возникать во время обслуживания индексов.

24.5.23

Некоторые из "хинтов" настройки SQL Server

По материалам статьи Raghu Donepudi: Some "Hints" for Mastering SQL Tuning

Перевод Алексея Сафонова

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

26.4.23

Новое в SQL Server 2022: работа с time series (временные ряды)

Данные временных рядов — это набор значений, упорядоченных так, как они появляются и поступают для обработки. В отличие от транзакционных данных SQL Server, которые не зависят от времени и могут часто обновляться, данные временных рядов обычно записываются один раз и, если обновляются, то крайне редко.

Вот несколько примеров данных временных рядов: цены на акции, телеметрия от датчиков, счётчики производительности SQL Server (например, утилизация ЦПУ, памяти, устройств ввода-вывода и сети).

25.4.23

Tips for DBA: sp_create_plan_guide позволяет администратору менять план запроса

В статье речь пойдёт о системной хранимой процедуре sp_create_plan_guide, которая включена в поставки SQL Server Enterprise Edition и Standard Edition.

Эта процедура описана в электронной документации в разделе, посвящённом производительности запроса. Её назначение сводится к тому, что бы, цитирую: Эта процедура может использоваться, когда нельзя или не нужно напрямую менять текст запроса. Руководства планов полезны, когда небольшое подмножество запросов в приложении базы данных стороннего разработчика выполняются не так, как ожидается.

Tips for DBA: Searching unused indexes

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

Tips for DBA: Missing indexes recommendations

Вы, наверное, уже заметили, какую полезную информацию об индексах и о статистике использования существующих и, как это не удивительно, не существующих индексов можно получить в SQL Server из системных динамических административных представлений. Особенно впечатляет эта информация, когда её видишь в виде пользовательского отчёта приборной панели производительности SQL Server, которую в качестве бесплатного дополнения к SQL Server Management Studio предлагает использовать Майкрософт.
Ниже представлен сценарий, который позволяет получить рекомендации по индексам, которых в обозримом прошлом недоставало базе данных, в контексте которой этот сценарий исполняется. Учтите, что сценарий в целях наглядности был упрощён, поэтому результирующие команды по созданию индексов, наверняка, будут содержать ошибки, т.к. тут не учитывается возможность отсутствия не относящихся к предикатам эквивалентности колонок, а также колонок, которые в индексе будут присоединёнными. Впрочем, эти ошибки легко устранимы, просто поищите лишние запятые перед запуском сценария, а также не забудьте удалить пустые инструкции INCLUDE.