Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1Xl2Vu-00037A-3u for pgsql-performance@arkaria.postgresql.org; Sun, 02 Nov 2014 21:16:42 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.80) (envelope-from ) id 1Xl2Vt-0002bd-5U for pgsql-performance@arkaria.postgresql.org; Sun, 02 Nov 2014 21:16:41 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.80) (envelope-from ) id 1Xl2Vr-0002bW-VF for pgsql-performance@postgresql.org; Sun, 02 Nov 2014 21:16:40 +0000 Received: from mail-pa0-x22e.google.com ([2607:f8b0:400e:c03::22e]) by magus.postgresql.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:256) (Exim 4.80) (envelope-from ) id 1Xl2Vm-00068Y-C3 for pgsql-performance@postgresql.org; Sun, 02 Nov 2014 21:16:38 +0000 Received: by mail-pa0-f46.google.com with SMTP id lf10so10892410pab.19 for ; Sun, 02 Nov 2014 13:16:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=content-type:mime-version:subject:from:in-reply-to:date:cc :message-id:references:to; bh=lmaUGXHe8e3xHX7zVaJm8I1XzRHDF7ryd5+Pq1ITqaY=; b=LKbhRU/KmPkOrcf/NRHXjqV+eGuk6kUiuOl717ciJNqoOdIc+zZODUrh+N1jSSI5kW vOB2VweqlmK4OlNjc1A8/c+sY2LMmppitZ3FTCdZm36ZfEWTqeTamyqqShVJ1bxg6HKm 0XRtYKj6HZFjEOcwd5extMFikBMD3Lv81oeGURq7jlO5qV45w86qVf44ba1aBQjfJZCf BPBZAbfjftKBIJd7c6bTheMBk/87j31yff3283Kip1+H3CI7bp0XMDOT8NToFmQikmR4 +iuwhpmOfs9WNyYeEwDHK61LzELYlqt3CDeAfjWp9DNPhp9o/QBoPzHaGjFRYNBub1nm HY3g== X-Received: by 10.66.124.136 with SMTP id mi8mr5159977pab.105.1414962990769; Sun, 02 Nov 2014 13:16:30 -0800 (PST) Received: from [10.0.1.16] (cpe-104-174-121-31.socal.res.rr.com. [104.174.121.31]) by mx.google.com with ESMTPSA id ty8sm15380352pab.26.2014.11.02.13.16.30 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Sun, 02 Nov 2014 13:16:30 -0800 (PST) Content-Type: multipart/alternative; boundary="Apple-Mail=_BB4030DE-CB1E-4F21-8454-8BD95D9FE49D" Mime-Version: 1.0 (Mac OS X Mail 8.0 \(1990.1\)) Subject: Re: Replication Lag Causes From: Mike Wilson In-Reply-To: Date: Sun, 2 Nov 2014 13:16:24 -0800 Cc: pgsql-performance@postgresql.org Message-Id: References: To: Greg Spiegelberg X-Mailer: Apple Mail (2.1990.1) 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 --Apple-Mail=_BB4030DE-CB1E-4F21-8454-8BD95D9FE49D Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 Thanks for the information Greg. Unfortunately modifying the application stack this close to the holiday = season won=E2=80=99t be an option so I=E2=80=99m left with: 1) Trying to optimize the settings I have for the query mix I have. 2) Optimize any long running DML queries (if any) to prevent lag due = to locks. 3) Getting a better understanding of =E2=80=9Cwhat=E2=80=9D causes = lag. #3 will probably be central to at least minimizing lag during heavy DML = load. If anyone has a good resource to describe when a slave would = start to lag potentially that would help me hunt for the cause. I know = long running DML on the master may cause lag but I=E2=80=99m uncertain = as to the specifics of why. During periods of lag we do have more DML = than usual running against the master but the queries themselves are = very quick although there might be 20-30 DML operations per second = against some of our central tables that store user account information. = Even under heavy DML the queries still return in under a second. = Possibly a large volume of of short running DML cause replication lag = issues for large tables (~20M)? Thanks again for your help. BDR looks interesting but probably too = cutting edge for my client. Mike Wilson > On Nov 2, 2014, at 12:33 PM, Greg Spiegelberg = wrote: >=20 > Hi Mike, >=20 > Sounds very familiar. Our master fans out to 16 slaves (cascading) = and we had great success with segregating database queries to different = slaves and some based on network latency. I'd suggest, if possible, = alter the application to use the slave for simple SELECT's and = FUNCTION's performing SELECT-like only work while limiting those = applications and queries that perform DML to the master (obviously). If = the load on the slave increases too much, spin up another slave. I'd = mention from experience that it could be the load on the slave that is = giving the appearance of replication lag. This is what led us to having = (1) slave per application. >=20 > There is also the BDR multi-master available in 9.4beta if you're = wanting to live on the edge. >=20 > -Greg >=20 > On Sat, Nov 1, 2014 at 4:33 PM, Mike Wilson > wrote: > I have two 9.3.4 PG instances that back a large internet website that = has very seasonal traffic and can generate large query loads. My = instances are in a master-slave streaming replication setup and are = stable and in general perform very well. The only issues we have with = the boxes is that when the master is busy the slave may start to lag = excessively. I can give specifics as to what heavily loaded means and = additionally the postgresql.conf for both boxes but my basic questions = are: > * What causes streaming replication lag to increase? =20 > * What parameters can be tuned to reduce streaming replication lag? > * Can a loaded slave affect lag adversely? > * Can increasing max_wal_senders help reduce lag? >=20 > The reason I ask this is that as mentioned above the servers are = stable and are real troopers in general as they back a very popular web = site that puts the master under heavy seasonal load at times. At those = times though we see an almost exponential growth in streaming = replication lag compared to load on the master. =20 >=20 > For example, the master is a very beefy Solaris: > * 4 Recent Intel Zeons (16 physical cores) > * 256 GB of ECC RAM > * 12 TB of ZFS (spindle and SSD internal storage) > * DB on disk size is 2TB > * ZFS ARC cache of roughly 250G. > * ZFS ARC2/ZIL configured for SSD=E2=80=99s (this is awesome by the = way) >=20 > Basic PG Config: > shared_buffers =3D 2GB > work_mem =3D 128MB > max_connections =3D 1700 (supports roughly 100 web servers) > wal_keep_segments =3D 256 (roughly enough for 24 hours of operation = under heavy load) > wal_sender_timeout =3D 60s > replication_timeout=3D(not set) > wal_receiver_status_interval=3D10s > max_wal_senders=3D6 > * wal archiving is off > * 98% of the queries on the master complete in under 500ms. > * No hung or very long running queries in general. >=20 > The master on a normal day maintains a load of about 0.5, during which = replication lag to the slave is in hundreds milliseconds. When the = production db server is heavily hit though the load may go as high as 4 = on the master and the streaming replication lag may increase to more = than 2 hours relatively quickly. Load on the slave is generally below 1 = even when the master is heavily loaded. The traffic to the master is = primarily read with about 10% DML (new users, purchase records, etc). = DML statements increase proportionally when under load though. The = master and slave are connected via dedicated 10G fiber link and even = under heavy load the utilization of the link is nowhere near close to = saturation. BTW, the slave does run some reported related queries = throughout the day that might take up to a minute to complete. >=20 > I have the task of figuring out why this otherwise healthy DB starts = to lag so badly under load and if there is anything that we could do = about it. I=E2=80=99ve been wondering particularly if we should up the = max_wal_senders but from the docs it is unclear if that would help. In = my testing with pg_bench on our dev boxes which were the previous = production hardware for these servers I have determined that it = doesn=E2=80=99t take much DML load on the master to get the slave to = start lagging severely. I was wondering if this was expected and/or = some design consideration? Possibly streaming replication isn=E2=80=99t = meant to be used for heavily hit databases and maintain small lag times? = I would like to believe that the fault is something we have done though = and that there is some parameter we could tune to reduce this lag. >=20 > Any recommendations would be very helpful. =20 > =20 > Mike Wilson > Predicate Logic Consulting >=20 >=20 >=20 >=20 --Apple-Mail=_BB4030DE-CB1E-4F21-8454-8BD95D9FE49D Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=utf-8 Thanks for the information Greg.

Unfortunately modifying the application = stack this close to the holiday season won=E2=80=99t be an option so = I=E2=80=99m left with:
   1) Trying to = optimize the settings I have for the query mix I have.
   2) Optimize any long running DML queries (if = any) to prevent lag due to locks.
   3) = Getting a better understanding of =E2=80=9Cwhat=E2=80=9D causes = lag.

#3 will = probably be central to at least minimizing lag during heavy DML load. =  If anyone has a good resource to describe when a slave would start = to lag potentially that would help me hunt for the cause.  I know = long running DML on the master may cause lag but I=E2=80=99m uncertain = as to the specifics of why.  During periods of lag we do have more = DML than usual running against the master but the queries themselves are = very quick although there might be 20-30 DML operations per second = against some of our central tables that store user account information. =  Even under heavy DML the queries still return in under a second. =  Possibly a large volume of of short running DML cause replication = lag issues for large tables (~20M)?

Thanks again for your help.  BDR = looks interesting but probably too cutting edge for my client.

Mike Wilson




On Nov 2, 2014, at 12:33 PM, Greg Spiegelberg <gspiegelberg@gmail.com> wrote:

Hi Mike,

Sounds very familiar.  Our master fans out to 16 slaves = (cascading) and we had great success with segregating database queries = to different slaves and some based on network latency.  I'd = suggest, if possible, alter the application to use the slave for simple = SELECT's and FUNCTION's performing SELECT-like only work while limiting = those applications and queries that perform DML to the master = (obviously).  If the load on the slave increases too much, spin up = another slave.  I'd mention from experience that it could be the = load on the slave that is giving the appearance of replication = lag.  This is what led us to having (1) slave per = application.

There is also the BDR multi-master available in 9.4beta if = you're wanting to live on the edge.

-Greg

On Sat, = Nov 1, 2014 at 4:33 PM, Mike Wilson <mfwilson@gmail.com> wrote:
I have two 9.3.4 PG instances = that back a large internet website that has very seasonal traffic and = can generate large query loads.  My instances are in a master-slave = streaming replication setup  and are stable and in general perform = very well.  The only issues we have with the boxes is that when the = master is busy the slave may start to lag excessively.  I can give = specifics as to what heavily loaded means and additionally the = postgresql.conf for both boxes but my basic questions are:
   * What causes streaming replication lag to = increase?  
   * What parameters can = be tuned to reduce streaming replication lag?
  =  * Can a loaded slave affect lag adversely?
   * Can increasing max_wal_senders help reduce = lag?

The = reason I ask this is that as mentioned above the servers are stable and = are real troopers in general as they back a very popular web site that = puts the master under heavy seasonal load at times.  At those times = though we see an almost exponential growth in streaming replication lag = compared to load on the master.  

For example, the master is a very beefy = Solaris:
   * 4 Recent Intel Zeons (16 = physical cores)
   * 256 GB of ECC = RAM
   * 12 TB of ZFS (spindle and SSD = internal storage)
   * DB on disk size is = 2TB
   * ZFS ARC cache of roughly = 250G.
   * ZFS ARC2/ZIL configured for = SSD=E2=80=99s (this is awesome by the way)

Basic PG Config:
   shared_buffers =3D 2GB
 =  work_mem =3D 128MB
  =  max_connections =3D 1700 (supports roughly 100 web = servers)
   wal_keep_segments =3D 256 = (roughly enough for 24 hours of operation under heavy load)
   wal_sender_timeout =3D 60s
   replication_timeout=3D(not set)
   wal_receiver_status_interval=3D10s
   max_wal_senders=3D6
  =  * wal archiving is off
   * 98% of = the queries on the master complete in under 500ms.
   * No hung or very long running queries in = general.

The = master on a normal day maintains a load of about 0.5, during which = replication lag to the slave is in hundreds milliseconds.  When the = production db server is heavily hit though the load may go as high as 4 = on the master and the streaming replication lag may increase to more = than 2 hours relatively quickly.  Load on the slave is generally = below 1 even when the master is heavily loaded.  The traffic to the = master is primarily read with about 10% DML (new users, purchase = records, etc).  DML statements increase proportionally when under = load though.  The master and slave are connected via dedicated 10G = fiber link and even under heavy load the utilization of the link is = nowhere near close to saturation.  BTW, the slave does run some = reported related queries throughout the day that might take up to a = minute to complete.

I have the task of figuring out why this otherwise healthy DB = starts to lag so badly under load and if there is anything that we could = do about it.  I=E2=80=99ve been wondering particularly if we should = up the max_wal_senders but from the docs it is unclear if that would = help.  In my testing with pg_bench on our dev boxes which were the = previous production hardware for these servers I have determined that it = doesn=E2=80=99t take much DML load on the master to get the slave to = start lagging severely.  I was wondering if this was expected = and/or some design consideration?  Possibly streaming replication = isn=E2=80=99t meant to be used for heavily hit databases and maintain = small lag times?  I would like to believe that the fault is = something we have done though and that there is some parameter we could = tune to reduce this lag.

Any recommendations would be very helpful.  
 
Mike Wilson
Predicate Logic Consulting





= --Apple-Mail=_BB4030DE-CB1E-4F21-8454-8BD95D9FE49D--