Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uCg7L-000mud-TN for pgsql-hackers@arkaria.postgresql.org; Wed, 07 May 2025 14:51:28 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1uCg7K-00EdzM-L7 for pgsql-hackers@arkaria.postgresql.org; Wed, 07 May 2025 14:51:26 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uCg7K-00Edyp-AW for pgsql-hackers@lists.postgresql.org; Wed, 07 May 2025 14:51:26 +0000 Received: from mail-io1-xd2f.google.com ([2607:f8b0:4864:20::d2f]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1uCg7H-000e6C-0u for pgsql-hackers@lists.postgresql.org; Wed, 07 May 2025 14:51:25 +0000 Received: by mail-io1-xd2f.google.com with SMTP id ca18e2360f4ac-85de3e8d0adso145613439f.1 for ; Wed, 07 May 2025 07:51:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746629481; x=1747234281; darn=lists.postgresql.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=apHytQG7iSa0PTRO4a6mM/r3NO7OKAY9ni50bis8hYM=; b=OieA5dxrLlBKsYZyMLX1vwU20nZ09fxqrZMmVPCmkZSSysbRD3qlzSQEJnhWCs7K4l hmbN01kdvtj7CQ+3NxO9p9EpoXPaZTmL/AkQQYshUxW03S1BpJPwkN8QiP+qrDb+Uwv0 kVNZqBI9ZYCnwoDolTRRIZ4Y9rWaZ1zEY4GOPyu24YdSFUjTRjiWItsY/pWzuzBQVM5o A5IGZlm9nRJ/MkhEDe7CLk7kf1W674gekzPl5pZBrk1l0vt/CCErb1bXQcO7ChOVGRa2 2OOZ9Bi7m4CPW3pwuplHHXH0MrEf0xstGVSgPBXYrDiol38Nbd9ZtPstRTmGv5W/hke3 JCIw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746629481; x=1747234281; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=apHytQG7iSa0PTRO4a6mM/r3NO7OKAY9ni50bis8hYM=; b=ejUYLe0AeTHPOk58G9BYs2tPV/bsKbXRuek6Otn7Yn5nGR8C3gfC7es/QsffQQOCD7 jLoehbSdPggHde4fSqMJppdpS7zAdHsck4LcBxRYPgfaYWKKhQ3Rsqp2gAfCNW9dX8G2 4nvvTe4N5ZPxtL8wS5kLq5wsvmNPKHtG/+lCuZ/fJj+XN0jVgls1yBI6e0K79G/xsQZc V0iEkO/teN4PgKkLesAreA1ifrN5totQrNYvScB3zxEWOyoMCP9XGpbKDRL4qOoPlHtU soa6eEYtR6Jaxcih2WcT3rEJ7B5CmXS/PvlYTSqVvopE+U66C5Eg2lTGrIWqW6vp8+2O uPmQ== X-Forwarded-Encrypted: i=1; AJvYcCWqj3jljwFu6tswxJKMakD8DgbKmtupFK1XRaXXORDfJLRmLsmxsowPcfJSBC9wW20PZ3X0qTGhcln4S94H@lists.postgresql.org X-Gm-Message-State: AOJu0Yxm4/6wsGUtUS6HIbQIIQsHmWYYiRK5oGwpMJc6pkdQoLov7wcT +qhOI1Sqi7eqzN1ZgZ7mS2dRfkIhV5HvPY9FnlrUelyM3wz9m7aP X-Gm-Gg: ASbGncuG1viJ6Ci/hEaOUmfbx2uYWsTyB0iiosl9BRXqb6QnDPdZMZh8UQxVNXB2VT/ uIrMuXS3AXOBY1E/IzMcampDPQ8b8NpV2qAxqDLt75TLSfnXkeDL/toTjuiUb6Du1MthzZBb55H PSB9pBdkLOgPrvtyeW24aufsccrJOC1oyppCEG+xrDb0t4LvXZ49ZprVfI1csgstoiydCibBDmj 3WbFhT2mZHKmCTxywNDpjlIly/CJUcWjPx5O6W3/d1Q3cnNfVBAcgnLTj/G98pGy37Ai2eg4Ric ADNoN/7RzZILvXAZGVXxXB7nhPMGL9yXTeKRmnbKxqcb4v0gwL418ooo0D5aDXNkh5EyXSk8GXh vpxrwrRoMwmt3mT7CD5qj8ncNJPLmRPU= X-Google-Smtp-Source: AGHT+IHFhrRM/PxxCTyMhpDVR+5CamDJm9Xg5xrkiBBMGkGYwfqmOofTgPuoGmqn2Y1Bfcc2gm4/Nw== X-Received: by 2002:a05:6602:3f82:b0:864:ad44:e60b with SMTP id ca18e2360f4ac-8674703dafcmr438975039f.0.1746629481490; Wed, 07 May 2025 07:51:21 -0700 (PDT) Received: from nathan (162-195-168-172.lightspeed.stlsmo.sbcglobal.net. [162.195.168.172]) by smtp.gmail.com with ESMTPSA id 8926c6da1cb9f-4f88aa8daa1sm2672777173.105.2025.05.07.07.51.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 May 2025 07:51:20 -0700 (PDT) Date: Wed, 7 May 2025 09:51:19 -0500 From: Nathan Bossart To: Tom Lane Cc: Hannu Krosing , PostgreSQL Hackers Subject: Re: Horribly slow pg_upgrade performance with many Large Objects Message-ID: References: <4044567.1744128814@sss.pgh.pa.us> <4047312.1744130263@sss.pgh.pa.us> <4050387.1744132029@sss.pgh.pa.us> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="Rf+sQbgMy9niUMzf" Content-Disposition: inline In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --Rf+sQbgMy9niUMzf Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Mon, May 05, 2025 at 02:23:25PM -0500, Nathan Bossart wrote: > That leaves pg_shdepend. For now, I've just instructed pg_upgrade to COPY > the relevant pg_shdepend rows as an independent step, but perhaps there's a > reasonably straightforward way to put that in pg_dump, too. It turns out there is. TableDataInfo's filtercond field can be used to easily add a WHERE clause to the data dumping command. On my laptop, upgrading with --jobs=8 with 10M large objects evenly distributed across 10 databases (each with a non-bootstrap-superuser owner and another role with select rights) takes ~100 seconds without this patch and ~30 seconds with it. I've also added dependency tracking, version checks (this only works for upgrades from >=v12 for now), a hack to ensure the columns for pg_largeobject_metadata/pg_shdepend are collected, and comments. I'm sure there's something I've missed, but this patch has worked well in my tests thus far. Taking a step back, I'm a little disappointed in the gains here. A 3-9x speedup is nice, but I guess I was hoping to find another order of magnitude somewhere. To do any better, I think we'd need to copy the files for pg_largeobject_metadata directly for upgrades from >= v16, but that would have to fit somewhere between when pg_restore creates the database and when it restores any large object comments/seclabels. I'm not wild about the amount of hackery required to get that working. -- nathan --Rf+sQbgMy9niUMzf Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename=v2-0001-pg_upgrade-Use-COPY-for-large-object-metadata.patch