Skip to content

Переосмысление явных транзакций SQL

Пересказ статьи Jared Westover. Rethinking SQL Explicit Transactions


Недавно разработчик Microsoft SQL Server усомнился в моем давнем совете всегда использовать явные транзакции, по крайней мере, при выполнении операторов обновления, вставки и удаления. Я годами проповедовал, что вы должны использовать их почти для любого оператора, изменяющего строку в целях обеспечения целостности данных. Прежде чем пересмотреть свое решение, я бы высказался за их использование для обновления одной строки в единственной таблице. Он спросил, а должен ли? Тщательно обдумав это, я сказал нет, вы не должны. Этот простой вопрос заставил меня переосмыслить, почему я выступаю за явные транзакции. Продолжить чтение "Переосмысление явных транзакций SQL"
Категории: T-SQL

Что такое фрагментация индекса и коэффциент заполнения индекса в SQL Server?

Пересказ статьи Joe Billingham. What are SQL Server Index Fragmentation and Index Fill Factor


Что такое фрагментация индекса и как она происходит?


Важно знать, что данные SQL Server хранятся на страницах данных, каждая из которых имеет размер 8Кб. Имеется два типа фрагментации, оба являются результатом того, что эти страницы используются не так эффективно, как могло бы быть.

Когда вы вставляете или обновляете данные на странице, которая уже заполнена, SQL Server создает новую страницу. Информация из исходной страницы будет разбиваться 50/50, при этом половина данных вместе с новой записью будет добавляться на новую страницу. Таким образом в конце страницы (страниц) появляется пустое пространство. Это пустое пространство, которое называется внутренней фрагментацией, также возникает при удалении данных со страницы. На диаграмме показано, как это происходит: Продолжить чтение "Что такое фрагментация индекса и коэффциент заполнения индекса в SQL Server?"

Хранимые процедуры SQL: входные и выходные параметры, типы, обработка ошибок и кое-что еще

Пересказ статьи Aubrey Love. SQL Stored Procedure Input and Output Parameters, Types, Error Handling, Security and more


Если вы слышали о хранимых процедурах в SQL Server, но точно не знаете, что это такое и как это использовать наилучшим образом, то эта статья даст вам необходимую информацию и позволит начать работать с хранимыми процедурами.

Здесь вы узнаете, что из себя представляет хранимая процедура, как ее создать и применить. Мы поговорим о параметрах хранимой процедуры, входных и выходных, и вкратце обсудим обработку ошибок и безопасность для хранимых процедур. Продолжить чтение "Хранимые процедуры SQL: входные и выходные параметры, типы, обработка ошибок и кое-что еще"
Категории: T-SQL

Запрос к единственной таблице может использовать несколько индексов

Пересказ статьи Daniel Hutmacher. Querying a single table can use multiple indexes


Может ли SQL Server собрать вместе два различных индекса в запросе к единственной таблице, а не просто взять не вполне оптимальный кластеризованный индекс для сканирования? Короткий ответ - да, в довольно узком диапазоне условий. Продолжить чтение "Запрос к единственной таблице может использовать несколько индексов"

Изменения языка T-SQL в SQL Server 2022. Часть 2

Пересказ статьи FrankDolan77. T-SQL Language Changes in SQL Server 2022 Part 2


Эта статья является второй частью, которая также посвящена изменениям в T-SQL, которые появились в этой новой версии платформы баз данных.

В предыдущей статье обсуждались DISTINCT FROM, DATE_BUCKET, GENERATE_SERIES, GREATEST/LEAST, STRING_SPLIT и DATETRUNC. Здесь я рассмотрю APPROX_PERCENTILE_CONT, APPROX_PERCENTILE_DISC и функции манипуляции битами. Будут рассмотрены также изменения в FIRST_VALUE, LAST_VALUE и LTRIM/RTRIM/TRIM.

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

Продолжить чтение "Изменения языка T-SQL в SQL Server 2022. Часть 2"
Категории: T-SQL

Вызов исключений и обработка ошибок с помощью THROW в SQL Server

Пересказ статьи Jared Westover. Raising Exceptions and Error Handling with SQL Server THROW


Рассматривали ли вы возможность добавления обработки ошибок в код Transact-SQL (T-SQL)? Если вы спросите опытных разработчиков, большинство из них согласится с тем, что это хорошая идея. Возможно, вам достался по наследству далеко не идеальный код. Или ваш код можно было бы немного привести в порядок. Основной причиной для добавления обработки ошибок является управление возникновением исключений. Было бы прекрасно, если бы ошибки не возникали, но такой мир не существует. Есть пара способов для вызова исключений в T-SQL. Более старый метод - это с использованием RAISERROR. Теперь RAISERROR все еще используется, но, начиная с SQL Server 2012 в городе появился новый игрок, которого зовут THROW.
Продолжить чтение "Вызов исключений и обработка ошибок с помощью THROW в SQL Server "
Категории: T-SQL

Удалить все таблицы в SQL Server и сгенерировать список объектов на удаление

Пересказ статьи Aubrey Love. Drop All Tables in SQL Server and Generate a List of Objects to Drop


Проблема


Я создал 5 таблиц, 15 представлений и четыре хранимых процедуры в тестовой среде Microsoft SQL Server. Когда я завершил тестирование, то перенес все в рабочую среду. Теперь мне нужно удалить все объекты тестового SQL Server для подготовки следующего проекта.

Я знаю, что могу создать несколько скриптов SQL Server (DROP TABLE, DROP VIEW и DROP PROC), но необходимо ли делать это для каждого из 24 объектов. Как мне удалить все эти объекты более эффективно?
Продолжить чтение "Удалить все таблицы в SQL Server и сгенерировать список объектов на удаление"
Категории: T-SQL

Функциональность или производительность?

Пересказ статьи Grant Fritchey. FUNCTION VS. PERFORMANCE


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

Да, идентичный моему. Почти строка в строку.

Ну, почти.

Я понимаю, что буду писать статью в блог. Продолжить чтение "Функциональность или производительность?"

Команды SQL для получения текущих даты и времени в SQL Server

Пересказ статьи Rajendra Gupta. SQL Commands to check current Date and Time (Timestamp) in SQL Server


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

Рассматриваются команды (функции) SQL даты/времени для SQL Server, Azure SQL Database, Managed instance (MI) и Azure Synapse Analytics. Продолжить чтение "Команды SQL для получения текущих даты и времени в SQL Server"
Категории: T-SQL

Функции метаданных в SQL Server и примеры их использования

Пересказ статьи Manvendra Singh. Metadata Functions in SQL Server and Their Use Cases


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

Термин "метаданные" означает информацию о данных. Например, когда вы покупаете товар, вы можете многое узнать о нем из упаковки, как-то цену, дату годности, дату изготовления, размер и т.д. Эта информация подобна метаданным, поскольку вся она относится к этому конкретному продукту. Продолжить чтение "Функции метаданных в SQL Server и примеры их использования"
Категории: T-SQL

Почему параллельные запросы в SQL Server иногда выполняются медленно

Пересказ статьи Joe Obbish. Why Parallel Queries are Sometimes Slow In SQL Server


Вы можете заметить большой разброс в прошедшем времени (elapsed time) для параллельных запросов во время выполнения настройки запроса или наблюдения за рабочей нагрузкой. Эта статья рассматривает некоторые из возможных объяснений этого разброса. Я выполняю тестирование на SQL Server 2022 RC0, но это поведение может наблюдаться на всех поддерживаемых в настоящее время версиях SQL Server.
Продолжить чтение "Почему параллельные запросы в SQL Server иногда выполняются медленно"

PSPO: Как SQL Server 2022 пытается решить проблему прослушивания параметра

Пересказ статьи Brent Ozar. PSPO: How SQL Server 2022 Tries to Fix Parameter Sniffing


Прослушивание параметра (parameter sniffing) является пресловутой проблемой для Microsoft SQL Server, поскольку он пытается повторно использовать планы выполнения, которые неважно работают для параметров, изменяющихся в широких диапазонах. Вот базовый пример, почему это происходит.

В SQL Server 2022 введена новая функция, называемая оптимизация плана, чувствительного к параметрам. Я действительно не понимаю, почему Microsoft пишет с заглавных букв только первые три слова (Parameter Sensitive Plan optimization), а не все, или почему они пишут аббревиатуру как “PSP optimization”, если нам это понадобится, почему не назвать это PSPO? Оптимизация - это слово, которое здесь имеет наибольшее число слогов - так почему мы именно его выводим за пределы аббревиатуры? Продолжить чтение "PSPO: Как SQL Server 2022 пытается решить проблему прослушивания параметра"

Различные способы параметризации запросов в SQL Server

Пересказ статьи Erik Darling. Different Ways To Parameterize Queries In SQL Server


Важность параметризации


Параметризация дает запросам несколько преимуществ.

  • Возможность лучшего использования кэша планов, что обычно означает меньшее время на компиляцию и перекомпиляцию запросов.

  • Ваши запросы станут более безопасными, поскольку они не будут подвержены атакам SQL-инъекции, которая весьма распространена.

Продолжить чтение "Различные способы параметризации запросов в SQL Server"

Почему типы данных MAX обычно оказываются плохим выбором для столбцов SQL Server

Пересказ статьи Erik Darling. Why MAX Data Types Are Usually A Bad Choice For SQL Server Columns


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

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

Простая лабораторная работа для демонстрации опасности NOLOCK в операторах INSERT

Пересказ статьи William Assaf. A simple lab to demonstrate the danger of NOLOCKs in INSERT statements


Уровню изоляции READ UNCOMMITTED, который активирует табличный хинт NOLOCK, не следует доверять, когда он используется при записи данных. Вы не всегда защищены ошибкой 1065 в случаях, когда запись сталкивается с NOLOCK. Продолжить чтение "Простая лабораторная работа для демонстрации опасности NOLOCK в операторах INSERT"