Показаны сообщения с ярлыком Tips for DBA. Показать все сообщения
Показаны сообщения с ярлыком Tips for DBA. Показать все сообщения

17.6.25

Новое в SQL Server 2025: Сжатие резервных копий алгоритмом Zstandard

В SQL Server 2025 добавлена ​​новая функция резервного копирования, позволяющая использовать для сжатия алгоритм Zstandard (ZSTD), который, как было анонсировано, будет работать лучшие, чем стандартный MS_XPRESS, и при этом его будет проще настраивать, чем Intel QAT. Алгоритм сжатия ZSTD доступен начиная с предварительной версии SQL Server 2025 (17.x).

30.5.25

Memory Grant

Автор: Jay Choe, Microsoft SQL Server Engine. Understanding SQL server memory grant

В этой статье описывается, как в Microsoft SQL Server организовано предоставление запросам памяти. Выделенную запросам память (эту область памяти называют рабочим буфером запросов – «Query Work Buffer») сервер использует для временного хранения данных при сортировке и соединении строк. Такое предоставление памяти имеет название «Grant», потому что сервер требует, чтобы для запросов происходило резервирование памяти перед её фактическим использованием. Такое резервирование повышает надежность исполнения запросов для нагруженных серверов, поскольку запрос с зарезервированной памятью скорее всего не выйдет за пределы памяти сервера во время исполнения, и сервер не позволит одному запросу забрать всю память. В статье я опишу, как SQL Server оценивает потребность запроса в памяти и как он управляет объёмом выделяемой памяти, когда за ресурс конкурируют несколько запросов.

16.5.25

Подробнее о неявных преобразованиях

Автор: Craig Freedman More on Implicit Conversions

Меня попросили прокомментировать алгоритм, который SQL Server использует для выбора неявных преобразований. Когда SQL Server сталкивается в выражении с несовпадающими типами, он может выполнить запрос с неявным преобразованием или может завершить запрос ошибкой. Прежде чем углубляться в сценарий неявного преобразования, давайте кратко рассмотрим случай с ошибкой. Если неявное преобразование невозможно, возможны два варианта ошибки. Если оба типа данных несовместимы (то есть, если между двумя типами не допускается преобразование, неявное или явное), SQL Server сгенерирует следующую ошибку:

DECLARE @a INT
DECLARE @b DATE
SET @a = @b

Msg 206, Level 16, State 2, Line 3
Operand type clash: date is incompatible with int

Накопительный пакет обновления 19 для SQL Server 2022 - KB5054531

SQL Server 2022 — Версия: 16.0.4195.2

Описание: KB5054531

Скачать: SQLServer2022-KB5054531-x64.exe

Дата выпуска: 15 мая 2025 г.

25.4.25

Неявные преобразования (Implicit Conversions)

Автор: Craig Freedman Implicit Conversions

В нескольких статьях я уже показывал, как явные преобразования могут приводить к ошибкам. В этой статье рассмотрим некоторые проблемы, связанные с неявными преобразованиями. SQL Server добавляет неявные преобразования, когда в одном выражении запроса используются колонки, переменные и/или параметры с разными (но совместимыми) типами данных. Например, если нужно сравнить колонки с типами INT и FLOAT, INT необходимо преобразовать в FLOAT. Если вы напишете "C_INT = C_FLOAT", SQL Server перепишет это выражение как "CONVERT (FLOAT, C_INT) = C_FLOAT".

21.4.25

Новое в SQL Server 2022: CDC Extended Events

Автор: Mukesh Kumar - MICROSOFT Monitoring CDC using Extended Events in SQL Server 2022

В этой статье очень подробно описывается, как максимально полно контролировать и оперативно устранять проблемы в работе и производительности Change Data Capture (CDC), если использовать сбор расширенных событий xEvents. За работой CDC можно наблюдать с помощью двух расширенных событий CDC, которые появились в SQL Server 2022:

  • repl_logscan_session
  • cdc_cleanup_job_status

28.3.25

Maximum Row Size and Query Hints

Автор: Craig Freedman Maximum Row Size and Query Hints

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

CREATE TABLE T (A INT, B CHAR(8000), C CHAR(8000))

Msg 1701, Level 16, State 1, Line 1

Creating or altering table 'T' failed because the minimum row size would be 16011, including 7 bytes of internal overhead. This exceeds the maximum allowable table row size of 8060 bytes.

Какое же отношение ограничение размера записи имеет к подсказкам оптимизатору?

11.3.25

Index Rebuilds Make Even Less Sense with ADR & RCSI

Автор: Brent Ozar Index Rebuilds Make Even Less Sense with ADR & RCSI

Ускоренное восстановление базы данных (Accelerated Database Recovery - ADR) — это новая функция базы данных в SQL Server 2022, которая делает откат транзакций практически мгновенным. Без ADR при изменении записи SQL Server копирует старые значения в журнал транзакций и обновляет строку по месту. Если вы откатываете эту транзакцию, SQL Server должен извлечь старые значения из журнала транзакций, а затем применить их к записи на том же месте. Чем больше строк изменения затронули, тем больше времени займет эта транзакция. Когда у базы данных SQL Server включена ADR, в таблицу записывается новая версию записи, а старая версия остаётся на прежнем месте. Как вы догадываетесь, хранение нескольких версий строки внутри одной таблицы наверняка приведёт к проблемам с их хранением: размер нашей таблицы будет быстро увеличиваться. Однако проблема еще масштабнее, и она начинается с самого начала, когда мы ещё загружаем данные.

18.2.25

Подразумеваемые (Implied) предикаты

Автор: Craig Freedman Implied Predicates and Query Hints

В этой статье будут рассмотрены некоторые странности с предикатами в планах запросов. Рассмотрим следующую тривиальную схему и запрос:

CREATE TABLE T1 (A INT, B INT)

CREATE TABLE T2 (A INT, B INT)

 

SELECT *

FROM T1 INNER JOIN T2 ON T1.A = T2.A

WHERE T1.B = 0

OPTION (HASH JOIN)

Как и задумывалось, этот запрос будет выполняться со следующим планом:

  |--Hash Match(Inner Join, HASH:([T1].[A])=([T2].[A]), RESIDUAL:([T2].[A]=[T1].[A]))

       |--Table Scan(OBJECT:([T1]), WHERE:([T1].[B]=(0)))

       |--Table Scan(OBJECT:([T2]))

На самом деле, этот запрос получит такой план с подсказкой или без нее. Теперь давайте внесем небольшое изменение в предложение WHERE и посмотрим, что произойдет:

SELECT *

FROM T1 INNER JOIN T2 ON T1.A = T2.A

WHERE T1.A = 0

OPTION (HASH JOIN)

Теперь этот запрос выдает сообщение об ошибке:

Msg 8622, Level 16, State 1, Line 1

Query processor could not produce a query plan because of the hints defined in this query. Resubmit the query without specifying any hints and without using SET FORCEPLAN.

6.2.25

Накопительный пакет обновления 17 для SQL Server 2022 - KB5048038

SQL Server 2022 — Версия: 16.0.4175.1

Описание: KB5048038

Скачать: SQLServer2022-KB5048038-x64.exe

Дата выпуска: 16 января 2025 г.

Накопительный пакет обновления 30 для SQL Server 2019 - KB5046365

SQL Server 2019 — версия: 15.0.4415.2

Описание: KB5049235 

Скачать: SQLServer2019-KB5049235-x64.exe

Дата выпуска: 12 декабря 2024 г.

Накопительный пакет обновления 29 для SQL Server 2019 - KB5046365

SQL Server 2019 — версия: 15.0.4405.4

Описание: KB5046365 

Скачать: SQLServer2019-KB5049235-x64.exe

Дата выпуска: 31 октября 2024 г.

Исправлени безопасности для SQL Server: 2016 SP3; 2017 CU31; 2019 CU29; 2022 CU15

KB5046856. Описание обновления для системы безопасности для SQL Server 2016 с пакетом обновления 3 (SP3) Azure Connect Feature Pack: 12 ноября 2024 г.
Версия: 13.0.7050.2

KB5046858. Описание обновления для системы безопасности для SQL Server 2017 CU31: 12 ноября 2024 г.
Версия: 14.0.3485.1

KB5046860. Описание обновления для системы безопасности для SQL Server 2019 CU29: 12 ноября 2024 г.
Версия: 15.0.4410.1

KB5046862. Описание обновления для системы безопасности для SQL Server 2022 CU15: 12 ноября 2024 г.
Версия: 16.0.4155.4

Исправление безопасности для GDR SQL Server 2016/17/19/22 - 12 ноября 2024 г.

KB5046855. Описание обновления для системы безопасности для GDR SQL Server 2016 с пакетом обновления 3 (SP3): 12 ноября 2024 г.
Версия: 13.0.6455.2

KB5046857. Описание обновления для системы безопасности для GDR SQL Server 2017 г.: 12 ноября 2024 г.
Версия: 14.0.2070.1

KB5046859. Описание обновления для системы безопасности для GDR SQL Server 2019 г.: 12 ноября 2024 г.
Версия: 15.0.2130.3

KB5046861. Описание обновления для системы безопасности для GDR SQL Server 2022 г.: 12 ноября 2024 г.
Версия: 16.0.1135.2

Накопительный пакет обновления 16 для SQL Server 2022 - KB5048033

SQL Server 2022 — Версия: 16.0.4165.4

Описание: KB5048033

Скачать: SQLServer2022-KB5048038-x64.exe

Дата выпуска: 14 ноября 2024 г.

OPTIMIZED Nested Loops Joins

Автор: Craig Freedman OPTIMIZED Nested Loops Joins

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

3.2.25

Optimizing I/O Performance by Sorting – Part 2

Автор: Craig Freedman Optimizing I/O Performance by Sorting – Part 2

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