Re: Puede pg_basebackup afectar performace?

2019-10-13 Thread Lucas Luengas
Hola.
Respondiendo de forma genérica, insisto en lo de "genérica", a tu pregunta
de si puede afectar pg_basebackup al rendimiento, te diré que sí. Es
normal, porque consume recursos: cpu, disco, red, en servidor principal y
en servidor secundario.

¿Cuánto afecta? Supongo que depende de muchos factores. Yo para estos casos
lo vigilo con comandos top e iotop para ver los recursos que va consumiendo
pg_basebackup. Además, si puedo, intento usarlo en momentos de poca
actividad, para reducir el impacto sobre el sistema (y por lo tanto a los
usuarios).

Varias preguntas:
1- ¿La replicación es síncrona o asíncrona?
2- ¿Qué parámetros pasas a pg_basebackup? Yo en bases de datos un poco
grandes suelo usar este comando que muestro continuación. Lo lanzo desde el
secundario contra el primario. En el secundario tengo el servicio de
postgres parado.

pg_basebackup -h direccionipdelprimario -D /var/lib/pgsql/9.6/data -P -U
userrepliacion --xlog-method=stream

3- Las conexiones a postgres de tu sistema, ¿se realizan todas al servidor
principal, o hay conexiones también de lectura a alguno de los servidores
secundarios?

Un saludo.

On Sun, Oct 13, 2019 at 2:19 AM Carlos T. Groero Carmona 
wrote:

> Hola Lista,
>
> Dejenme introducir un porquito lo que esta pasando, en estos momentos
> estamos usando un DC, pero estamos estamos dando algunos pasos firmes para
> movernos para Azure, por lo que tengo 4 servidores en production y 3 mas en
> hold.
>
> Que significa esto:
> serv1 es mi servidor primario (location 1)
> serv2 es mi HA (location 1)
> serv3 va a ser mi servidor primario en Azure (Location 2)
> serv4 es mi DR (location3)
>
> Estoy replicando (SR) desde :
> * serv1->serv2
> Estoy Cascading replication:
> * serv2->serv3
> * serv2->serv4
>
> Pero cuando teniamos graves incidentes (P1) hace unos meses, se decidio
> rentar servidores nuevos con mayor capacidad, y por otras rasones se
> exagero en la capidad, los nuevos servidores tienen:
> CPU: 114 (74 cores, 2 Thread per Core)
> RAM: 790 Gb
> Disk 10 TB (RAID 10)
> OS: CentOS 7.x
>
> Mi actual servidor primario tiene:
> CPU: 48 (24 Cores * 2 thread)
> RAM: 790 GB
> Disk 5TB (RAID 10)
> OS: CentOS 7.x
>
> En todos los casos uso PostgreSQL 9.6
>
> En estos momentos estamos estables gracias a la correcta configuration de
> pgBouncer y solo en los momentos picos alcanzamos un 60% del uso del CPU,
> nuestro average es un 45%, asi que no se necesita utilizar los nuevos
> servidores, PERO, se ha decido ponerlos en hot standby por si se llega a
> necesitar en un futuro cercano, ya que como quiera se esta pagando por
> ellos.
>
> Asi que intente poner uno de estos nuevos servidores detrás de serv2 y se
> vio affectado el tiempo de respuesta del sistema, trate de ponerlo detras
> de serv1 y fue peor la affectation, en todo momento apenas que
> pg_basebackup empezo a copiar los datos se disparo el % de utilizaicon de l
> disco en serv1 o serv2 asi que detuve el pg_basebackup.
>
> En un escenario pues lo deje correr detras de serv2 porque se affecto el
> tiempo de respuesta de postgres serca de 3 veces mas pero no impacto mucho
> el tiempo de respuesta del sistema, una vez que termino el pg_basebackup
> todo funciono correctamente y el tiempo de respuesta del sistema regreso a
> su normalidad.
>
> Mi hypotesis es que el monstrou de servidor nuevo esta chupandose todo el
> I/O a traves de pg_basebackup. Tienen ustedes alguna otra idea?
>
> Si tienen alguna pregunta dejenme saber, tengo ulgunas imagenes de mi
> herramienta de monitoreo..
>
> Lo curioso es que las TPS no se vieron afectadas ni las queries por
> segundo.
>
> Como siempre cualquier sugerencia o explicacion sera apreciada.
>
> Saludos,
> Carlos
>
>
>


Re: Puede pg_basebackup afectar performace?

2019-10-13 Thread Horacio Miranda



On 13/10/2019 1:19 PM, Carlos T. Groero Carmona wrote:

Hola Lista,

Hola


Dejenme introducir un porquito lo que esta pasando, en estos momentos 
estamos usando un DC, pero estamos estamos dando algunos pasos firmes 
para movernos para Azure, por lo que tengo 4 servidores en production 
y 3 mas en hold.


Que significa esto:
serv1 es mi servidor primario (location 1)
serv2 es mi HA (location 1)
serv3 va a ser mi servidor primario en Azure (Location 2)
serv4 es mi DR (location3)

Estoy replicando (SR) desde :
* serv1->serv2
Estoy Cascading replication:
* serv2->serv3
* serv2->serv4

Pero cuando teniamos graves incidentes (P1) hace unos meses, se 
decidio rentar servidores nuevos con mayor capacidad, y por otras 
rasones se exagero en la capidad, los nuevos servidores tienen:

CPU: 114 (74 cores, 2 Thread per Core)
RAM: 790 Gb
Disk 10 TB (RAID 10)
OS: CentOS 7.x

Mi actual servidor primario tiene:
CPU: 48 (24 Cores * 2 thread)
RAM: 790 GB
Disk 5TB (RAID 10)
OS: CentOS 7.x

En todos los casos uso PostgreSQL 9.6

En estos momentos estamos estables gracias a la correcta configuration 
de pgBouncer y solo en los momentos picos alcanzamos un 60% del uso 
del CPU, nuestro average es un 45%, asi que no se necesita utilizar 
los nuevos servidores, PERO, se ha decido ponerlos en hot standby por 
si se llega a necesitar en un futuro cercano, ya que como quiera se 
esta pagando por ellos.


Asi que intente poner uno de estos nuevos servidores detrás de serv2 y 
se vio affectado el tiempo de respuesta del sistema, trate de ponerlo 
detras de serv1 y fue peor la affectation, en todo momento apenas que 
pg_basebackup empezo a copiar los datos se disparo el % de utilizaicon 
de l disco en serv1 o serv2 asi que detuve el pg_basebackup.


( estas usando compresion en los respaldos ? ), estas usando un arreglo 
distindo al arreglo de discos de los datos vs los respaldos ?


Que te dice la cola de procesos y la los IO waits ?  del S.O. ? estas 
usando XFS  como filesystem ?




En un escenario pues lo deje correr detras de serv2 porque se affecto 
el tiempo de respuesta de postgres serca de 3 veces mas pero no 
impacto mucho el tiempo de respuesta del sistema, una vez que termino 
el pg_basebackup todo funciono correctamente y el tiempo de respuesta 
del sistema regreso a su normalidad.
A que te refieres con que afecto el tiempo de respuetsa de postgresql a 
3 veces pero al mismo tiempo no impacto el tiempo de respuesta del 
sistema ?  ( me tinca que tienes una cola en algun lado que esta 
limitando el postgresql ), como estan tus parametros de open files ? 
cuanta RAM tienes asignada al postgrsql ? y cuantos procesos al 
postrgesql ?


Mi hypotesis es que el monstrou de servidor nuevo esta chupandose todo 
el I/O a traves de pg_basebackup. Tienen ustedes alguna otra idea?
Que te dice el top ? lo mejor es correr un sysreport o sosreport para 
saber que esta pasando justo en el momento de la falla o durante tu 
problema para saber que esta pasando en la maquina.


Si tienen alguna pregunta dejenme saber, tengo ulgunas imagenes de mi 
herramienta de monitoreo..


Lo curioso es que las TPS no se vieron afectadas ni las queries por 
segundo.
Esto no lo entiendo, si el postrgresql esta mas lento tus TPS se veran 
afectadas, esto esta raro.


Como siempre cualquier sugerencia o explicacion sera apreciada.


En mi experiencia con bases de datos grandes, lo importante son los 
canales entre las maquinas y el cypher que uses para conectarte entre 
las bases de datos. Ejemplo sí usas un tunel SSH debes usar un tunel con 
un cypher que no sea costoso, uncluso un NFS ( ahora los NFS son 
peligrosos por que cuando se te pegan a nivel de kernel debes reiniciar 
las maquinas no hay otra forma de recuperarse, NFSv4 soporta multipath.


yo revisaría los cuellos de botellas que tengas y los arreglaría uno por 
uno, no hay otra forma, optimiza y estreza para saber donde esta tu 
cuello de botella.




Saludos,
Carlos