Добавил:
ИВТ (советую зайти в "Несортированное")rnПИН МАГА Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Database 2024 / Books / Мониторинг PostgreSQL.pdf
Скачиваний:
26
Добавлен:
20.11.2024
Размер:
6.87 Mб
Скачать

4.1. Иерархия объектов СУБД

103

Базы данных

Базы данных являются своего рода контейнерами для данных и обеспечивают их изоляцию. Таблицыииндексыоднойбазынедоступнывдругихбазах(дляобходаэтогоограниченияможно использоватьтакие средства,как postgres_fdwи dblink).Отдельные базы используютсядля логического разделения данных внутри одного кластера — данные нескольких не взаимосвязанных между собой приложений можно разделить и хранить в отдельных базах, но в рамках одного кластера баз данных.

Посмотреть список баз можно с помощью метакоманды \l (или в таблице pg_database):

# \l

 

 

 

 

 

 

 

 

 

 

 

 

 

 

List of databases

 

 

 

Name

|

Owner

| Encoding | Collate

| Ctype

| ICU Locale | Locale Provider | Access privileges

 

-----------

+

----------

+----------

+------------

+------------

+------------

+-----------------

+-----------------------

 

pgbench

|

pgbench

| UTF8

| en_US.utf8

| en_US.utf8

|

| libc

|

 

postgres

|

postgres | UTF8

| en_US.utf8

| en_US.utf8

|

| libc

|

 

template0 |

postgres | UTF8

| en_US.utf8

| en_US.utf8

|

| libc

| =c/postgres

+

 

|

 

|

|

|

|

|

| postgres=CTc/postgres

 

template1 |

postgres | UTF8

| en_US.utf8

| en_US.utf8

|

| libc

| =c/postgres

+

 

|

 

|

|

|

|

|

| postgres=CTc/postgres

 

При инициализации кластера создаютсятри базы данных.Две базы—template0 и template1— используются самой СУБД в качестве шаблонов при создании новых баз, а третья база — postgres — является обычной базой, пригодной для создания в ней таблиц. Как правило, БД postgres не используется для прикладных бизнес-задач, администраторы обычно устанавливаютв нее вспомогательные скрипты и инструменты.Для размещения пользовательских данных рекомендуется создавать отдельные базы и давать им имена,которые ясно указывали бы на назначение БД или на суть хранимых там данных.

Все базы данных внутри основного каталога размещены в подкаталоге base. Каждая база размещена в каталоге,имя которого соответствует идентификатору в pg_database.oid.

Схемы

Внутри отдельной базы можно дополнительно разделить данные по схемам (schema). Схемы, посути,являютсяпространствамиимен(namespace)ипозволяютзадействоватьдополнительный уровень изоляции и хранения объектов,но не предусматриваютвложенности.Например, с помощью схем можно организовать хранение таблиц согласно разным предметным областям, версионирование функций и представлений. Массу интересных вариантов использования схем можно найти в презентации Б.Момджяна,посвященной микросервисам1.

Любая база создается со схемой public,которая является схемой по умолчаниюдля всех создаваемых таблиц и индексов.Часто на практике достаточно одной этой схемы.

1 momjian.us/main/writings/pgsql/microservices.pdf

104

 

Глава 4.

Базы данных

 

 

 

 

Посмотреть список схем можно метакомандой \dn+ (или в таблице pg_namespace):

# \dn+

 

 

 

 

 

 

 

 

 

 

List of schemas

 

 

Name

|

Owner

|

Access privileges

|

Description

--------

+

-------------------

+

----------------------------------------

+

------------------------

public

| pg_database_owner |

pg_database_owner=UC/pg_database_owner+| standard public schema

 

|

 

|

=U/pg_database_owner

|

 

Схемы являются внутренней абстракцией СУБД для логической группировки объектов. Они не имеют ассоциированных с ними файлов или каталогов в файловой системе.

Таблицы и индексы

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

Получить список таблиц можно с помощью метакоманды \dt+ или представления pg_tables:

# \dt+

 

 

 

 

 

 

 

 

 

 

List

of relations

 

 

 

Schema |

Name

| Type

| Owner

| Persistence | Access method | Size

| Description

--------+

------------------

+-------

+---------

+-------------

+---------------

+---------

+-------------

public | pgbench_accounts

| table

| pgbench

| permanent

| heap

| 256 MB

|

public | pgbench_branches

| table

| pgbench

| permanent

| heap

| 40 kB

|

public | pgbench_history

| table

| pgbench

| permanent

| heap

| 0 bytes

|

public | pgbench_tellers

| table

| pgbench

| permanent

| heap

| 48 kB

|

В выводе представлены только пользовательские таблицы. Для просмотра всех таблиц, включая системные,следует указать модификатор S: команда примет вид \dtS+.Для индексов есть аналогичная метакоманда \di и представление pg_indexes (на основе таблицы pg_index):

# \di+

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

List of relations

 

 

 

 

 

Schema |

Name

| Type

| Owner

|

Table

| Persistence | Access method | Size

| Description

--------+

-----------------------

+-------

+---------

+

------------------

+-------------

+---------------

+-------

 

+-------------

public | pgbench_accounts_pkey | index

| pgbench | pgbench_accounts

| permanent

| btree

| 43

MB

|

public | pgbench_branches_pkey

| index

| pgbench | pgbench_branches

| permanent

| btree

| 16

kB

|

public | pgbench_tellers_pkey

| index

| pgbench | pgbench_tellers

| permanent

| btree

| 16

kB

|

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

4.1. Иерархия объектов СУБД

105

Отношения и кортежи

Отношение (relation) — это обобщающий термин для любых объектов в базе данных, которые имеют имя и список атрибутов.Таблицы и индексы,внешниетаблицы,представления (обычныеиматериализованные),последовательности(sequence),составныетипы—всеэто можно назвать отношениями. Также в PostgreSQL существует термин класс — это устаревший синоним отношения,который остался со времен увлечения объектной ориентированностью. В самых ранних версиях PostgreSQL существовала таблица pg_relation, которую быстро переименовали в pg_class,а вот префикс rel у атрибутов так и остался.

В более общем виде отношение — это множество кортежей (tuple); например, результат запросатакже является отношением.Кортеж представляет собой упорядоченный набор атрибутов. Порядок атрибутов задается при определении таблицы (или другого отношения), которая будет содержать кортежи. В этом случае кортеж часто называют строкой таблицы.Он также может определяться структурой результирующего множества; такие кортежи иногда называют записями. Часто этот термин принимает смысл «версия строки», так как относится скорее к физическому представлению данных внутри страницы, чем к логическому понятию строки.

И таблицы,и индексы (и некоторые другиетипы отношений) представлены в виде отдельных файлов в каталогах БД. Если таблица содержит большое количество строк, файл таблицы (или индекса) автоматически сегментируется на файлы по одному гигабайту. Каждый такой файлсегмент нумеруется по возрастанию.

Каждая таблица или индекс представлены несколькими файлами, так называемыми слоями

(fork):

Основной файл таблицы (main fork) содержит пользовательские данные в виде строк.

Карта видимости (visibility map) предназначенадля отслеживания страниц,строки в которых видны всем активнымтранзакциям.Карты видимости существуюттолькодлятаблиц. Файлы карт видимости имеют суффикс _vm. Карты видимости обновляются при очистке

иобычно занимают немного места. Более подробное описание можно найти в документации1.

Карта свободного пространства (free space map) предназначена для отслеживания свободного места в таблице (или индексе) и тех страниц, что доступны для вставки новых строк. Так же как и карты видимости, карты свободного пространства обновляются при очистке

изанимают немного места. Файлы этих карт имеют суффикс _fsm. Более подробное описание можно найти в документации2.

Файл инициализации (initialization fork) используется только для нежурналируемых таблиц (unlogged table) и индексов, изменения в которых не фиксируются в WAL-журнале. Такие таблицы не восстанавливаются после сбоя и пересоздаются путем копирования

1 postgrespro.ru/docs/postgresql/current/storage-vm

2 postgrespro.ru/docs/postgresql/current/storage-fsm

Соседние файлы в папке Books