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

Табличные пространства определяют физическое размещение данных в файловой системе.

Табличные пространства можно создавать на разных разделах диска или на разных дисках. Например, часто используемый индекс можно разместить на быстром и надёжном SSD-диске, а таблица с архивными данными, которые редко используются, может быть размещена на более медленном носителе. Также при нехватке места в разделе, на котором был инициализирован кластер, табличное пространство можно создать в другом разделе.

ВАЖНО
Несмотря на возможное внешнее размещение относительно основного каталога хранения данных, табличные пространства являются частью кластера и не могут рассматриваться как самостоятельная коллекция файлов данных. Они зависят от метаданных, расположенных в главном каталоге, и не могут быть подключены к другому кластеру или копироваться самостоятельно. Также в случае потери табличного пространства (например, при удалении файлов или сбое диска) кластер может оказаться недоступным или не сможет запуститься. При размещении табличного пространства во временной файловой системе (например, RAM-диске) возникает угроза надёжности всего кластера.

Чтобы определить табличное пространство, используйте команду CREATE TABLESPACE:

CREATE TABLESPACE tablespace1 LOCATION '/home/user1/tablespace1_data';

Где /home/user1/tablespace1_data — каталог, в котором будут размещаться файлы объектов, принадлежащих этому табличному пространству. Он должен быть уже создан, принадлежать пользователю операционной системы, под которым запущен ADPG и быть пустым.

Также для конкретного табличного пространства можно переопределить предполагаемую стоимость чтения страниц, используемую планировщиком, и характеристики предварительной выборки во время выполнения запросов, заданные параметрами конфигурации. Это полезно, если табличное пространство расположено на диске, который быстрее или медленнее других. Доступные для переопределения параметры: seq_page_cost, random_page_cost, effective_io_concurrency и maintenance_io_concurrency. Используйте выражение WITH, чтобы установить эти параметры, например:

CREATE TABLESPACE tablespace2 LOCATION '/home/user1/tablespace2_data' WITH (seq_page_cost=0.8, random_page_cost=6.0);

ADPG работает с данными на дисках только через файловые системы, наиболее популярные EXT3, EXT4 и XFS. Raw devices не поддерживаются. Хорошей практикой является создание одного табличного пространства на одну логическую файловую систему, так как нет возможности контролировать расположение отдельных файлов в файловой системе.

Создание табличного пространства должно выполняться от имени суперпользователя базы данных. После этого можно разрешить его использование обычным пользователям, предоставив им привилегию CREATE командой GRANT.

Таблицы, индексы и базы данных могут быть размещены в определенном табличном пространстве. Для этого пользователь с привилегией CREATE для данного табличного пространства должен передать имя табличного пространства в качестве параметра соответствующей команде (CREATE или ALTER).

Например, следующий код создает таблицу t1 в табличном пространстве tablespace1:

CREATE TABLE t1 (c1 integer) TABLESPACE tablespace1;

Команды, приведенные ниже, переносят таблицу t1 и базу данных database1 в табличные пространства tablespace2 и tablespace3 соответственно:

ALTER TABLE t1 SET TABLESPACE tablespace2;

ALTER DATABASE database1 SET TABLESPACE tablespace3;

Вы можете использовать параметр default_tablespace, чтобы задать табличное пространство, которое будет использоваться по умолчанию в командах CREATE TABLE и CREATE INDEX:

SET default_tablespace = tablespace2;

Вы также можете добавить этот параметр в раздел postgresql.conf custom section на странице Clusters → ADPG cluster → Services → ADPG → Primary configuration в пользовательском интерфейсе ADCM. За дополнительной информацией обратитесь к статье Конфигурационные параметры.

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

При установке кластера создаются два табличных пространства, они описаны в таблице ниже.

Табличные пространства по умолчанию
Название Описание

pg_default

Используется по умолчанию для баз данных, а также шаблонов template1 и template0, располагается в каталоге /pg_data1/adpg14/base. Внутри этого каталога объекты размещаются в подкаталогах баз данных

pg_global

В этом табличном пространстве размещаются общие системные объекты всего кластера. Располагается в каталоге /pg_data1/adpg14/global. На логическом уровне организации данных схема pg_catalog содержит объекты из пространства pg_global

Первая часть пути к каталогам (/pg_data1) определяется конфигурационным параметром Data directory.

Объекты одной базы данных могут быть размещены в нескольких табличных пространствах. В одном табличном пространстве могут быть размещены объекты нескольких баз данных.

Физический уровень организации данных в кластере ADPG
Физический уровень организации данных в кластере ADPG
Физический уровень организации данных в кластере ADPG
Физический уровень организации данных в кластере ADPG

Чтобы получить список табличных пространств кластера, используйте метакоманды psql \db и \db+. Также можно сделать запрос к системному каталогу pg_tablespace:

SELECT * FROM pg_tablespace;

Поскольку табличное пространство можно использовать в рамках любой базы данных, его невозможно удалить до тех пор, пока не будут удалены все объекты, использующие это пространство. Для удаления пустого табличного пространства вызовите команду DROP TABLESPACE:

DROP TABLESPACE tablespace2;

PostgreSQL использует символические ссылки для упрощения реализации табличных пространств. Соответственно, табличные пространства могут использоваться только в системах, поддерживающих символические ссылки. Каталог /pg_data1/adpg14/pg_tblspc содержит символические ссылки, которые указывают на внешние табличные пространства кластера.

Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней