Табличные пространства

Табличное пространство — это физическое расположение данных на диске.

В современных СУБД правильная организация хранения данных не менее важна, чем логическая структура базы. Табличные пространства предоставляют необходимую гибкость для решения задач производительности и управления дисковым пространством.

Табличные пространства в PostgreSQL — это мощный инструмент управления физическим хранением данных, который позволяет администраторам:

  • Оптимизировать производительность за счет распределения данных по разным дисковым подсистемам

  • Управлять правами доступа к файлам данных на уровне ОС

  • Реализовывать сложные стратегии хранения информации

  • Эффективно использовать ресурсы сервера


Создание табличного пространства

Linux:
CREATE TABLESPACE fastspace LOCATION '/mnt/ssd/postgresql/data';
Windows:
CREATE TABLESPACE ts_win LOCATION 'D:/pgdata/tablespace1';

Значения LOCATION указаны для примера, вы задаёте свой путь.

Требования:

  • Каталог должен существовать и принадлежать пользователю postgres

  • PostgreSQL должен иметь права на запись или запуск от имени администратора.

Проверка:
SELECT * FROM pg_tablespace;

Использование табличных пространств

Для таблиц:
CREATE TABLE metrics ( id SERIAL, data JSONB ) TABLESPACE fastspace;
Для индексов:
CREATE INDEX idx_metrics_data ON metrics(data) TABLESPACE fastindex;
Для всей БД:
CREATE DATABASE metrics_db WITH TABLESPACE = fastspace;

Права доступа
GRANT CREATE ON TABLESPACE fastspace TO admin_role; REVOKE CREATE ON TABLESPACE fastspace FROM user1;
Перенос объектов между пространствами
ALTER TABLE metrics SET TABLESPACE pg_default; ALTER INDEX idx_metrics_data SET TABLESPACE fastindex;
Системные табличные пространства:
  • pg_default: хранит данные по умолчанию ($PGDATA/base)

  • pg_global: хранит глобальные системные каталоги


Удаление табличных пространств

Пример для пространства fastspace
DROP TABLESPACE fastspace;
Условия:
  • Пространство должно быть пустым

  • Нет активных ссылок на него


Мониторинг и анализ

Размер объектов:
SELECT ts.spcname AS tablespace, pg_size_pretty(pg_tablespace_size(ts.oid)) AS size FROM pg_tablespace ts;
Распределение объектов:
SELECT t.spcname AS tablespace, c.relname AS object, CASE c.relkind WHEN 'r' THEN 'table' WHEN 'i' THEN 'index' ELSE c.relkind::text END AS type FROM pg_class c JOIN pg_tablespace t ON c.reltablespace = t.oid;

Распределение объектов: показывает, какие объекты (таблицы/индексы) размещены в каких табличных пространствах, что дает администратору важную информацию для:

  • Соблюдения архитектурных решений по хранению

  • Оперативного выявления проблем

  • Планирования апгрейда инфраструктуры

  • Документирования текущей схемы размещения данных


Комментарии

Добавить комментарий

Чтобы оставить комменатрий необходимо Авторизоваться