Организация данных
Табличные пространства
16
Авторские права
© Postgres Professional, 2017–2024
Авторы: Егор Рогов, Павел Лузанов, Илья Баштанов, Алексей Береснев
Фото: Олег Бартунов (монастырь Пху и пик Бхрикути, Непал)
Использование материалов курса
Некоммерческое использование материалов курса (презентации,
демонстрации) разрешается без ограничений. Коммерческое
использование возможно только с письменного разрешения компании
Postgres Professional. Запрещается внесение изменений в материалы
курса.
Обратная связь
Отзывы, замечания и предложения направляйте по адресу:
Отказ от ответственности
Компания Postgres Professional не несет никакой ответственности за
любые повреждения и убытки, включая потерю дохода, нанесенные
прямым или непрямым, специальным или случайным использованием
материалов курса. Компания Postgres Professional не предоставляет
каких-либо гарантий на материалы курса. Материалы курса
предоставляются на основе принципа «как есть» и компания Postgres
Professional не обязана предоставлять сопровождение, поддержку,
обновления, расширения и изменения.
2
Темы
Табличные пространства и каталоги
Создание, изменение и удаление табличных пространств
Хранение данных в файловой системе
Перемещение данных
3
Табличные пространства
appdb
pg_catalog public
postgres
pg_catalog publicсхема
табл. пр-во
pg_global
табл. пр-во
ts
табл. пр-во
pg_default
таблица
таблица
объект
таблица
таблица
объект
таблица
таблица
объект
таблица
таблица
объект
таблица
таблица
объект
таблица
таблица
объект
таблица
таблица
объект
таблица
таблица
объект
таблица
таблица
объект
таблица
таблица
объект
таблица
таблица
объект
ТП по
умолчанию
ТП по
умолчанию
Табличные пространства (ТП) служат для организации физического
хранения данных и определяют расположение данных в файловой
системе.
Например, можно создать одно ТП на медленных дисках для архивных
данных, а другое — на быстрых дисках для данных, с которыми идет
активная работа.
При инициализации кластера создаются два ТП: pg_default и pg_global.
Одно и то же ТП может использоваться разными базами данных, а одна
база данных может хранить данные в нескольких ТП.
При этом у каждой БД есть так называемое «ТП по умолчанию»,
в котором создаются все объекты, если не указано иное. В этом же
ТП хранятся и объекты системного каталога. Изначально в качестве
«ТП по умолчанию» используется ТП pg_default, но можно установить
и другое.
ТП pg_global особенное: в нем хранятся те объекты системного
каталога, которые являются общими для кластера.
4
Каталоги
appdb
postgres
табл. пр-во
pg_global
табл. пр-во
ts
табл. пр-во
pg_default
таблица
таблица
объект
таблица
таблица
объект
таблица
таблица
объект
таблица
таблица
объект
таблица
таблица
объект
таблица
таблица
объект
таблица
таблица
объект
PGDATA/global/
PGDATA/base/dboid /
PGDATA/pg_tblspc/tsoid
/путь-к-каталогу/ver/dboid/
По сути, табличное пространство — это указание на каталог, в котором
располагаются данные. Стандартные ТП pg_global и pg_default всегда
находятся в PGDATA/global/ и PGDATA/base/ соответственно. При
создании пользовательского ТП указывается произвольный каталог;
для собственного удобства PostgreSQL создает на него символическую
ссылку в каталоге PGDATA/pg_tblspc/.
Внутри каталога PGDATA/base/ данные дополнительно разложены по
подкаталогам баз данных (для PGDATA/global/ это не требуется, так как
данные в нем относятся к кластеру в целом).
Внутри каталога пользовательского ТП появляется еще один уровень
вложенности: версия сервера PostgreSQL. Это сделано для удобства
обновления сервера на другую версию.
Собственно объекты хранятся в файлах внутри этих каталогов —
каждый объект в отдельных файлах.
6
Итоги
Табличные пространства — средство для организации
физического хранения данных
Логическое (базы данных, схемы) и физическое (табличные
пространства) разделения данных независимы
7
Практика
Почему при создании базы данных без предложения
TABLESPACE табличным пространством по умолчанию
становится pg_default?
1. Создайте новое табличное пространство.
2. Измените табличное пространство по умолчанию для базы
данных template1 на созданное пространство.
3. Создайте новую базу данных.
Проверьте, какое табличное пространство по умолчанию
установлено для новой базы данных.
4. Посмотрите в файловой системе символьную ссылку
в PGDATA на каталог табличного пространства.
5. Удалите созданное табличное пространство.
8
Практика+
1. Установите параметр random_page_cost в значение 1.1
для табличного пространства pg_default.
1. Используйте команду ALTER TABLESPACE ... SET:
Параметры seq_page_cost и random_page_cost используются
планировщиком запросов и задают примерную стоимость чтения
с диска одной страницы данных при последовательном и произвольном
доступе соответственно.
Чем меньше соотношение между этими параметрами, тем чаще
планировщик будет предпочитать индексный доступ
последовательному сканированию таблицы.
Более подробно параметры * _cost, и в частности random_page_cost,
рассматриваются в курсе QPT «Оптимизация запросов».