BI Consult Desktop Logo BI Consult Mobile Logo
  • Russian BI Исследование российских bi
  • Перейти на Fine BI
  • Контакты
  • +7 812 334-08-01
    +7 499 608-13-06
  • Отправить сообщение
  • Главная
  • Продукты Эксперт-BI
    • Дистрибуция
    • Розничная торговля
    • Производство
    • Операторы связи
    • Страхование
    • Банки
    • Лизинг
    • Логистика
    • Нефтегазовый сектор
    • Медицина
    • Сеть ресторанов
    • E-Commerce
    • Сельское хозяйство
    • Энергетика
    • FMCG
    • Девелоперы
    • Маркетплейсы
    • Пищевая промышленность
    • Фармацевтика
    • Построение Data Platform
    • Цифровая трансформация
    • Управление по KPI
    • Финансы
    • Продажи
    • Склад
    • HR
    • Маркетинг
    • Внутренний аудит
    • Категорийный менеджмент
    • S&OP и FP&A
    • Геоаналитика
    • Цепочки поставок (SCM)
    • AutoML
    • Process Mining
    • IBP
    • ИТ (CIO)
    • Закупки
  • Платформы
    • Системы бизнес-анализа (BI)
    • Интегрированное бизнес-планирование (IBP)
    • Хранилища данных (DWH / Lakehouse)
    • Каталоги данных (Data Catalog)
    • Системы ETL и ELT
    • AI / Исскуственный интеллект
    • Шина данных (ESB)
    • Система управления мастер-данными (MDM)
    • Семантический слой
  • Услуги
    • Переход на отечественные BI и DWH системы
    • Консалтинг
    • Пилотный проект
    • Обучение и сертификация
    • Бесплатное обучение
    • Поддержка
    • Технические задания
    • Сбор требований для проекта внедрения BI-системы
    • CI/CD для DWH
    • Аудит BI приложений и DWH
    • Выделенная команда
    • Настойка и поддержка баз данных
    • Разработка BI Стратегии
    • Styleguide для BI-системы
    • Как выбрать BI-систему
  • Курсы
    • Учебный курс Информационная грамотность (Data Literacy)
    • Учебный курс для бизнес-аналитиков
    • Учебный курс для системных аналитиков
    • Учебный курс по Data Governance
    • Учебный курс Как стать CDO
    • Учебный курс Современная архитектура хранилища данных
    • Учебный курс по Fine BI
    • Учебный курс по FineReport
    • Учебный курс по DWH
    • Учебный курс по Data Science (ML, AI)
    • Учебный курс по PostgreSQL
    • Учебный курс по Greenplum
    • Учебный курс по Apache Airflow и NiFi
    • Учебный курс по Open-source BI
    • Учебный курс по ClickHouse
    • Учебный курс по DataLens
    • Учебный курс по Loginom
    • Учебный курс по Modus BI и ETL
    • Учебный курс по Visiology
    • Учебный курс по dbt (Data Build Tool)
  • Компания
    • Руководство
    • Новости
    • Клиенты
    • Карьера
    • Скачать
    • Контакты

BI

  • FineBI
  • FineReport
  • FineDataLink
  • FineChatBI (FineAI)
  • Коннекторы данных из 1С в BI
  • Airflow / Nifi
  • Visiology
  • PIX BI
  • Modus BI
  • Yandex.DataLens
  • Open-source BI: Superset/Metabase
  • Luxms BI
  • AW BI + Alpha BI
  • FlyBI + Форсайт. Аналитическая Платформа
  • Loginom
  • Триафлай
  • AI / Исскуственный интеллект
  • Optimacros
  • Навигатор BI
  • Семантический слой

СУБД

  • Arenadata
  • ClickHouse
  • Greenplum
  • Postgres Professional
  • TData

Другое

  • Построение Data Platform
    • Аналитическое хранилище данных
    • Data Lake и Data Engineering
    • Подробнее про Data Lake
    • Внедрение Lakehouse
      • Apache Doris
      • StarRocks
      • Trino
    • Миграция витрин из пропиетарных DWH на новый стек
    • Учебный курс "Современная архитектура хранилища данных"
Главная » Курсы по системам бизнес-анализа и методологии » Учебный курс по PostgreSQL » Как устроен PostgreSQL » Блокировки менеджера буферов PostgreSQL

Блокировки менеджера буферов PostgreSQL

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

Примечание: Блокировки

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

 

Блокировки буферных таблиц

BufMappingLock защищает целостность данных всей буферной таблицы. Это легковесная блокировка, которая может использоваться как в общем, так и в эксклюзивном режимах. При поиске записи в буферной таблице backend процесс владеет общей блокировкой BufMappingLock. При вставке или удалении записей backend процесс использует эксклюзивную блокировку.

BufMappingLock состоит из разделов (по умолчанию их колисество составляет 128 разделов). Каждый раздел BufMappingLock отвечает за каждую часть соответствующего слота хэш-бакета.

На рис. 91 показан пример результата разделения BufMappingLock. Два backend процесса могут одновременно удерживать соответствующие разделы BufMappingLock в эксклюзивном режиме для вставки новых записей данных. Если бы BufMappingLock была единой общесистемной блокировкой, обоим процессам пришлось бы ждать завершения работы другого процесса, в зависимости от того, какой процесс запустился первым.

Буферной таблице требуется множество других блокировок. Например, для удаления записи в буферной таблице используется спин-блокировка. Описание других блокировок опускается, поскольку в рамках данного документа в них нет необходимости. 

Примечание:

Вплоть до версии 9.4 BufMappingLock по умолчанию была подразделена на 16 разделов.

 

Блокировки для каждого декриптора буферов

В версиях 9.5 и более ранних версиях для контроля доступа к хранимой странице в соответствующем слоте буферного пула каждый дескриптор буфера использовал две легковесные блокировки, а именно content_lock и io_in_progress_lock, buf_hdr_lock) использовался в том случае, если проверялись или изменялись значения его собственных полей (т. е. usage_count, refcount, flags).

В версии 9.6 методы доступа к буферам были значительно улучшены. Блокировки io_in_progress_lock и buf_hdr_lock были удалены. Вместо этих блокировок используются атомарные операции.

 

 

content_lock

Блокировка content_lock - это типичная блокировка, обеспечивающая ограничения доступа. Она может быть использована как в общем, так и в эксклюзивном режиме.

При чтении страницы backend процесс получает блокировку content_lock буферного дескриптора, в котором хранится страница.

Эксклюзивная блокировка content_lock возможна при выполнении хотя бы одного из следующих действий:

  • Добавление строк (кортежей) в хранимую страницу или изменение полей t_xmin/t_xmax в хранимой странице. (t_xmin и t_xmax описаны в подразделе 5.2; при удалении или обновлении строк эти поля связанных с ними кортежей изменяются).
  • Физическое удаление кортежей или уплотнение свободного пространства на хранимой странице. (эти операции выполняется с помощью VACUUM и HOT, которые описаны в разделах 6 и 7 соответственно).
  • Замораживание кортежей в пределах хранимой страницы. (данный процесс описан в подразделах 5.10.1 и 6.3.)

Более подробную информацию Вы найдете в README.

 

io_in_progress_lock (версия 9.5 и более ранние версии)

В версии 9.5 и более ранних версиях io_in_progress_lock использовалась для ожидания завершения ввода-вывода в буфере. Когда процесс PostgreSQL загружает или записывает данные страницы из/в хранилище, он получает эксклюзивную блокировку io_in_progress соответствующего дескриптора на время доступа к хранилищу.

 

spinlock (версия 9.5 и более ранние версии)

При проверке флагов или других полей (например, refcount и usage_count) используется spin. Ниже приведены два примера использования данной блокировки:

  • Прикрепление дескриптора буфера:
  1. Применение spinlock к дикриптору буфера.
  2. Увеличение его refcount и usage_count на 1.
  3. Снятие блокировки
LockBufHdr(bufferdesc);    /* Acquire a spinlock */
bufferdesc->refcont++;
bufferdesc->usage_count++;
UnlockBufHdr(bufferdesc); /* Release the spinlock */
 
  • Установление грязного бита на ‘1’:
  1. Применение spinlock к дикриптору буфера.
  2. Установите грязного бита на '1' с помощью побитовой операции.
  3. Снятие блокировки
#define BM_DIRTY             (1 << 0)    /* data needs writing */
#define BM_VALID             (1 << 1)    /* data is valid */
#define BM_TAG_VALID         (1 << 2)    /* tag is assigned */
#define BM_IO_IN_PROGRESS    (1 << 3)    /* read or write in progress */
#define BM_JUST_DIRTIED      (1 << 5)    /* dirtied since write started */
 
LockBufHdr(bufferdesc);
bufferdesc->flags |= BM_DIRTY;
UnlockBufHdr(bufferdesc);

 

Изменение других битов происходит таким же образом.

 

 

Узнать стоимость решенияЗапросить видео презентацию

← Предыдущая статья
Структура менеджера буферов в PostgreSQL
Следующая статья →
Принцип работы менеджера буфера PostgreSQL

Решения

Анализировать ФинансыУвеличивайте ПродажиОптимальный Склад и ЛогистикаМаркетинговые Метрики

Клиенты
  • АО «Евросиб СПб–транспортные системы» – оператор контейнерных сервисов с широкой сетью маршрутов на внутрироссийских и международных направлениях. Имеет успешный опыт управления парком фитинговых платформ, а также организации ускоренных контейнерных поездов, в основе которых точное расписание, оптимальные сроки доставки груза и экономическая целесообразность.

  • ГК «Агропромкомплектация-Курск» - одна из ведущих в Российской Федерации агропромышленных компаний с полным производственным циклом "от поля до прилавка". За 32 года работы на рынке компания заслуженно завоевала репутацию одного из лидеров страны в производстве свинины и молока.

  • Novikov group – первый российский ресторанный холдинг, основанный в 1991 году. Это команда профессионалов под управлением Аркадия Новикова, реализующая широкий спектр услуг в сфере гостеприимства: от проведения event-мероприятия до управления рестораном, от установления стандартов сервиса до контроля качества готовой продукции, от построения бизнес-плана проекта до реализации франшизы.

  • СберКорус (Группа компаний Сбербанка) – это ИТ‑компания, ИТ‑интегратор, SaaS-провайдер. Является разработчиком цифровых сервисов и услуг для автоматизации широкого диапазона бизнес-процессов юридических лиц. В 2004 году компания стала первым в России оператором электронного документооборота, а в 2012 году вошла в экосистему Сбера. 

  • Решения
    • Дистрибуция
    • Розничная торговля
    • Производство
    • Операторы связи
    • Страхование
    • Банки
    • Лизинг
    • Логистика
    • Нефтегазовый сектор
    • Медицина
    • Сеть ресторанов
    • E-Commerce
    • Энергетика
    • Фармацевтика
  • Услуги
    • Переход на отечественные BI и DWH
    • Консалтинг
    • Пилотный проект
    • Обучение и сертификация
    • Бесплатное обучение
    • Техническая поддержка
    • Технические задания
    • Сбор требований для проекта внедрения BI-системы
    • CI/CD для DWH
    • Аудит BI приложений
    • Выделенная команда
    • Настойка и поддержка баз данных
    • Разработка BI Стратегии
    • Styleguide для BI-системы
    • Как выбрать BI-систему
  • Платформы
    • FineBI
    • FineReport
    • FineDataLink
    • Коннекторы данных из 1С в BI
    • Airflow + NiFi
    • Visiology
    • Luxms BI
    • Modus BI
    • PIX BI
    • Arenadata
    • ClickHouse
    • Greenplum
    • Postgres Professional
    • Open-source BI: Superset/Metabase
    • Loginom
    • Yandex.DataLens
    • AI / Исскуственный интеллект
    • Optimacros
    • Шины данных
  • Курсы
    • Учебный курс Информационная грамотность
    • Учебный курс для бизнес-аналитиков
    • Учебный курс для системных аналитиков
    • Учебный курс по Data Governance
    • Учебный курс Как стать CDO
    • Учебный курс Современная архитектура хранилища данных
    • Учебный курс по Fine BI
    • Учебный курс по FineReport
    • Учебный курс по DWH
    • Учебный курс по Data Science (ML, AI)
    • Учебный курс по PostgreSQL
    • Учебный курс по Apache Airflow и NiFi
    • Учебный курс по Open-source BI
    • Учебный курс по ClickHouse
    • Учебный курс по DataLens
    • Учебный курс по Loginom
    • Учебный курс по Modus BI и ETL
    • Учебный курс по Visiology
    • Учебный курс по dbt
  • Функциональные решения
    • Создание Data Lake
    • Цифровая трансформация
    • Управление по KPI
    • Финансы
    • Продажи
    • Склад
    • HR
    • Маркетинг
    • Внутренний аудит
    • Категорийный менеджмент
    • S&OP и прогнозная аналитика
    • Геоаналитика
    • Цепочки поставок (SCM)
    • AutoML
    • Process Mining
    • Сквозная аналитика
  • Компания
    • О нас
    • Руководство
    • Новости
    • Клиенты
    • Скачать
    • Контакты
    • Политика конфиденциальности
RutubeVkontakteLinkedInYouTube
ООО "Би Ай Консалт",
ИНН: 7811437757,
ОГРН: 1097847154184
199178, Россия,
Санкт-Петербург,
6-ая линия В.О., Д. 63, 4 этаж
Тел: +7 (812) 334-08-01
Тел: +7 (499) 608-13-06
E-mail: info@biconsult.ru

 

 

 

 

 

×

Пользуясь сайтом, вы соглашаетесь с использованием cookies и политикой конфиденциальности.