Skip to content

Типы индексов в PostgreSQL: изучаем PostgreSQL вместе с Grant Fritchey

Пересказ статьи Grant Fritchey. Index Types in PostgreSQL: Learning PostgreSQL with Grant


Как и любая другая реляционная система управления базами данных (РСУБД), PostgreSQL использует индексы как механизм улучшения доступа к данным. PostgreSQL имеет большое число различных типов индексов, поддерживающих различное поведение и различные типы данных. Помимо этого, подобно другим РСУБД, эти индексы характеризуются различными свойствами и поведением.

В этой статье я собираюсь пройтись по индексам различных типов и поведению некоторых индексов. Мы узнаем, что такое индексы, как они работают и как наилучшим образом применять их в ваших базах данных. Я надеюсь, что вы разовьете понимание того, какие индексы будут работать лучше в той или иной ситуации.
Продолжить чтение "Типы индексов в PostgreSQL: изучаем PostgreSQL вместе с Grant Fritchey"

Стоит ли использовать STRING_SPLIT в SQL Server 2022?

Пересказ статьи Brent Ozar. Should You Use SQL Server 2022’s STRING_SPLIT?


Функция STRING_SPLIT была улучшена в SQL Server 2022, так что теперь она может гарантировано возвращать упорядоченный список. Однако только это и было улучшено - по-прежнему остались критичные связанные с этой функцией проблемы производительности. Продолжить чтение "Стоит ли использовать STRING_SPLIT в SQL Server 2022?"

Варианты сравнения записей в таблицах

Пересказ статьи Chad Callihan. Options to Compare Table Records


Недавно мы рассматривали сравнение схем с помощью Azure Data Studio. Что если нам потребуется сравнение таблиц с помощью запроса? В этой статье мы сравним использование EXCEPT, NOT IN, и NOT EXISTS для нахождения различий в двух таблицах. Продолжить чтение "Варианты сравнения записей в таблицах"

Как работает автоматическое удаление статистики в SQL Server 2022

Пересказ статьи Dennes Torres. SQL Server 2022 How Auto-Drop Statistics Work


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

С другой стороны, если статистика создается пользователем, любое изменение схемы будет блокироваться наличием статистики.

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

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

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


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


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

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

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

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


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

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

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


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

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

Ну, почти.

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

Почему параллельные запросы в 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"

Введение в управление параллелизмом в PostgreSQL

Пересказ статьи Paul S.Randal. An Introduction to PostgreSQL Concurrency Control


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

PostgreSQL использует оптимистическую систему изоляции, известную как Многоверсионный Контроль Параллелизма (MVCC). MVCC гарантирует, что транзакции, записывающие данные в базу, не блокируют параллельные транзакции, которым требуется читать модифицируемые данные. Это работает посредством магии версионности строк - PostgreSQL создает версии строк в таблицах базы данных для минимизации блокировок при параллельном доступе. По мере того, как все больше версий создается, для обеспечения надлежащего обслуживания таблиц должен использоваться механизм управления сборкой мусора, называемый VACUUM. В настоящей статье я объясню, как все это работает на ряде примеров. Продолжить чтение "Введение в управление параллелизмом в PostgreSQL"

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

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


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

Введение в B-Tree и хэш-индексы в PostgreSQL

Пересказ статьи Paul S. Randal. An Introduction to B-Tree and Hash Indexes in PostgreSQL


В этой статье изучаются реализация B-Tree (B означает сбалансированное) и структуры данных хэш-индекса в PostgreSQL. По мере роста популярности PostgreSQL в качестве системы баз данных с открытыми кодами для разработчиков и как цель для переноса рабочей нагрузки Oracle, понимание работы индексов в PostgreSQL исключительно важно для разработчиков и администраторов баз данных. PostgreSQL имеет несколько других типов индексов, таких как индексы GIN, индексы GiST и индексы BRIN. В этой статье я не буду их рассматривать, поскольку они специфичны для поиска в тексте, географических и других сложных типов данных. И, хотя использование индекса B-Tree покрывает примерно 90% случаев использования, хэш-индексы и их концепция также важны для понимания.
Продолжить чтение "Введение в B-Tree и хэш-индексы в PostgreSQL"

SQL Server 2022: Появление функции DATETRUNC, поэтому вы можете обрезать даты и прочее

Пересказ статьи Erik Darling. SQL Server 2022: Introduces the DATETRUNC Function, So You Can Truncate Your Dates And Stuffr


Важность


Когда я впервые сел за написание этой статьи, то делал забавную ошибку: я постоянно продолжал писать DATE_TRUNC.

В SQL Server это называется DATETRUNC.

Почему? Потому что так она реализована в PostgreSQL и DB2. В Oracle, конечно, она просто называется TRUNC.

Так что, хотя было бы неплохо иметь одинаковое поведение (как казалось), это точно не помогает, если у вас нет эквивалента 1:1 вызова с другими платформами. Продолжить чтение "SQL Server 2022: Появление функции DATETRUNC, поэтому вы можете обрезать даты и прочее"