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.96) (envelope-from ) id 1wJyYC-000SYk-1z for pgsql-performance@arkaria.postgresql.org; Mon, 04 May 2026 19:01:52 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wJyY9-008SCD-1v for pgsql-performance@arkaria.postgresql.org; Mon, 04 May 2026 19:01:49 +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.96) (envelope-from ) id 1wJyY9-008SC4-0m for pgsql-performance@lists.postgresql.org; Mon, 04 May 2026 19:01:49 +0000 Received: from mail-ej1-x62c.google.com ([2a00:1450:4864:20::62c]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wJyY6-00000000Uvm-30Cx for pgsql-performance@postgresql.org; Mon, 04 May 2026 19:01:48 +0000 Received: by mail-ej1-x62c.google.com with SMTP id a640c23a62f3a-bb3c4d8cc29so706447266b.1 for ; Mon, 04 May 2026 12:01:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777921305; x=1778526105; darn=postgresql.org; h=content-transfer-encoding:autocrypt:subject:from:to :content-language:user-agent:mime-version:date:message-id:from:to:cc :subject:date:message-id:reply-to; bh=B6HF3fcDtPFo8CWIUIDcxIsMSnhGCWFiwNzcjDwzVEw=; b=VABHDsyKihi6RIAyF83s7N8cHcGRX1Te/yN9eftv4dSKg9egG25omcL3f6anVThsZn Uy9a3W265qgi6a6l+034/Eh7RNLAnQ8PoII+tqag1p2wejJ20EjlFkoMBTDuWeDoqCCL x6Aani/4IbsOr+ABt3ChyOFjt9pZt1QU/XPJNE0ovYNeVynPi8YZYvJRz+I1eB50KBnE dFMA4ZDTXDJjLfrheKFzYpksTovz5WmhoDvfl539BMiIu+IMdP5qdEqA5dF3rds/wvIx ARfJ16YownWuGoBq+agWIAyL1C5BfYEKvjS/Zg0Zf5roEyYPdEw1n8JtWR4VPe9En1A4 2lWQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777921305; x=1778526105; h=content-transfer-encoding:autocrypt:subject:from:to :content-language:user-agent:mime-version:date:message-id:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=B6HF3fcDtPFo8CWIUIDcxIsMSnhGCWFiwNzcjDwzVEw=; b=HagXgR3iKj8dKvZw60Evaz8/jg++IBSgilYT8tdNs0105RQg6RKpxG21kb7lXMh+37 9J+dfuh6BlbnMZTcimLopYvmcR0SUaz2Ul8V4yopyQmkp7xEjI2z79Q53iisgNkst3Aw u/1Hc7vK0u8Vq3U4vtLwfEifNz/U6vXP4Dtab6BhpunpyBmvKywPllqt61u2vXx7G5b9 OR1jQn1QSsBQNPDdzhr9GBLiFfD0Sx4Uez2S2vs7AQNWP70FHMIVA9RD7QWbzeYNtBNs Eq9ri91JazdtXuSjNETOZdK+DuOzIi7oZc0+9v1qud/xgznM9RofWOUUd8Ie4y/pbG6B RDVQ== X-Gm-Message-State: AOJu0Yw8HnWzIMtP2sZjozUrBvI8Rqawh5wtGqoJlsS9in1hdPvS9JFK Ly9f/H4B9J2IRfmFyU1Ex18sJ5v3ompjpveK5bclErV1YdKuHuFa2tJm1y/8VNOASfA= X-Gm-Gg: AeBDietUqIaChwymcY6yGn0o4TNNnp36mGKXWpcq7eUL62jRyX/v25f2hobf84rcPMn VBXzEQXH2si5/P9Dp95Mi+zaFi6xVrOjLy4iZgXCiVeTSSJGukuIE8C8cKB0a1TJXFOmSptDZWm 1IGzXFeKGI6emINeiSIpX9GqmfelOJvuNe8znoftw8T9/tfUi7pfQ60iJ3hpd5stGX4539OhJjQ ICizPF9f29Kcx2T+0JGnPgL7jAyD33Y1jUL4Gz9woOpQdLT+PoK+5l+NWeXhkbABXR1uygVEVEO 41UqHVFSgAAujAgw/OSoGLUJeAGwgplYeTbxD9lhJwzYAoNWLfiDsdyVHUnN1ek8vwjA0Bg4lRV T/GzkdU0yySe+zxX8A9eHPB5Ka3coOZtXfLnnY7B07eEddbjqmqae48vzVc0S6zCdjTrnwhm3+w IbGUEBGk5eDKDoTQImvR8DEuu3xOJOOj0363UONtGYIB4ZMC2I X-Received: by 2002:a17:907:72d0:b0:ba8:7211:58c with SMTP id a640c23a62f3a-bbffb8499a7mr621434366b.18.1777921304991; Mon, 04 May 2026 12:01:44 -0700 (PDT) Received: from [192.168.1.63] ([222.167.211.41]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-bbe69f6bad2sm433838966b.5.2026.05.04.12.01.44 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 04 May 2026 12:01:44 -0700 (PDT) Message-ID: Date: Tue, 5 May 2026 00:01:42 +0500 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US To: "pgsql-performance@postgresql.org" From: =?UTF-8?B?0KDRg9GB0LjQvdC+0LIg0KHQtdC80LXQvQ==?= Subject: Improving insert performance Autocrypt: addr=mrpinkolik@gmail.com; keydata= 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 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk Hello everyone! I am trying to optimize PostgreSQL for insert performance and I think I've reaced the limit of my knowledge and experience. Here's what I'm trying to do: I have a synthetic java application which simulates a real production application. This application is using postgresql jdbc driver in combination with jooq framework. This app inserts records into my table called "outbox". So far, I was able to reach RPS of 35k inserts per second. But I can't tune it any better, neither I understand where is the bottleneck. What I am using for PostgreSQL: 48 vCPU, 64 GB RAB, SSD Version: 17 Number of postgres instances: 1 Synthetic app settings per app (run on different VMs than postgres): connection pool size: 200 insert threads: 50 transactional inserts: yes Number of instances of synthetic apps: 5 Postgresql.conf options which differ from defaults: ``` max_connections = 1200 # change requires restart ssl = on shared_buffers = 8GB                    # min 128kB huge_pages = on #on, off, or try maintenance_work_mem = 4GB            # min 64kB dynamic_shared_memory_type = posix      # the default is usually the first option effective_io_concurrency = 200           # 1-1000; 0 disables prefetching max_worker_processes = 48               # (change requires restart) max_parallel_workers_per_gather = 8    # limited by max_parallel_workers max_parallel_maintenance_workers = 8   # limited by max_parallel_workers max_parallel_workers = 48               # number of max_worker_processes that wal_level = logical                    # minimal, replica, or logical wal_buffers = 256MB                       # min 32kB, -1 sets based on shared_buffers checkpoint_completion_target = 0.9     # checkpoint target duration, 0.0 - 1.0 max_wal_size = 32GB min_wal_size = 4GB shared_preload_libraries = 'pg_stat_statements,decoderbufs' # (change requires restart) wal_compression = on autovacuum=off #throuth put commit_delay=10000 # 10ms commit_siblings = 50 full_page_writes=off fsync=off random_page_cost = 1.1 effective_cache_size = 20GB ``` DDL of my table: ``` CREATE UNLOGGED TABLE ${database.defaultSchemaName}.outbox (     queue_name varchar(255) NOT NULL,     payload bytea NOT null ) ``` What I observe: User CPU usage: ~15-20% Idle CPU: ~80-90% IO wait: ~0-0.5% pg_locks is around 400-500 out of 1000 connections at all times for this table. So I don't see that PostgreSQL is bound to hardware since CPU is not used at full, IO is also not the problem, RAM also seems to be fine. I tried scaling synthetic applications but it doesn't give any RPS boost. So I'm stuck here. Have I reached PostgreSQL performance cap? Or do I have a bottleneck somewhere else? I don't have any ideas anymore what can I try, I would appreciate any help