Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1WsDGv-00014v-9i for pgsql-general@arkaria.postgresql.org; Wed, 04 Jun 2014 15:38:37 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.80) (envelope-from ) id 1WsDGt-000628-Qj for pgsql-general@arkaria.postgresql.org; Wed, 04 Jun 2014 15:38:35 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.80) (envelope-from ) id 1WsDGs-00061w-Qi for pgsql-general@postgresql.org; Wed, 04 Jun 2014 15:38:34 +0000 Received: from smtp88.ord1c.emailsrvr.com ([108.166.43.88]) by magus.postgresql.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.80) (envelope-from ) id 1WsDGm-0000Kv-Kh for pgsql-general@postgresql.org; Wed, 04 Jun 2014 15:38:33 +0000 Received: from localhost (localhost.localdomain [127.0.0.1]) by smtp4.relay.ord1c.emailsrvr.com (SMTP Server) with ESMTP id C51D5140C1D for ; Wed, 4 Jun 2014 11:38:25 -0400 (EDT) X-Virus-Scanned: OK Received: by smtp4.relay.ord1c.emailsrvr.com (Authenticated sender: bill-AT-publicrelay.com) with ESMTPSA id 391E8140D2D for ; Wed, 4 Jun 2014 11:38:24 -0400 (EDT) Message-ID: <538F3D70.6080902@publicrelay.com> Date: Wed, 04 Jun 2014 11:38:24 -0400 From: Bill Mitchell User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: General PostgreSQL List Subject: Partial solution to observed " MultiXactId ### has not been created yet -- apparent wraparound" issue with newly upgraded db X-Enigmail-Version: 1.6 Content-Type: multipart/alternative; boundary="------------080400090401040405050808" X-Pg-Spam-Score: -0.8 (/) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgsql-general Precedence: bulk Sender: pgsql-general-owner@postgresql.org This is a multi-part message in MIME format. --------------080400090401040405050808 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit I wanted to share an experience that we had this morning, after the upgrade from postgres 9.2.7 to postgres 9.3.4 on our production system. (The data set was upgraded in QA without issues,but I rather suspect that I had done a full 'vacuum' on that data set more recently). NOTE: this was within an Amazon Web Services machine, so it was using Amazon's packaged 9.2.7 version, and then we moved back to the RPMs pointed to by wget http://yum.postgresql.org/9.3/redhat/rhel-6-x86_64/pgdg-redhat93-9.3-1.noarch.rpm in order to get up to the 9.3 level... *The symptom:* db# vacuum country_state; ERROR: MultiXactId 4800022 has not been created yet -- apparent wraparound db# vacuum country; ERROR: MultiXactId 4800023 has not been created yet -- apparent wraparound *The solution (for small table)* Researching the mailing lists, I found this http://postgresql.1045698.n5.nabble.com/MultiXactId-error-after-upgrade-to-9-3-4-td5797923.html So, following this advice, I did the following: select * from country_state for update \g /tmp/ignore; select * from country for update \g /tmp/ignore; and now vacuum is happy with those tables again. *What's not working , still...* Unfortunately, getting this same symptom on a 3rd table is getting a bit large (102GB, with 28million rows) db=# vacuum article; ERROR: MultiXactId 4998189 has not been created yet -- apparent wraparound I'm wondering if there is a query which would just return the rows which had a "bad t_xmax value" (or if we can even differentiate those from correct values). - such that I can only search for those with the 'for update' construct. Some common information that I've seen provided in the past by others: db=# select txid_current(); txid_current -------------- 1008772125 (1 row) db=# SELECT datname, datfrozenxid FROM pg_database where datname='db'; datname | datfrozenxid -------------+-------------- db | 851079261 (1 row) db=# show autovacuum_freeze_max_age; autovacuum_freeze_max_age --------------------------- 200000000 (1 row) db=# show vacuum_freeze_min_age; vacuum_freeze_min_age ----------------------- 50000000 (1 row) db=# show vacuum_freeze_table_age; vacuum_freeze_table_age ------------------------- 150000000 (1 row) Thanks in advance for any advice Bill --------------080400090401040405050808 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit I wanted to share an experience that we had this morning, after the upgrade from postgres 9.2.7 to postgres 9.3.4 on our production system.  (The data set was upgraded in QA without issues,but I rather suspect that I had done a full 'vacuum' on that data set more recently).  NOTE: this was within an Amazon Web Services machine, so it was using Amazon's packaged 9.2.7 version, and then we moved back to the RPMs pointed to by wget http://yum.postgresql.org/9.3/redhat/rhel-6-x86_64/pgdg-redhat93-9.3-1.noarch.rpm in order to get up to the 9.3 level...

The symptom:

db# vacuum country_state;
ERROR:  MultiXactId 4800022 has not been created yet -- apparent wraparound

db# vacuum country;
ERROR:  MultiXactId 4800023 has not been created yet -- apparent wraparound


The solution (for small table)
Researching the mailing lists, I found this
http://postgresql.1045698.n5.nabble.com/MultiXactId-error-after-upgrade-to-9-3-4-td5797923.html

So, following this advice, I did the following:
select * from country_state for update \g /tmp/ignore;
select * from country for update \g /tmp/ignore;

and now vacuum is happy with those tables again.


What's not working , still...

Unfortunately, getting this same symptom on a 3rd table is getting a bit large (102GB, with 28million rows)
db=# vacuum article;
ERROR:  MultiXactId 4998189 has not been created yet -- apparent wraparound

I'm wondering if there is a query which would just return the rows which had a "bad t_xmax value"  (or if we can even differentiate those from correct values). - such that I can only search for those with the 'for update' construct.



Some common information that I've seen provided in the past by others:

db=# select txid_current();
 txid_current
--------------
   1008772125
(1 row)

db=# SELECT datname, datfrozenxid FROM pg_database where datname='db';
   datname   | datfrozenxid
-------------+--------------
 db |    851079261
(1 row)
 

db=# show autovacuum_freeze_max_age;
 autovacuum_freeze_max_age
---------------------------
 200000000
(1 row)

db=# show vacuum_freeze_min_age;
 vacuum_freeze_min_age
-----------------------
 50000000
(1 row)

db=# show vacuum_freeze_table_age;
 vacuum_freeze_table_age
-------------------------
 150000000
(1 row)


Thanks in advance for any advice
Bill

--------------080400090401040405050808--