Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1WvVvU-0003EU-4k for pgsql-bugs@arkaria.postgresql.org; Fri, 13 Jun 2014 18:10:08 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.80) (envelope-from ) id 1WvVvS-0006Rb-Pi for pgsql-bugs@arkaria.postgresql.org; Fri, 13 Jun 2014 18:10:06 +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 1WvVvS-0006Qb-1H for pgsql-bugs@postgresql.org; Fri, 13 Jun 2014 18:10:06 +0000 Received: from smtprelay0045.b.hostedemail.com ([64.98.42.45] helo=smtprelay.b.hostedemail.com) by magus.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1WvVvJ-0005IZ-On for pgsql-bugs@postgresql.org; Fri, 13 Jun 2014 18:10:01 +0000 Received: from filter.hostedemail.com (b-bigip1 [10.5.19.254]) by smtprelay02.b.hostedemail.com (Postfix) with ESMTP id CCBA8D381A; Fri, 13 Jun 2014 18:09:55 +0000 (UTC) X-Session-Marker: 616C76686572726540616C76682E6E6F2D69702E6F7267 X-Spam-Summary: 50, 0, 0, , d41d8cd98f00b204, alvherre@alvh.no-ip.org, :::, RULES_HIT:41:355:379:599:960:966:967:973:988:989:1260:1277:1311:1312:1313:1314:1345:1359:1437:1515:1516:1518:1519:1534:1542:1593:1594:1595:1596:1711:1730:1747:1777:1792:2196:2198:2199:2200:2393:2525:2560:2563:2682:2685:2692:2828:2859:2901:2933:2937:2939:2942:2945:2947:2951:2954:3022:3138:3139:3140:3141:3142:3354:3865:3866:3867:3868:3870:3871:3872:3873:3874:3934:3936:3938:3941:3944:3947:3950:3953:3956:3959:4184:4321:4385:4605:4659:5007:6119:6261:7903:8957:9025:9121:10004:10400:10450:10455:10848:11026:11232:11256:11257:11658:11914:12296:12438:12517:12519:12555:12660:12663:12679:13095:13141:13161:13229:13230:13894:13895:19904:19999:21060, 0, RBL:none, CacheIP:none, Bayesian:0.5, 0.5, 0.5, Netcheck:none, DomainCache:0, MSF:not bulk, SPF:fn, MSBL:0, DNSBL:none, Custom_rules:0:0:0 X-HE-Tag: fang51_909c43d7ece62 X-Filterd-Recvd-Size: 3175 Received: from eldon.alvh.no-ip.org (unknown [186.11.225.25]) (Authenticated sender: alvherre@alvh.no-ip.org) by omf07.b.hostedemail.com (Postfix) with ESMTPA; Fri, 13 Jun 2014 18:09:53 +0000 (UTC) Received: by eldon.alvh.no-ip.org (Postfix, from userid 1000) id 7B5391FC9; Fri, 13 Jun 2014 13:51:51 -0400 (CLT) Date: Fri, 13 Jun 2014 13:51:51 -0400 From: Alvaro Herrera To: Andres Freund Cc: PostgreSQL Bugs Subject: Re: pg_upgrade < 9.3 -> >=9.3 misses a step around multixacts Message-ID: <20140613175151.GN18688@eldon.alvh.no-ip.org> References: <20140530121631.GE25431@alap3.anarazel.de> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20140530121631.GE25431@alap3.anarazel.de> User-Agent: Mutt/1.5.21 (2010-09-15) X-Pg-Spam-Score: -1.9 (-) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgsql-bugs Precedence: bulk Sender: pgsql-bugs-owner@postgresql.org Andres Freund wrote: > Hi, > > When upgrading a < 9.3 cluster pg_upgrade doesn't bother to keep the old > multixacts around because they won't be read after the upgrade (and > aren't compatible). It just resets the new cluster's nextMulti to the > old + 1. > Unfortunately that means that there'll be a offsets/0000 file created by > initdb around. Sounds harmless enough, but that'll actually cause > problems if the old cluster had a nextMulti that's bigger than that > page. > > When vac_truncate_clog() calls TruncateMultiXact() that'll scan > pg_multixact/offsets to find the earliest existing segment. That'll be > 0000. If the to-be-truncated data is older than the last existing > segment it returns. Then it'll try to determine the last required data > in members/ by accessing the oldest data in offsets/. I'm trying to understand the mechanism of this bug, and I'm not succeeding. If the offset/0000 was created by initdb, how come we try to delete a file that's not also members/0000? I mean, surely the file as created by initdb is empty (zeroed). In your sample error message downthread, ERROR: could not access status of transaction 2072053907 DETAIL: Could not open file "pg_multixact/offsets/7B81": No such file or directory. what prompted the status of that multixid to be sought? I see one possible path to this error message, which is SlruPhysicalReadPage(). (There are other paths that lead to similar errors, but they use "transaction 0" instead, so we can rule those out; and we can rule out anything that uses MultiXactMemberCtl because of the path given in DETAIL.) There are four callsites that lead to that: RecordNewMultiXact GetMultiXactIdMembers (2x) TrimMultiXact Of those, only GetMultiXactIdMembers is likely to be called from vacuum (actually RecordNewMultiXact can too, in a few cases, if it happens to freeze a multi by creating another multi; should be pretty rare). But you were talking about vacuum truncating pg_multixact -- and I don't see how that's related to these functions. Is it possible that you pasted the wrong error message? -- Álvaro Herrera http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training & Services -- Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-bugs