Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1ab8zi-0006co-7V for pgsql-performance@arkaria.postgresql.org; Wed, 02 Mar 2016 15:47:22 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84) (envelope-from ) id 1ab8zh-0003Ll-JK for pgsql-performance@arkaria.postgresql.org; Wed, 02 Mar 2016 15:47:21 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84) (envelope-from ) id 1ab8y1-00086c-BD; Wed, 02 Mar 2016 15:45:37 +0000 Received: from mail-io0-x234.google.com ([2607:f8b0:4001:c06::234]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.84) (envelope-from ) id 1ab8xx-00014T-Rp; Wed, 02 Mar 2016 15:45:36 +0000 Received: by mail-io0-x234.google.com with SMTP id n190so60383627iof.0; Wed, 02 Mar 2016 07:45:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc; bh=VFYbeGJKTcynGcYpWwhUxCeV51I39hz3w0d2VFwv7BM=; b=LgRvGdBXLG3cAjj05zfMHERtAa/dFouB7ov6xyRNrWxEmTk7gp9fnF8ekdAFjAgWQg DLwemLRcYhX6JO7nw2uRQEHj+zd4+HQKkEgZET2HvjMNofEVL+wMg0aS3z8wOPNPTA9l 2dfFW8liWwz0Hx4edaCktF9gS0Fqg02Bk3UGJz5DmLakqWY3WMArPhzTFqYKbHokQ9ul L/CfkKwuD8WFx0w2IQOFAxQMbBnLozKg0z0ShpfB8YoPUkoVrx71i6mxRuAimIFWjlk1 0Yv0RCIMAVVgP6PKedh7p16vkSOlDgYAJGKTENfk41kY8gIud00+/S7y+lB1djuKkqBp S2yQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc; bh=VFYbeGJKTcynGcYpWwhUxCeV51I39hz3w0d2VFwv7BM=; b=SpDxojsMy3kEj/1s+4AwxHIjve4s1+3MjZAjOrMs7dRfYLdDq+4Nsl3/QUpoueUYrk IefRUqYOuIMCUsOZZxfhfQFsazMOHhvwDOGG3BQl9ZjT+ZFosFeS1U7RDMJ0Fje52n+Y tZsMpUQhaPJahzKaKPxpD3aRRk5ZT32fMJSRb6GkFwav8057JemzOTiZRlCiH/P3EiEi Fja8lwzLccnfE5yun9RrXX4GZXaSx5zXNBJvQgOM2P6o1ZKCpTsxtVhAQyuwPYLd9AV8 3ADIdLD0LDbCYUoyK4ymG8HKjw91Rar7MjhHTL3e36/+60ZyKPiyyV5W7xFp8Vo/lLUa 9BCA== X-Gm-Message-State: AG10YORug4K+PtUO9t1G9yUvXdJEtoMYfs/xqVHewG/qZvOSIPLulwYMicwh5DPTp/c5GTneStkKchpWMwD2yQ== MIME-Version: 1.0 X-Received: by 10.107.164.225 with SMTP id d94mr31090531ioj.187.1456933531724; Wed, 02 Mar 2016 07:45:31 -0800 (PST) Received: by 10.36.51.204 with HTTP; Wed, 2 Mar 2016 07:45:31 -0800 (PST) In-Reply-To: References: Date: Wed, 2 Mar 2016 08:45:31 -0700 Message-ID: Subject: Re: autovacuum disk IO From: Scott Marlowe To: Artem Tomyuk Cc: "pgsql-admin@postgresql.org" , "pgsql-performance@postgresql.org" Content-Type: text/plain; charset=UTF-8 X-Pg-Spam-Score: -2.7 (--) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgsql-performance Precedence: bulk Sender: pgsql-performance-owner@postgresql.org On Wed, Mar 2, 2016 at 8:25 AM, Artem Tomyuk wrote: > Hi. > > I've noticed that autovac. process worked more than 10 minutes, during this > zabbix logged more than 90% IO disk utilization on db volume.... > > ===========>29237 2016-03-02 15:17:23 EET 00000 [24-1]LOG: automatic > vacuum of table "lb_upr.public._reference32": index scans: 1 > pages: 0 removed, 263307 remain > tuples: 298 removed, 1944753 remain, 0 are dead but not yet removable > buffer usage: 67814 hits, 265465 misses, 15647 dirtied > avg read rate: 3.183 MB/s, avg write rate: 0.188 MB/s > system usage: CPU 5.34s/6.27u sec elapsed 651.57 sec > > Is it possible to log autovac. io impact during it execution? > Is there any way to limit or "nice" autovac. process? I'll assume you're running a fairly recent version of postgresql. There are a few settings that adjust how hard autovacuum works when it's working. autovacuum_max_workers tells autovacuum how many threads to vacuum with. Lowering this will limit the impact of autovacuum, but generally the default setting of 3 is reasonable on most machines. autovacuum_vacuum_cost_delay sets how to wail between internal rounds. Raising this makes autovacuum take bigger pauses internally. The default of 20ms is usually large enough to keep you out of trouble, but feel free to raise it and see if your IO utilization lowers. autovacuum_vacuum_cost_limit sets a limit to how much work to do between the pauses set by the cost delay above. Lowering this will cause autovac to do less work between pauses. Most of the time I'm adjusting these I'm making vacuum more aggressive, not less aggressive because vacuum falling behind is a problem on the large, fast production systems I work on. In your case you want to watch for when autovacuum IS running, and using a tool like vmstat or iostat or iotop, watch it for % utilization. You can then adjust cost delay and cost limit to make it less aggressive and see if your io util goes down. Note though that 90% utilization isn't 100% so it's not likely flooding the IO. But if you say raise cost delay from 20 to 40ms, it might drop to 75% or so. The primary goal here is to arrive at numbers that left autovacuum keep up with reclaiming the discarded tuples in the database without getting in the way of the workload. If your workload isn't slowing down, or isn't slowing down very much, during autobvacuum then you're OK. -- Sent via pgsql-performance mailing list (pgsql-performance@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-performance