Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pCdIW-00007G-WC for pgsql-hackers@arkaria.postgresql.org; Tue, 03 Jan 2023 09:09:29 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pCdIV-000872-0W for pgsql-hackers@arkaria.postgresql.org; Tue, 03 Jan 2023 09:09:27 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pCdIU-00086t-9p for pgsql-hackers@lists.postgresql.org; Tue, 03 Jan 2023 09:09:26 +0000 Received: from mail-wm1-x32b.google.com ([2a00:1450:4864:20::32b]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1pCdIR-0001Qb-FW for pgsql-hackers@lists.postgresql.org; Tue, 03 Jan 2023 09:09:25 +0000 Received: by mail-wm1-x32b.google.com with SMTP id k26-20020a05600c1c9a00b003d972646a7dso19432370wms.5 for ; Tue, 03 Jan 2023 01:09:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=htdE8pvNxVdHAMOeTAzswiNe7ccpxTAXkSgOCf8hiRE=; b=Zvzhn51xX1h5rgIQ+WUNYQ1pUiUNVzvCiDK1GZmpuraNQOCr+qD1NT5rf4ZH0JZCGS 3a1Cbt6lHWDoJFaHOx6jn1G2YEWbM3uvAAnOjfT2X9GNKNwggxmE87DHiegOQ7Jrah6Q DhZOIjrqpIcoO03imcQD3Wce4unPdBcmjDoUWeE0rWrAAm0EO1J1iUG1ErN98sFEP9w/ nz7dxY+wUdffdMiXQeeV0ihanO4IEw82xl9UmgwQnDEEGaraTBjuF3tx1of5tQP1hFHs pA1BjCa43hcRXB+72f5CfzbnsRANm69a0UmXj9d60WLIYD+KwhKi3VJLNQ7xHRyYdXOV nicg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=htdE8pvNxVdHAMOeTAzswiNe7ccpxTAXkSgOCf8hiRE=; b=PbNcHi+pYUlPODGiQScG+hRuE8icSgzXAw5RSXKzys7/wp4u2jA8lsVhGQ9y5TPstl DPXJjqJ1oohjr6Lc+YdMfMnFnX4YhAIrEXCjOHgEiyE6bn85Rf80GITCboy8y9B8kiLQ jz/jK4/7vOHYCa0v8kROgfvWjysu8HHXDXsXUlxfJReef7e0H9l1xYgyLz2IxsT6xxR6 O7UJA9OuHboNJ25cILWiNUffvI9XM40Yc482kwdGHdtP7Vo7Q9+hjJC4OjxccyvCX7s6 HWp2zXWkibmO4HzXp5y2b2EDZYnWwxHtsMeTHoaPJkyLEyTELs/ITMdzZrg1RkrBEfu7 8A0g== X-Gm-Message-State: AFqh2krE4X2NhY3WAu0a9YOjjxuziu7lmvsR8uGdkYQvuTXyNZ3RLuTz ipfb/F/VbW47OEgA/pN8NPF4IuxD/QDQX/xlSdLm7VGXcyo= X-Google-Smtp-Source: AMrXdXtndNuskZhTps9c5gOSMSsrgUNGW5Jv6/9ohhAx8sAjWPFUqkEDc6KemjxO6oE/drTTQb3xqUTfAsRCe4F39Qc= X-Received: by 2002:a05:600c:3786:b0:3d0:bda:f20 with SMTP id o6-20020a05600c378600b003d00bda0f20mr2043528wmr.105.1672736961904; Tue, 03 Jan 2023 01:09:21 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: shveta malik Date: Tue, 3 Jan 2023 14:39:08 +0530 Message-ID: Subject: Re: Perform streaming logical transactions by background workers and parallel apply To: "wangw.fnst@fujitsu.com" Cc: Amit Kapila , "houzj.fnst@fujitsu.com" , Peter Smith , Masahiko Sawada , Dilip Kumar , "shiy.fnst@fujitsu.com" , PostgreSQL Hackers , shveta malik Content-Type: multipart/mixed; boundary="0000000000006b354f05f1586cb9" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000006b354f05f1586cb9 Content-Type: text/plain; charset="UTF-8" On Tue, Jan 3, 2023 at 11:10 AM wangw.fnst@fujitsu.com wrote: > > On Mon, Jan 2, 2023 at 18:54 PM Amit Kapila wrote: > > On Fri, Dec 30, 2022 at 3:55 PM wangw.fnst@fujitsu.com > > wrote: > > > > > > I've checked it and it looks good to me. > > > Rebased the other patches and ran the pgident for the patch set. > > > > > > Attach the new patch set. > > > > > > > I have added a few DEBUG messages and changed a few comments in the > > 0001 patch. With that v71-0001* looks good to me and I'll commit it > > later this week (by Thursday or Friday) unless there are any major > > comments or objections. > > Thanks for your improvement. > > Rebased the patch set because the new change in HEAD (c8e1ba7). > Attach the new patch set. > > Regards, > Wang wei Hi, In continuation with [1] and [2], I did some performance testing on v70-0001 patch. This test used synchronous logical replication and compared SQL execution times before and after applying the patch. The following cases are tested by varying logical_decoding_work_mem: a) Bulk insert. b) Bulk delete c) Bulk update b) Rollback to savepoint. (different percentages of changes in the transaction are rolled back). The tests are performed ten times, and the average of the middle eight is taken. The scripts are the same as before [1]. The scripts for additional update and delete testing are attached. The results are as follows: RESULT - bulk insert (5kk) --------------------------------------------------------------- logical_decoding_work_mem 64kB 256kB 64MB HEAD 34.475 34.222 34.400 patched 20.168 20.181 20.510 Compare with HEAD -41.49% -41.029% -40.377% RESULT - bulk delete (5kk) --------------------------------------------------------------- logical_decoding_work_mem 64kB 256kB 64MB HEAD 40.286 41.312 41.312 patched 23.749 23.759 23.480 Compare with HEAD -41.04% -42.48% -43.16% RESULT - bulk update (5kk) --------------------------------------------------------------- logical_decoding_work_mem 64kB 256kB 64MB HEAD 63.650 65.260 65.459 patched 46.692 46.275 48.281 Compare with HEAD -26.64% -29.09% -26.24% RESULT - rollback 10% (5kk) --------------------------------------------------------------- logical_decoding_work_mem 64kB 256kB 64MB HEAD 33.386 33.213 31.990 patched 20.540 19.295 18.139 Compare with HEAD -38.47% -41.90% -43.29% RESULT - rollback 20% (5kk) --------------------------------------------------------------- logical_decoding_work_mem 64kB 256kB 64MB HEAD 32.150 31.871 30.825 patched 19.331 19.366 18.285 Compare with HEAD -39.87% -39.23% -40.68% RESULT - rollback 30% (5kk) --------------------------------------------------------------- logical_decoding_work_mem 64kB 256kB 64MB HEAD 28.611 30.139 29.433 patched 19.632 19.838 18.374 Compare with HEAD -31.38% -34.17% -37.57% RESULT - rollback 50% (5kk) --------------------------------------------------------------- logical_decoding_work_mem 64kB 256kB 64MB HEAD 27.410 27.167 25.990 patched 19.982 18.749 18.048 Compare with HEAD -27.099% -30.98% -30.55% (if "Compare with HEAD" is a positive number, it means worse than HEAD; if it is a negative number, it means better than HEAD.) Summary: Update shows 26-29% improvement, while insert and delete shows ~40% improvement. In the case of rollback, the improvement is somewhat between 27-42%. The improvement slightly decreases with larger amounts of data being rolled back. [1] https://www.postgresql.org/message-id/OSZPR01MB63103AA97349BBB858E27DEAFD499%40OSZPR01MB6310.jpnprd01.prod.outlook.com [2] https://www.postgresql.org/message-id/OSZPR01MB6310174063C9144D2081F657FDE09%40OSZPR01MB6310.jpnprd01.prod.outlook.com thanks Shveta --0000000000006b354f05f1586cb9 Content-Type: application/x-zip-compressed; name="scripts.zip" Content-Disposition: attachment; filename="scripts.zip" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lcg09xid0 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 --0000000000006b354f05f1586cb9--