Scene I
Session A
test=# begin;
BEGIN
test=# alter table testbb rename to testb;
ALTER TABLE
Session B
test=# select * from pg_stat_activity ;
datid | datname | procpid | sess_id | usesysid | usename | current_query | waiting | query_start | backend_start | cl
ient_addr | client_port | application_name | xact_start | waiting_reason
-------+---------+---------+---------+----------+---------+----------------------------------+---------+-------------------------------+-------------------------------+---
----------+-------------+------------------+-------------------------------+----------------
47454 | test | 16727 | 52 | 10 | gpadmin | <IDLE> in transaction | f | 2017-01-03 04:45:49.091992-08 | 2017-01-03 03:45:43.311296-08 |
| -1 | psql | 2017-01-03 04:45:38.076153-08 |
47454 | test | 17182 | 53 | 10 | gpadmin | select * from pg_stat_activity ; | f | 2017-01-03 04:46:09.522987-08 | 2017-01-03 04:07:52.883441-08 |
| -1 | psql | 2017-01-03 04:46:09.522987-08 |
47454 | test | 26557 | 54 | 10 | gpadmin | <IDLE> | f | | 2017-01-03 04:46:01.170091-08 |
| -1 | psql | |
(3 rows)
test=# vacuum freeze;
Session C
-- Before vacuum freeze
test=# select datname, age(datfrozenxid) from pg_database ;
datname | age
-----------+--------
test | 162
-- During vacuum freeze
test=# select datname, age(datfrozenxid) from pg_database ;
datname | age
-----------+--------
test | 282
-- After vacuum freeze
test=# select datname, age(datfrozenxid) from pg_database ;
datname | age
-----------+--------
test | 319
Scene II
Session A
test=# rollback;
ROLLBACK
test=# select * from pg_stat_activity ;
datid | datname | procpid | sess_id | usesysid | usename | current_query | waiting | query_start | backend_start | cl
ient_addr | client_port | application_name | xact_start | waiting_reason
-------+---------+---------+---------+----------+---------+----------------------------------+---------+-------------------------------+-------------------------------+---
----------+-------------+------------------+-------------------------------+----------------
47454 | test | 16727 | 52 | 10 | gpadmin | <IDLE> | f | 2017-01-03 04:51:39.030898-08 | 2017-01-03 03:45:43.311296-08 |
| -1 | psql | |
47454 | test | 17182 | 53 | 10 | gpadmin | <IDLE> | f | 2017-01-03 04:52:11.783251-08 | 2017-01-03 04:07:52.883441-08 |
| -1 | psql | |
47454 | test | 26557 | 54 | 10 | gpadmin | select * from pg_stat_activity ; | f | 2017-01-03 04:52:21.959227-08 | 2017-01-03 04:46:01.170091-08 |
| -1 | psql | 2017-01-03 04:52:21.959227-08 |
(3 rows)
Session B
test=# vacuum freeze;
VACUUM
test=# select datname, age(datfrozenxid) from pg_database ;
datname | age
-----------+--------
test | 157
Scene III
Session A
test=# vacuum freeze;
Session B
-- During vacuum freeze
test=# alter table testbb rename to testb;
ALTER TABLE
test=# select datname, age(datfrozenxid) from pg_database ;
datname | age
-----------+--------
test | 300
-- After vacuum freeze
test=# select datname, age(datfrozenxid) from pg_database ;
datname | age
-----------+--------
test | 158
Scene IV
无论是alter table还是select session,只要这个session在vacuum freeze期间出现,age就会变大。如果session在vacuum freeze期间结束,age就会被缩回
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26477398/viewspace-2135246/
,如需转载,请注明出处,否则将追究法律责任。