Skip to content

Введение в управление параллелизмом в 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, поэтому вы можете обрезать даты и прочее"

Хранимые процедуры или sp_executesql в SQL Server: что лучше?

Пересказ статьи Erik Darling. Stored Procedures vs sp_executesql In SQL Server: Is One Better Than The Other


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

  • Кто-то мне говорил, что им потребовалось использовать динамический SQL в хранимой процедуре.

  • Приложения, отправляющие параметризованные операторы SQL, которые выполняются с помощью sp_executesql.

Продолжить чтение "Хранимые процедуры или sp_executesql в SQL Server: что лучше?"