Пересказ статьи Jared Westover. Rethinking SQL Explicit Transactions
Недавно разработчик Microsoft SQL Server усомнился в моем давнем совете всегда использовать явные транзакции, по крайней мере, при выполнении операторов обновления, вставки и удаления. Я годами проповедовал, что вы должны использовать их почти для любого оператора, изменяющего строку в целях обеспечения целостности данных. Прежде чем пересмотреть свое решение, я бы высказался за их использование для обновления одной строки в единственной таблице. Он спросил, а должен ли? Тщательно обдумав это, я сказал нет, вы не должны. Этот простой вопрос заставил меня переосмыслить, почему я выступаю за явные транзакции.
Continue reading "Переосмысление явных транзакций SQL"
Пересказ статьи Joe Billingham. What are SQL Server Index Fragmentation and Index Fill Factor
Что такое фрагментация индекса и как она происходит?
Важно знать, что данные SQL Server хранятся на страницах данных, каждая из которых имеет размер 8Кб. Имеется два типа фрагментации, оба являются результатом того, что эти страницы используются не так эффективно, как могло бы быть.
Когда вы вставляете или обновляете данные на странице, которая уже заполнена, SQL Server создает новую страницу. Информация из исходной страницы будет разбиваться 50/50, при этом половина данных вместе с новой записью будет добавляться на новую страницу. Таким образом в конце страницы (страниц) появляется пустое пространство. Это пустое пространство, которое называется
внутренней фрагментацией, также возникает при удалении данных со страницы. На диаграмме показано, как это происходит:
Continue reading "Что такое фрагментация индекса и коэффциент заполнения индекса в SQL Server?"
Пересказ статьи Aubrey Love. SQL Stored Procedure Input and Output Parameters, Types, Error Handling, Security and more
Если вы слышали о хранимых процедурах в SQL Server, но точно не знаете, что это такое и как это использовать наилучшим образом, то эта статья даст вам необходимую информацию и позволит начать работать с хранимыми процедурами.
Здесь вы узнаете, что из себя представляет хранимая процедура, как ее создать и применить. Мы поговорим о параметрах хранимой процедуры, входных и выходных, и вкратце обсудим обработку ошибок и безопасность для хранимых процедур.
Continue reading "Хранимые процедуры SQL: входные и выходные параметры, типы, обработка ошибок и кое-что еще"
Пересказ статьи Daniel Hutmacher. Querying a single table can use multiple indexes
Может ли SQL Server собрать вместе два различных индекса в запросе к единственной таблице, а не просто взять не вполне оптимальный кластеризованный индекс для сканирования? Короткий ответ - да, в довольно узком диапазоне условий.
Continue reading "Запрос к единственной таблице может использовать несколько индексов"
Пересказ статьи 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.
Continue reading "Изменения языка T-SQL в SQL Server 2022. Часть 2"
Пересказ статьи Jared Westover. Raising Exceptions and Error Handling with SQL Server THROW
Рассматривали ли вы возможность добавления обработки ошибок в код Transact-SQL (T-SQL)? Если вы спросите опытных разработчиков, большинство из них согласится с тем, что это хорошая идея. Возможно, вам достался по наследству далеко не идеальный код. Или ваш код можно было бы немного привести в порядок. Основной причиной для добавления обработки ошибок является управление возникновением исключений. Было бы прекрасно, если бы ошибки не возникали, но такой мир не существует. Есть пара способов для вызова исключений в T-SQL. Более старый метод - это с использованием
RAISERROR. Теперь RAISERROR все еще используется, но, начиная с SQL Server 2012 в городе появился новый игрок, которого зовут THROW.
Continue reading "Вызов исключений и обработка ошибок с помощью THROW в 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 объектов. Как мне удалить все эти объекты более эффективно?
Continue reading "Удалить все таблицы в SQL Server и сгенерировать список объектов на удаление"
Пересказ статьи Grant Fritchey. FUNCTION VS. PERFORMANCE
Недавно я просматривал DBA.StackExchange, когда увидел довольно простой вопрос, на который я решил ответить. Я вышел, установил тестовую базу данных, создал некоторые таблицы для тестирования и быстро написал запрос для ответа на вопрос. Пока я его форматировал для публикации, увидел, что был уже дан другой ответ.
Да, идентичный моему. Почти строка в строку.
Ну, почти.
Я понимаю, что буду писать статью в блог.
Continue reading "Функциональность или производительность?"
Пересказ статьи 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.
Continue reading "Команды SQL для получения текущих даты и времени в SQL Server"
Пересказ статьи Manvendra Singh. Metadata Functions in SQL Server and Their Use Cases
SQL Server предоставляет различные системные функции для получения метаданных, имеющих отношение к SQL Server, базам данных и объектам баз данных. Здесь я рассмотрю несколько полезных функций метаданных, которые вы могли бы использовать.
Термин "метаданные" означает информацию о данных. Например, когда вы покупаете товар, вы можете многое узнать о нем из упаковки, как-то цену, дату годности, дату изготовления, размер и т.д. Эта информация подобна метаданным, поскольку вся она относится к этому конкретному продукту.
Continue reading "Функции метаданных в SQL Server и примеры их использования"
Пересказ статьи Joe Obbish. Why Parallel Queries are Sometimes Slow In SQL Server
Вы можете заметить большой разброс в прошедшем времени (elapsed time) для параллельных запросов во время выполнения настройки запроса или наблюдения за рабочей нагрузкой. Эта статья рассматривает некоторые из возможных объяснений этого разброса. Я выполняю тестирование на SQL Server 2022 RC0, но это поведение может наблюдаться на всех поддерживаемых в настоящее время версиях SQL Server.
Continue reading "Почему параллельные запросы в SQL Server иногда выполняются медленно"
Пересказ статьи 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? Оптимизация - это слово, которое здесь имеет наибольшее число слогов - так почему мы именно его выводим за пределы аббревиатуры?
Continue reading "PSPO: Как SQL Server 2022 пытается решить проблему прослушивания параметра"
Пересказ статьи Erik Darling. Different Ways To Parameterize Queries In SQL Server
Важность параметризации
Параметризация дает запросам несколько преимуществ.
- Возможность лучшего использования кэша планов, что обычно означает меньшее время на компиляцию и перекомпиляцию запросов.
- Ваши запросы станут более безопасными, поскольку они не будут подвержены атакам SQL-инъекции, которая весьма распространена.
Continue reading "Различные способы параметризации запросов в SQL Server"
Пересказ статьи Erik Darling. Why MAX Data Types Are Usually A Bad Choice For SQL Server Columns
Когда вы пытаетесь выяснить как хранить строковые данные, часто кажется самым простым вариантом выбрать очень длинный - даже MAX - тип данных, чтобы избежать впоследствии
ошибок усечения.
Даже если вы сохраняете строки известной абсолютной длины, разработчики могут не использовать это в приложении либо посредством раскрывающегося меню, либо с помощью другой формы проверки.
Continue reading "Почему типы данных MAX обычно оказываются плохим выбором для столбцов SQL Server"
Пересказ статьи William Assaf. A simple lab to demonstrate the danger of NOLOCKs in INSERT statements
Уровню изоляции
READ UNCOMMITTED, который активирует табличный хинт NOLOCK, не следует доверять, когда он используется при записи данных. Вы не всегда защищены ошибкой 1065 в случаях, когда запись сталкивается с NOLOCK.
Continue reading "Простая лабораторная работа для демонстрации опасности NOLOCK в операторах INSERT"