Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1iZ4kF-0006uY-Mc for pgsql-hackers@arkaria.postgresql.org; Mon, 25 Nov 2019 03:09:00 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1iZ4kE-0006rc-6j for pgsql-hackers@arkaria.postgresql.org; Mon, 25 Nov 2019 03:08:58 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1iZ4kD-0006om-GO for pgsql-hackers@lists.postgresql.org; Mon, 25 Nov 2019 03:08:57 +0000 Received: from mail-io1-xd44.google.com ([2607:f8b0:4864:20::d44]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1iZ4k9-0001NA-UX for pgsql-hackers@postgresql.org; Mon, 25 Nov 2019 03:08:56 +0000 Received: by mail-io1-xd44.google.com with SMTP id j20so14455990ioo.11 for ; Sun, 24 Nov 2019 19:08:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=leadboat.com; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=nnHwLxvx/RS1/ACEyPGymr1l7JJ0/3tdhIScPeDFeYo=; b=SOLTsgO3qmXkl2VTIHnkgq5nKIe2WxaH8H8F/dJMPaC4e4HWd1HK+l3YrbxQLkud6z YIzZSjlaEaNoD0CKw0hcqBAU6nWI9SdN5bNuEjJ1jhT83J0Z+nK2GV8QBd5PLmJJ3wzx blvQ+m5cbxx706Oes1fQ/VC256bXARHGNtdYI= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=nnHwLxvx/RS1/ACEyPGymr1l7JJ0/3tdhIScPeDFeYo=; b=BDv06kJXIS2sJjE1EgYlNrzu5NMJCarztfBsAjSpWvVR3H7TO+n5l41KyB3WM6Rq5n UhUg0oa4al19A661JoEUcXvG5RSErtXMyYVGtL35Fo4AjnTRGEhmZ6HUi87K9ELU94gn psWHHDKcqiWmjci0tQaiwjy6xBbFW88QcwFarlwoIN5OftiPW1CYAjVTioBz4DYgTx2m ZKpKhxrxC2Nx8w0STwJsTo8o2SpL6Cw1lRIqWxJvnAuGwG5ghpMD3hVzVgADTn9AE5xx 2i/LELYXk5PzQXnFj4NiqqKECFoBdusHw4wl+iaHnjt8oiBqfvJlBvZDmfALgRzwT+// UPDQ== X-Gm-Message-State: APjAAAXBhD5jOqwczZ2d8LGyqZ6jjwWMct8bwgYZX8HnBBnEDsPD7bPA Z+lXQslLOtY3cgUrSQIuwDf7Ww== X-Google-Smtp-Source: APXvYqy20EaCkQLzNxkRL8/kiGzNyeuLzqJb/ZnClXSh/2qD5B6oIKli4p8YswHEFPAkLkk+BUabGQ== X-Received: by 2002:a6b:c389:: with SMTP id t131mr24282381iof.50.1574651332893; Sun, 24 Nov 2019 19:08:52 -0800 (PST) Received: from gust.leadboat.com ([172.243.182.239]) by smtp.gmail.com with ESMTPSA id u21sm1786490ila.41.2019.11.24.19.08.45 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 24 Nov 2019 19:08:52 -0800 (PST) Date: Sun, 24 Nov 2019 22:08:39 -0500 From: Noah Misch To: Kyotaro Horiguchi Cc: robertmhaas@gmail.com, pgsql-hackers@postgresql.org, 9erthalion6@gmail.com, andrew.dunstan@2ndquadrant.com, hlinnaka@iki.fi, michael@paquier.xyz Subject: Re: [HACKERS] WAL logging problem in 9.4.3? Message-ID: <20191125030839.GA51906@gust.leadboat.com> References: <20191118045434.GA1173436@rfd.leadboat.com> <20191121.160107.1405593316918593372.horikyota.ntt@gmail.com> <20191123212136.GA41522@gust.leadboat.com> <20191125.110854.1439648354665518969.horikyota.ntt@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20191125.110854.1439648354665518969.horikyota.ntt@gmail.com> User-Agent: Mutt/1.5.24 (2015-08-30) List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk On Mon, Nov 25, 2019 at 11:08:54AM +0900, Kyotaro Horiguchi wrote: > At Sat, 23 Nov 2019 16:21:36 -0500, Noah Misch wrote in > > This benchmark procedure may help: > > > > 1. Determine $DDL_COUNT, a number of DDL transactions that take about one > > minute when done via syncs. > > 2. Start "pgbench -rP1 --progress-timestamp -T180 -c10 -j10". > > 3. Wait 10s. > > 4. Start one DDL backend that runs $DDL_COUNT transactions. > > 5. Save DDL start timestamp, DDL end timestamp, and pgbench output. > > > > I would compare pgbench tps and latency between the seconds when DDL is and is > > not running. As you did in earlier tests, I would repeat it using various > > page counts, with and without sync. > > I understood the "DDL" is not pure DDLs but a kind of > define-then-load, like "CREATE TABLE AS" , "CREATE TABLE" then "COPY > FROM". When I wrote "DDL", I meant the four-command transaction that you already used in benchmarks. > > I noticed an additional defect: > > > > BEGIN; > > CREATE TABLE t (c) AS SELECT 1; > > CHECKPOINT; -- write and fsync the table's one page > > TRUNCATE t; -- no WAL > > COMMIT; -- no FPI, just the commit record > > > > If we crash after the COMMIT and before the next fsync or OS-elected sync of > > the table's file, the table will stay on disk with its pre-TRUNCATE content. > > The TRUNCATE replaces relfilenode in the catalog No, it does not. Since the relation is new in the transaction, the TRUNCATE uses the heap_truncate_one_rel() strategy. > Since the file has no pages, it's right that no FPI emitted. Correct. > If we don't rely on such > behavior, we can make sure thhat by turning the zero-pages case from > WAL into file sync. I'll do that in the next version. The zero-pages case is not special. Here's an example of the problem with a nonzero size: BEGIN; CREATE TABLE t (c) AS SELECT * FROM generate_series(1,100000); CHECKPOINT; -- write and fsync the table's many pages TRUNCATE t; -- no WAL INSERT INTO t VALUES (0); -- no WAL COMMIT; -- FPI for one page; nothing removes the additional pages