мне сно , при апдейте кортежа в varchar запись удаляется с диска и вписывается на новое место в памяти
Ммм. Сомневаюсь что действительно что-то ясно.
Для начала:
на диске данные существуют ровно в том же виде, что и затем обрабатываются в памяти. Как побочного следствие именно этого, кстати, базы postgresql физически не переносимы на другие процессорные архитектуры, только dump/restore или ещё какую логическую репликацию. А ещё есть забавный фокус выравнивания структур данных в памяти. Из-за чего при разном порядке столбцов в таблице идентичный объём записанных данных может различаться по требуемому месту на дисках.
postgresql - mvcc база. При удалении строки запись не удаляется. Вообще. Только проставляется xmax и страничка отмечается грязной. Операции обновления строки не существует вовсе. Update - это всегда delete + insert. Обновлённая запись при этом попадает в отличающееся место таблицы, так, что в таблице одновременно существую и старая и новая версии строки. И их может быть много.
(enterprisedb грозятся доделать zheap в pg13, так что может будет веселее, но в версиях до 11 гарантированно как я описал, в 12 - только если вы смелый человек и будете собирать экспериментальные расширения)
Итак, далее приходит autovacuum или vacuum, строки которые уже никому не могут быть видны вычищаются и считаются пустым пространством, в том числе по
free space map.
Пишущие операции пытаются найти место под запись:
- в той же самой странице данных
- в какой-то странице начиная от начала таблицы
- в худшем случае создают новую страницу
Да, может быть что остались области в датафайлах, в которых ничего нет и даже ничего полезного туда и не поместится.
занимаемой процессом памяти на жестком диске
Что это такое?
Если интересен формат датафайлов - то вам дорога в исходники базы. Для ОС выделяются блоки на диске по 8кб и в них хранится какая-то бинарная штука.
Касательно private памяти backend'а - в postgresql есть менеджер памяти, называемый memory context. backend память запрашивает у ОС блоками, что-то делает что ему надо используя эту память под всякую мелочь или не очень мелочь, затем memory context обнуляется или удаляется и память возвращается ОС. Большинство контекстов существуют не долго, на транзакцию или на запрос, например.
Отладчик широко распространён - gdb. Без dbg сборки, впрочем, там явно будет ничего не понятно.