Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

TABLESPACE_STORAGE_ERROR 1С:Предприятие и СУБД

Разделение Tablespaces в PostgreSQL: Оптимизация дисков SSD NVMe и HDD

Обновлено: 26.08.2026 · Официальная документация ↗
  • Нехватка дискового пространства на высокоскоростных дорогостоящих SSD/NVMe массивах.
  • Высокая стоимость хранения редко запрашиваемых исторических данных (logs, audit, архивные проводки).
  • Необходимость изоляции I/O нагрузки временных файлов от основных таблиц БД.

1. Подготовка каталогов на уровне файловой системы Linux

# Создание точек монтирования для быстрого NVMe и емкого HDD
mkdir -p /mnt/nvme_fast/pg_tablespaces/fast_space
mkdir -p /mnt/hdd_cold/pg_tablespaces/cold_space

# Назначение владельца postgres
chown -R postgres:postgres /mnt/nvme_fast/pg_tablespaces
chown -R postgres:postgres /mnt/hdd_cold/pg_tablespaces
chmod 700 /mnt/nvme_fast/pg_tablespaces/fast_space
chmod 700 /mnt/hdd_cold/pg_tablespaces/cold_space

2. Создание Tablespaces в PostgreSQL

CREATE TABLESPACE fast_nvme LOCATION '/mnt/nvme_fast/pg_tablespaces/fast_space';
CREATE TABLESPACE cold_hdd LOCATION '/mnt/hdd_cold/pg_tablespaces/cold_space';

-- Тюнинг стоимостных параметров планировщика под тип накопителя
ALTER TABLESPACE fast_nvme SET (random_page_cost = 1.1, seq_page_cost = 1.0);
ALTER TABLESPACE cold_hdd SET (random_page_cost = 4.0, seq_page_cost = 1.0);

3. Перенос существующих таблиц и индексов на другой Tablespace

-- Перенос таблицы на быстрый диск (не блокирует чтение, блокирует запись)
ALTER TABLE active_orders SET TABLESPACE fast_nvme;

-- Перенос индекса на NVMe
ALTER INDEX idx_active_orders_id SET TABLESPACE fast_nvme;

-- Перенос исторической архивной таблицы на холодный HDD
ALTER TABLE archived_logs_2023 SET TABLESPACE cold_hdd;

4. Настройка Tablespace для временных файлов

Отредактируйте postgresql.conf для сброса временных файлов сортировок на отдельный массив:

temp_tablespaces = 'fast_nvme'
💡 Практика специалистов: Обязательно выставляйте random_page_cost отдельно для каждого табличного пространства. Это позволяет планировщику корректно предпочитать Index Scan на NVMe и Seq Scan на HDD.

Частые вопросы (FAQ)

Блокирует ли ALTER TABLE ... SET TABLESPACE таблицу для пользователей?

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

Можно ли создавать табличное пространство внутри директории PGDATA?

Нет, ядро PostgreSQL категорически запрещает размещать целевой каталог Tablespace внутри каталога PGDATA во избежание рекурсивных циклов при резервном копировании.

Как узнать, в каком табличном пространстве находится таблица?

Запросите каталог: SELECT tablename, tablespace FROM pg_tables WHERE tablename = 'my_table';. Если поле tablespace пустое, таблица использует пространство по умолчанию (pg_default).

Что произойдет при отказе диска, на котором расположен один из Tablespaces?

Весь кластер PostgreSQL перейдет в режим сбоя или аварийно остановится, так как транзакционный механизм WAL требует консистентности всех связанных пространств данных.

Полезные материалы
Рекомендуем