DBA2. «Администрирование PostgreSQL 9.5. Расширенный курс». Снимки и блокировки. Тема №04

preview_player
Показать описание
DBA2. «Администрирование PostgreSQL 9.5. Расширенный курс». Снимки и блокировки. Тема №04

Занятие проведено 16 февраля 2016 в офисе компании Yandex

Лекторы: Егор Рогов, Павел Лузанов

Данная видеозапись произведена компанией «Постгрес Профессиональный»
и является интеллектуальной спобственностью компании.

Видеозапись доступна для свободного просмотра.

При копировании и публикации необходимо указать владельца (компания
«Постгрес Профессиональный») и активную ссылку на сайт компании.

Внесение изменений в видеозапись, коммерческое использование запрещено.

Рекомендации по теме
Комментарии
Автор

Вопрос про RowExclusiveLock (в видео 52:18): При выполнении запроса, который будет использовать этот индекс, всё равно нужно будет видимость проверять и индекс тут никак не поможет.
Тогда зачем при создании индекса определяться с видимостью строк?

sitxmbg
Автор

в лекции указывается, что в postgresql нет аналога оракл-флэшбек, но это не совсем так... потенциально наличие версионности позволяет реализовать флешбек (вероятно необходима доработка алгоритма вакуумирования)... например для версии postgres 9.5 некий аналог flashback-query можно проиллюстрировать следующим примером:

--включаем параметр сохранения времени транзакций
alter system set track_commit_timestamp to 'on';

--устанавливаем расширение анализа страниц
CREATE EXTENSION pageinspect;

--создаем таблицу и делаем несколько апдейтов
db11=# create table t (n numeric);
CREATE TABLE
Time: 144, 480 ms
db11=# insert into t values(13);
INSERT 0 1
Time: 52, 304 ms
db11=# update t set n=25;
UPDATE 1
Time: 17, 214 ms
db11=# update t set n=44;
UPDATE 1
Time: 18, 587 ms
db11=# update t set n=61;
UPDATE 1
Time: 16, 987 ms

--читаем исторические данные
SELECT t_xmin, t_xmax
, pg_xact_commit_timestamp(t_xmin) dt_xmin
, ('x' || lpad((SELECT substring(get_raw_page::text from lp_off*2+57 for 2) FROM get_raw_page('t', 0)), 8, '0'))::bit(32)::int val
from heap_page_items(get_raw_page('t', 'main', 0));

t_xmin | t_xmax | dt_xmin | val

112253 | 112254 | 2016-06-02 10:35:56.96801+03 | 13
112254 | 112255 | 2016-06-02 10:36:28.669865+03 | 25
112255 | 112256 | 2016-06-02 10:36:37.032635+03 | 44
112256 | 0 | 2016-06-02 10:36:44.270829+03 | 61
(4 rows)

Time: 5, 293 ms

vladnevsky