Postmaster pid где находится linux

Обновлено: 06.07.2024

В основном, мы смотрим PID, чтобы убить невосприимчивую программу, и она похожа на диспетчер задач Windows.

Что такое идентификатор процесса PID?

PID обозначает идентификационный номер процесса, который обычно используется большинством ядер операционной системы, таких как Linux, Unix, macOS и Windows.

Это уникальный идентификационный номер, который автоматически присваивается каждому процессу, когда он создается в операционной системе.

Это было проверено, выполнив следующую команду в системе В 32-битных системах 32768 является максимальным значением, но мы можем установить любое значение до 2 ^ 22 (приблизительно 4 миллиона) в 64-битных системах. Вы можете спросить, почему нам нужно такое количество PID? потому что мы не можем повторно использовать PID сразу. Также во избежание возможных ошибок.

PID для запущенных процессов в системе можно найти с помощью следующих девяти методов, таких как команда pidof, команда pgrep, команда ps, команда pstree, команда ss, команда netstat, команда lsof, команда fuser и команда systemctl.

В этом уроке мы рассмотрим идентификатор процесса Apache для проверки.

Метод-1: Использование команды pidof

pidof используется для поиска идентификатора процесса запущенной программы.

Он выводит эти идентификаторы на стандартный вывод.

Чтобы продемонстрировать это, мы узнаем идентификатор процесса Apache2 из системы Debian 9.

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

Следовательно, нам нужно выяснить родительский PID (PPID), который мы ищем.

Это может быть первый номер. В моем случае это 3754, и он показан в порядке убывания.

Способ-2: Использование команды pgrep

pgrep просматривает текущие процессы и перечисляет идентификаторы процессов, которые соответствуют критериям выбора для stdout.

Это также похоже на вышеприведенный вывод, но этот приводит к сокращению результатов в порядке возрастания, что ясно говорит о том, что родительский PID является последним.

В моем случае это 3754.

Примечание. Если у вас есть несколько идентификаторов процесса, вы можете столкнуться с проблемой идентификации идентификатора родительского процесса при использовании команды pidof & pgrep.

Метод-3: Использование команды pstree

pstree показывает запущенные процессы как дерево.

Дерево коренится либо в pid, либо в init, если pid опущен.

Если имя пользователя указано в команде pstree, тогда отображается весь процесс, принадлежащий соответствующему пользователю.

pstree визуально объединяет идентичные ветви, помещая их в квадратные скобки и префикс с количеством повторений.

Чтобы получить только один родительский процесс, используйте следующий формат.

Команда pstree очень простая, потому что она отдельно разделяет родительский и дочерний процессы

Метод-4: Использование команды ps

ps отображает информацию о выборе активных процессов.

Он отображает идентификатор процесса (pid = PID), терминал, связанный с процессом (tname = TTY), кумулятивное время процессора в формате [DD-] hh: mm: ss (time = TIME) и исполняемое имя (ucmd = ЦМД).

По умолчанию выходной файл не сортируется.

Из вышеприведенного вывода мы можем легко идентифицировать идентификатор родительского процесса (PPID) на основе даты начала процесса.

Метод-5: Использование команды ss

ss используется для вывода статистики сокетов.

Он позволяет отображать информацию, аналогичную netstat.

Он может отображать больше информации о TCP и состоянии, нежели другие инструменты.

Он может отображать статистику для всех типов сокетов, таких как PACKET, TCP, UDP, DCCP, RAW, домен Unix и т. д.

Метод-6: Использование команды netstat

По умолчанию netstat отображает список открытых сокетов.

Если вы не укажете каких-либо семейств адресов, будут выведены активные сокеты всех сконфигурированных семейств адресов.

Метод-7: использование команды lsof

Команда lsof Linux выводит информацию о файлах, открытых для процессов, запущенных в системе.

Метод-8: Использование команды fuser

Утилита fuser должна записывать на стандартный вывод идентификаторы процессов процессов, запущенных в локальной системе, которые открывают один или несколько именованных файлов.

Метод-9: Использование команды systemctl

Это замена старого системного управления SysV и большинство современных операционных систем Linux были адаптированы systemd.

Однажды занявшись обслуживанием и поддержкой сервисов для пользователей, вы неизбежно столкнетесь с тем, что вам нужно хранить информацию о них в архиве так, чтобы она была доступна и легко модифицировалась в любое время. Эти задачи могут быть решение использованием баз данных. Много разных баз данных доступно под Linux; выбрать какую-нибудь одну очень трудно, так как она должна поддерживать несколько языков программирования, стандарты и широкий спектр возможностей. PostgreSQL, оригинально разработанная в UC Berkeley Computer Science Department, является пионером многих объектно- реляционных концепций сейчас доступных в коммерческих базах данных. Она предоставляет поддержку языков SQL92/SQL3, целостность транзакций и расширяемость типов.

Как написано на веб сервере PostgreSQL:

PostgreSQL - это изощренная объектно-реляционная система управления базами данных DBMS, поддерживающая практически все SQL конструкции, включая вложенный select, транзакции, и определяемые пользователем типы и функции. Это наиболее продвинутая база данных, доступная в исходных кодах в настоящее время.



Эти инструкции предполагают.
Unix-совместимые команды.
Путь к исходным кодам "/var/tmp" (возможны другие варианты).
Инсталляция была проверена на Red Hat Linux 6.1 и 6.2.
Все шаги инсталляции осуществляются суперпользователем "root".
PostgreSQL версии 6.5.3

Предварительные требования.

Перед компиляцией PostgreSQL вам необходимо убедиться, что на вашей системе установлен пакет egcs-c++-version.i386.rpm. Этот пакет располагается на вашем Red Hat Linux CD-ROM в каталоге "RedHat/RPMS". После компиляции и инсталляции PostgreSQL вы можете удалить его из вашей системы.
Проверьте, что egcs-c++-version.i386.rpm уже инсталлирован, используя команду:

Для инсталляции egcs-c++-version.i386.rpm выполните следующие команды:

Тарболы. Хорошей идеей будет создать список файлов установленных в вашей системе до инсталляции PostgreSQL и после, в результате, с помощью утилиты diff вы сможете узнать какие файлы были установлены. Например,
До инсталляции:
find /* > PostgreSQL1

После инсталляции:
find /* > PostgreSQL2

Для получения списка установленных файлов:
diff PostgreSQL1 PostgreSQL2 > PostgreSQL-Installed

Компиляция и оптимизация.

Первое, для уменьшения риска безопасности, мы создадим непривилегированный бюджет пользователя "postgres", который должен владеть файлами Postgres. Для этого используйте следующую команду:

Перейдите в новый PosgreSQL каталог, а затем в подкаталог "src". Введите следующие команды на вашем терминале:

Редактируйте файл Makefile.global (vi +210 Makefile.global) и измените следующие строки:

CFLAGS= -I$(SRCDIR)/include -I$(SRCDIR)/backend
Должна быть:
CFLAGS= -I$(SRCDIR)/include -I$(SRCDIR)/backend -O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer -fno-exceptions

Это оптимизационные флаги для сервера PostgreSQL. Конечно, вы должны приспособить их под вашу систему и процессор.

Сейчас, мы должны скомпилировать и инсталлировать PosgreSQL на сервере:

Команда "make" компилирует все исходные файлы в исполняемые двоичные файлы и команды "make install" инсталлирует исполняемые и все сопутствующие файлы в необходимое место. "mkdir" создаст новый каталог "pgsql" в каталогах "/usr/include" и "/usr/lib", и затем мы переместим все подкаталоги и файлы, связанные с PostgreSQL из каталогов "/usr/include" и "/usr/lib" в "/usr/include/pgsql" и "/usr/lib/pgsql" соответственно. Команда "chown" установит правильного владельца и группу для каталога "/var/lib/pgsql". Команда "strip" удалит все символы из объектных файлов. Это приведет к уменьшению размеров соответствующих файлов, что улучшит производительность программ. Команда "rm" удалит файлы "global1.description" и "local1_template1.description", которые не нужны программе PosgreSQL.

Создание базы данных инсталлированной из под бюджета суперпользователя Postgres

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

Опция "--pglib" будет задавать месторасположение библиотек PostgreSQL, а "-- pgdata" определит место, где будут располагаться ваши базы данных.

ЗАМЕЧАНИЕ. Не создавайте базы данных из под пользователя "root"! Это создаст большую дыру в безопасности.

Очистка после работы

Удаление пакета egcs-c++-version.i386.rpm для экономии дискового пространства.

Команды "rm" будет удалять все файлы с исходными кодами, которые мы использовали при компиляции и инсталляции PostgreSQL. Также будет удален сжатый архив PostgreSQL из каталога "/var/tmp".

Команда "rpm -e" удалит пакет egcs-c++ при помощи которого мы компилировали сервер PosgreSQL. Заметим, что пакет egcs-c++ требуется только для компиляции программ подобных PostgreSQL и может быть спокойно удален после окончания этой процедуры.

Конфигурации.

Для запуска PostgreSQL сервера следующие файлы должны быть созданы или скопированы в нужный каталог:

Копируйте файл postgresql в каталог "/etc/rc.d/init.d/".

Вы можете взять эти файлы из нашего архива floppy.tgz.

Конфигурация скрипта "/etc/rc.d/init.d/postgresql"

Настроим скрипт "/etc/rc.d/init.d/postgresql", который будет отвечать за запуск и остановку PostgreSQL сервера.
Создадим скрипт postgresql (touch /etc/rc.d/init.d/postgresql) и добавьте в него следующие строки:

Сейчас, мы должны сделать этот скрипт исполняемым и изменить права доступа к нему:

Создайте символическую rc.d ссылку для PostgreSQL следующей командой:

Запустите ваш новый PostgreSQL сервер вручную следующей командой:

Команды

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

Для определения нового пользователя в вашей базе данных используйте утилиту:

Для удаления пользователя из базы данных используйте утилиту destroyuser:

Для создания новой базы данных запустите утилиту createdb:

Или из терминальной программы Postgres (psql)

template1 _ > create database foo;
CREATEDB

ЗАМЕЧАНИЕ. Клиентское соединение должно быть разрешено с этого IP адреса и/или имени пользователя в файле "pg_hba.conf", расположенного в PG_DATA.

Другие полезные команды, выполняемые в терминальной программе Postgres (psql):

Соединение с новой базой данных:

template1 _ > \c foo
connecting to new database: foo
foo _ >

foo _ > create table bar (i int4, c char(16)); CREATE foo _ >

Для проверки новой таблицы используйте команду:

Для уничтожения таблицы, индекса, представления (view) используйте команду:

foo _ > drop table table_name;
foo _ > drop index index_name;
foo _ > drop view view_name;
Для вставки данных в: (таблица уже должна быть создана) foo _ > insert into table_name (name_of_attr1, name_of_attr2, name_of_attr3)
foo _ > values (value1, value2, value3);

Чтобы кто-либо смог обратиться к базе данных, необходимо сначала запустить сервер баз данных. Программа сервера называется postgres . Для работы программа postgres должна знать, где найти данные, которые она будет использовать. Указать это местоположение позволяет параметр -D . Таким образом, проще всего запустить сервер, выполнив команду:

в результате которой сервер продолжит работу в качестве процесса переднего плана. Запускать эту команду следует под именем учётной записи PostgreSQL . Без параметра -D сервер попытается использовать каталог данных, указанный в переменной окружения PGDATA . Если и эта переменная не определена, сервер не будет запущен.

Однако обычно лучше запускать postgres в фоновом режиме. Для этого можно применить обычный синтаксис, принятый в оболочке Unix:

Важно где-либо сохранять информацию, которую выводит сервер в каналы stdout и stderr , как показано выше. Это полезно и для целей аудита, и для диагностики проблем. (Более глубоко работа с файлами журналов рассматривается в Разделе 24.3.)

Программа postgres также принимает несколько других параметров командной строки. За дополнительными сведениями обратитесь к справочной странице postgres и к следующей Главе 19.

Такой вариант запуска довольно быстро может оказаться неудобным. Поэтому для упрощения подобных задач предлагается вспомогательная программа pg_ctl . Например:

Обычно возникает желание, чтобы сервер баз данных сам запускался при загрузке операционной системы. Скрипты автозапуска для разных систем разные, но в составе PostgreSQL предлагается несколько типовых скриптов в каталоге contrib/start-scripts . Для установки такого скрипта в систему требуются права root.

В различных системах приняты разные соглашения о порядке запуска служб в процессе загрузки. Во многих системах для этого используется файл /etc/rc.local или /etc/rc.d/rc.local . В других применяются каталоги init.d или rc.d . Однако при любом варианте запускаться сервер должен от имени пользователя PostgreSQL , но не root или какого-либо другого пользователя. Поэтому команду запуска обычно следует записывать в форме su postgres -c '. ' . Например:

Ниже приведены более конкретные предложения для нескольких основных ОС. (Вместо указанных нами шаблонных значений необходимо подставить правильный путь к каталогу данных и фактическое имя пользователя.)

Для запуска во FreeBSD воспользуйтесь файлом contrib/start-scripts/freebsd в дереве исходного кода PostgreSQL .

В OpenBSD , добавьте в файл /etc/rc.local следующие строки:

В системах Linux вы можете либо добавить

в /etc/rc.d/rc.local или в /etc/rc.local , либо воспользоваться файлом contrib/start-scripts/linux в дереве исходного кода PostgreSQL .

Используя systemd , вы можете применить следующий файл описания службы (например, /etc/systemd/system/postgresql.service ):

Для использования Type=notify требуется, чтобы сервер был скомпилирован с указанием configure --with-systemd .

Особого внимания заслуживает значение тайм-аута. На момент написания этой документации по умолчанию в systemd принят тайм-аут 90 секунд, так что процесс, не сообщивший о своей готовности за это время, будет уничтожен. Но серверу PostgreSQL при запуске может потребоваться выполнить восстановление после сбоя, так что переход в состояние готовности может занять гораздо больше времени. Предлагаемое значение 0 отключает логику тайм-аута.

В NetBSD можно использовать скрипт запуска для FreeBSD или для Linux , в зависимости от предпочтений.

В Solaris , создайте файл с именем /etc/init.d/postgresql , содержащий следующую стоку:

18.3.1. Сбои при запуске сервера

не означает, что у вас закончилось место на диске. Это значит, что установленное в вашем ядре предельное число семафоров System V меньше, чем количество семафоров, которое пытается создать PostgreSQL . Как и в предыдущем случае можно попытаться обойти эту проблему, запустив сервер с меньшим числом допустимых подключений (max_connections), но в конце концов вам придётся увеличить этот предел в ядре.

Если вы получаете ошибку « illegal system call » (неверный системный вызов), то, вероятнее всего, ваше ядро вовсе не поддерживает разделяемую память или семафоры. В этом случае вам остаётся только переконфигурировать ядро и включить их поддержку.

18.3.2. Проблемы с подключениями клиентов

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

Если вы читали руководство, вы, должно быть, слышали о концепции кластера postgresql. Когда вы впервые услышите эту концепцию, вы можете немного запутаться. Кластер генерируется инструментом initdb при установке базы данных.Папку pgdata, созданную после initdb, можно понимать как физическую структуру хранения кластера. Когда база данных запускается и останавливается, папка, указанная параметром pg_ctl -D, является папкой кластера, поэтому PG-сервер может работать на PG-кластере.

Определение понятия объектов базы данных в СУБД:

any defined object in a database that is used to store or reference data

Объекты базы данных в PG включают, например: таблицы кучи, индексы, последовательности, функции и т. Д.


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

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

2 Физическая структура организации

2.1 Файловая структура

Теперь, чтобы инициализировать кластер, используйте спецификацию initdb, чтобы указать путь генерации.

После указания tree наблюдает за структурой каталогов файлов PGDATA

Корневой каталог вышеупомянутой файловой структуры - это папка PGDATA, созданная initdb, которая соответствует физической структуре хранения кластера (внутреннюю часть папки BASE см. В следующем разделе)

пункт описание
PG_VERSION Файл, содержащий основной номер версии PostgreSQL.
base Содержит подкаталоги, соответствующие каждой базе данных
current_logfiles Запишите файл журнала, который в настоящее время записывается сборщиком журналов
global Подкаталог, содержащий таблицу с областью кластера, например pg_database
pg_commit_ts Подкаталог, содержащий данные отметки времени фиксации транзакции
pg_dynshmem Подкаталог, содержащий файлы, используемые подсистемой динамической общей памяти.
pg_logical Подкаталог, содержащий данные о состоянии для логической репликации
pg_multixact Подкаталог, содержащий данные о состоянии нескольких транзакций (для общих блокировок строк)
pg_notify Подкаталог с данными статуса LISTEN / NOTIFY
pg_replslot Подкаталог, содержащий данные слота репликации
pg_serial Подкаталог, содержащий информацию об отправленных сериализуемых транзакциях.
pg_snapshots Подкаталог, содержащий экспортированные снимки
pg_stat Подкаталог, содержащий постоянные файлы для подсистемы статистики.
pg_stat_tmp Подкаталог, содержащий временные файлы, используемые для подсистемы статистической информации
pg_subtrans Поддиректория, содержащая данные о статусе суб-транзакций
pg_tblspc Подкаталог, содержащий символические ссылки на табличные пространства
pg_twophase Содержит подкаталоги для подготовки файлов состояния транзакции
pg_wal Подкаталог, содержащий файлы WAL (журнал упреждающей записи)
pg_xact Подкаталог, содержащий данные о статусе фиксации транзакции.
postgresql.auto.conf Один для хранения ALTER SYSTEM Установите файл параметров конфигурации
postmaster.opts Файл, в котором записаны параметры командной строки, использованные при последнем запуске сервера.
postmaster.pid Файл блокировки, который записывает текущий идентификатор процесса postmaster (PID), путь к каталогу данных кластера, метку времени запуска postmaster, номер порта, путь к каталогу сокета домена Unix (пустой в Windows) и первый доступный listen_address ( IP-адрес или * , Или пустой означает, что TCP не прослушивается) и идентификатор сегмента общей памяти (файл не существует после закрытия сервера)

2.2 Организационная структура обычного табличного файла

Для каждой базы данных есть соответствующий подкаталог в PGDATA / base, а имя подкаталога - это OID базы данных в pg_database.

Давайте создадим таблицу ниже. Файл таблицы можно найти двумя способами:

Выполните запрос pg_class.relfilenode, чтобы получить relfilenode = 16384 таблицы tbl1. Для обычных файлов таблиц укажите номер файлового узла таблицы или индекса.

Таблица создается в библиотеке postgres, мы можем войти в каталог base / 13158, чтобы увидеть файл таблицы:

При определенных операциях с базой данных файлы таблиц перераспределяются, например truncate (Это также причина, по которой усечение выполняется быстрее, чем удаление).

2.3 Организационная структура файла системной таблицы

После инициализации системы таблицы не создаются, но многие файлы таблиц были созданы в base / 13158 /. Эти файлы являются текущими системными таблицами базы данных, такими как pg_class. Обратите внимание, что relfilenode системной таблицы равен 0. Для поиска таблицы можно использовать функцию oid скрытого столбца или pg_relation_filepath. файл.

Существует два типа системных таблиц: один - это уникальные системные таблицы в каждой базе данных, а другой - системные таблицы, общие для всех баз данных. Почему существуют общие таблицы? Например, pg_database записывает информацию обо всех базах данных в кластере, и нет необходимости хранить отдельную копию для каждой базы данных. Общие системные таблицы хранятся в $PGDATA/global/ Под содержимым.

Можно увидеть в каталоге данных *_fsm с участием *_vm Соответствуют два типа файлов, два типа файлов и файлы таблиц, которые будут представлены в следующих главах.

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

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

Есть два способа использовать табличное пространство:

  1. Укажите табличное пространство при создании таблицы
  2. Укажите табличное пространство при создании базы данных


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

После создания табличного пространства вы можете $PGDATA/pg_tblspc Найдите символьную ссылку табличного пространства и обратите внимание, что путь к табличному пространству должен быть согласованным после резервного копирования и восстановления.

Адрес, возвращаемый pg_relation_filepath pg_tblspc/46803/PG_10_201707211/13158/46807 , PG использует ссылку в каталоге pg_tblspc для поиска соответствующего табличного пространства. Настоящий каталог файла таблицы:

Где PG_10_201707211 определяется в соответствии с номером версии:

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

3 Организационная структура табличного файла


Табличный файл по умолчанию состоит из блока размером 8 КБ, а 8 КБ является базовой единицей чтения и записи базы данных. «Анализ ядра базы данных PostgreSQL» описывается так:

Каждая страница состоит из пяти частей.

пункт описание
PageHeaderData Длина 24 байта. Содержит общую информацию о странице, включая указатели свободного места.
ItemIdData Массив пар записей (смещение, длина), указывающих на фактический элемент. Каждый элемент занимает 4 байта.
Free space Нераспределенное пространство (свободное место). Указатели новых элементов выделяются с начала этой области, а новые элементы - с конца.
Items Сам предмет.
Special space Индексируйте данные, относящиеся к шаблонам доступа. В разных методах доступа к индексу хранятся разные данные. В обычной таблице пусто.

Первые 24 байта страницы образуют PageHeaderData. После заголовка страницы идет 4-байтовый ItemIdData, который является LinpX в пути, его можно понять как указатель на фактическое место хранения кортежа (TupleX на рисунке). Обратите внимание, что порядок хранения linp и кортежа следующий. И наоборот, linp растет сверху вниз, а кортеж - снизу вверх.

Информация о текущей странице определяется в PageHeaderData:

площадь Виды длина описание
pd_lsn PageXLogRecPtr 8 bytes LSN: первый байт после последнего байта записи WAL, которая последней изменила эту страницу.
pd_checksum uint16 2 bytes Код проверки страницы
pd_flags uint16 2 bytes Флаговый бит
pd_lower LocationIndex 2 bytes Смещение к началу свободного места
pd_upper LocationIndex 2 bytes Смещение до конца свободного места
pd_special LocationIndex 2 bytes Смещение к началу особого пространства
pd_pagesize_version uint16 2 bytes Информация о размере страницы и номере версии макета
pd_prune_xid TransactionId 4 bytes Самый старый восстановленный XMAX на странице или 0, если его нет

После заголовка ItemIdData из кода видно, что это 4-байтовая структура, используемая для побитовой разборки. Он записывает смещение, биты атрибутов и длину кортежа.

Кортеж обычно состоит из нескольких частей:

The overall structure of a heap tuple looks like:

Кортежи хранятся в прямом направлении от конца нераспределенного пространства. Фактическая структура зависит от содержимого таблицы. Все строки таблицы построены одинаково, и будет заголовок фиксированной длины HeapTupleHeaderData:

Информация, хранящаяся в HeapTupleHeaderData, является основой для реализации механизма MVCC.

площадь Виды длина описание
t_xmin TransactionId 4 bytes Вставить логотип XID
t_xmax TransactionId 4 bytes Удалить логотип XID
t_cid CommandId 4 bytes Вставить и / или удалить флаги CID (перезаписать t_xvac)
t_xvac TransactionId 4 bytes Операция VACUUM перемещает XID версии строки
t_ctid ItemPointerData 6 bytes TID текущей версии или указать на обновленную версию строки
t_infomask2 uint16 2 bytes Некоторые атрибуты плюс несколько флагов
t_infomask uint16 2 bytes Несколько флагов
t_hoff uint8 1 byte Смещение к пользовательским данным

Когда кортеж получается путем сканирования таблицы или индекса, кажется, что он просто получил искаженные символы. Имеет смысл разделить данные с информацией о структуре таблицы. Информация о структуре таблицы хранится в системной таблице pg_attribute. Ключевые значения для определения позиции домена - attlen и attalign.

4 Считанные данные таблицы


Индексное сканирование
Блок индекса btree сначала будет загружен в память, он найдет определенную страницу данных и смещение в индексе, затем загрузит указанную страницу в память и прочитает данные в соответствии с смещением. Видно, что операции ввода-вывода значительно сокращаются, и нет необходимости сканировать несколько страниц (стоимость - это сканирование индексных блоков и страниц).

Читайте также: