Re: [pgsql-es-ayuda] consulta sobre sequencias globales de BDR

2015-02-10 Por tema Alvaro Herrera
Hellmuth Vargas escribió:

 Si tiene razón, emplee generate_series() con el fin de verificar el
 comportamiento con miles de transacciones pero no seria el nivel real de
 transacciones en mi caso, aunque  el escenario que estamos planteando para
 la empresa si tiene un alto nivel de transacciones concurrentes pues en la
 base de datos almacenan todos los eventos de las llamadas, IVR, logs de
 operación, calificación y otros datos relevantes...

Hmm.  Para estas cosas lo importante es la latencia, ¿no?  Si el
servidor BDR se bloquea de uno a diez segundos cada cinco minutos,
puede ser fatal.  ¿O tienes cierta tolerancia a un pico ocasional de
latencia?

Lo que te iba a decir es que la manera más conveniente de lidiar con
este problema es hacer un bucle de reintento: cada vez que te sale un
error de la secuencia, haz dormir 100ms a la aplicación y luego trata
otra vez la transacción; repite hasta que funcione.  Es lo que
recomienda la página de secuencias globales que citó Jaime.


  Si, si lo tengo claro pero cuanto debería ser este tiempo de propagación
 razonable... pues en le esquema que estoy probando están montados en la
 misma maquina con diferente puerto, y no se penaliza por red y otros
 factores...

Entiendo que unos pocos segundos o un par de minutos.  Depende de la
carga: mientras más cargados estén los servidores, más retardo habrá.
En un servidor de pruebas donde estés ejecutando órdenes SQL
interactivamente, el retardo será casi cero.  Corolario: puedes
disminuir el retardo mejorando el hardware.

-- 
Álvaro Herrerahttp://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training  Services

-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org)
Para cambiar tu suscripción:
http://www.postgresql.org/mailpref/pgsql-es-ayuda


Re: [pgsql-es-ayuda] consulta sobre sequencias globales de BDR

2015-02-10 Por tema Hellmuth Vargas
Hola Alvaro y general lista

Muchas gracias por todos sus aportes!!! ,  voy a tratar de configurar un
entorno que me permita obtener tráfico de producción en pruebas y verificar
el funcionamiento de las secuencias globales en un ambiente más real ..
Les estaré informando...
Hellmuth Vargas escribió:

 Si tiene razón, emplee generate_series() con el fin de verificar el
 comportamiento con miles de transacciones pero no seria el nivel real de
 transacciones en mi caso, aunque  el escenario que estamos planteando para
 la empresa si tiene un alto nivel de transacciones concurrentes pues en la
 base de datos almacenan todos los eventos de las llamadas, IVR, logs de
 operación, calificación y otros datos relevantes...

Hmm.  Para estas cosas lo importante es la latencia, ¿no?  Si el
servidor BDR se bloquea de uno a diez segundos cada cinco minutos,
puede ser fatal.  ¿O tienes cierta tolerancia a un pico ocasional de
latencia?

Lo que te iba a decir es que la manera más conveniente de lidiar con
este problema es hacer un bucle de reintento: cada vez que te sale un
error de la secuencia, haz dormir 100ms a la aplicación y luego trata
otra vez la transacción; repite hasta que funcione.  Es lo que
recomienda la página de secuencias globales que citó Jaime.


  Si, si lo tengo claro pero cuanto debería ser este tiempo de propagación
 razonable... pues en le esquema que estoy probando están montados en la
 misma maquina con diferente puerto, y no se penaliza por red y otros
 factores...

Entiendo que unos pocos segundos o un par de minutos.  Depende de la
carga: mientras más cargados estén los servidores, más retardo habrá.
En un servidor de pruebas donde estés ejecutando órdenes SQL
interactivamente, el retardo será casi cero.  Corolario: puedes
disminuir el retardo mejorando el hardware.

--
Álvaro Herrerahttp://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training  Services


Re: [pgsql-es-ayuda] consulta sobre sequencias globales de BDR

2015-02-10 Por tema Hellmuth Vargas
Hola Alvaro



El feb 9, 2015 10:35 AM, Alvaro Herrera alvhe...@2ndquadrant.com
escribió:

 Hellmuth Vargas escribió:
  Hola Lista:
 
  Estoy realizado pruebas con BDR de PostgreSQL
  anunciado recientemente, comparto una hilo de conversación que sostuve
 con
  Jaime Casanova, entre otros, sobre el tema especifico del comportamiento
  de secuencias globales. La inquietud surge porque trabajo en un call
 center
  donde se realizan miles de transacciones por segundo de diferentes
 clientes
  a un único cluster de base de datos PostgreSQL (con replicacion
 asincronica
  obviamente), y por  balanceo de carga, disponibilidad,
  seguridad entre otros,  seria  extraordinario contar con la replicacion
  multimaster.

 El insert con generate_series() es realmente representativo de lo que se
 hace en la base de datos real, o es sólo para simular miles de
 transacciones?  Porque si la carga real no implica insertar miles de
 registros en una sola sentencia, sino uno o unos pocos registros en cada
 sentencia (repetida miles de veces), es posible que las secuencias
 globales funcionen perfectamente en tu caso.  Además, en versiones
 tempranas de BDR las secuencias globales eran algo lentas (varios
 segundos en generar un nuevo bloque para el servidor al que se le
 agotó), pero esto se ha corregido hace poco.


Si tiene razón, emplee generate_series() con el fin de verificar el
comportamiento con miles de transacciones pero no seria el nivel real de
transacciones en mi caso, aunque  el escenario que estamos planteando para
la empresa si tiene un alto nivel de transacciones concurrentes pues en la
base de datos almacenan todos los eventos de las llamadas, IVR, logs de
operación, calificación y otros datos relevantes...




 ¿Tienes presente que el carácter asincrónico significa que puedes
 insertar registros en el servidor A, y a continuación consultar en el
 servidor B varios segundos después y NO VER los registros que acabas de
 insertar?  El balanceo de carga es bueno, pero la aplicación no puede
 cambiarse al servidor B cuando el A esté con carga muy alta, y esperar
 que la base de datos sea consistente con el estado que veía en A.  Es
 necesario introducir un período de espera para que los cambios se
 propaguen.


 Si, si lo tengo claro pero cuanto debería ser este tiempo de propagación
razonable... pues en le esquema que estoy probando están montados en la
misma maquina con diferente puerto, y no se penaliza por red y otros
factores...


 --
 Álvaro Herrerahttp://www.2ndQuadrant.com/
 PostgreSQL Development, 24x7 Support, Remote DBA, Training  Services



Re: [pgsql-es-ayuda] consulta sobre sequencias globales de BDR

2015-02-09 Por tema Alvaro Herrera
Hellmuth Vargas escribió:
 Hola Lista:
 
 Estoy realizado pruebas con BDR de PostgreSQL
 anunciado recientemente, comparto una hilo de conversación que sostuve con
 Jaime Casanova, entre otros, sobre el tema especifico del comportamiento
 de secuencias globales. La inquietud surge porque trabajo en un call center
 donde se realizan miles de transacciones por segundo de diferentes clientes
 a un único cluster de base de datos PostgreSQL (con replicacion asincronica
 obviamente), y por  balanceo de carga, disponibilidad,
 seguridad entre otros,  seria  extraordinario contar con la replicacion
 multimaster.

El insert con generate_series() es realmente representativo de lo que se
hace en la base de datos real, o es sólo para simular miles de
transacciones?  Porque si la carga real no implica insertar miles de
registros en una sola sentencia, sino uno o unos pocos registros en cada
sentencia (repetida miles de veces), es posible que las secuencias
globales funcionen perfectamente en tu caso.  Además, en versiones
tempranas de BDR las secuencias globales eran algo lentas (varios
segundos en generar un nuevo bloque para el servidor al que se le
agotó), pero esto se ha corregido hace poco.

¿Tienes presente que el carácter asincrónico significa que puedes
insertar registros en el servidor A, y a continuación consultar en el
servidor B varios segundos después y NO VER los registros que acabas de
insertar?  El balanceo de carga es bueno, pero la aplicación no puede
cambiarse al servidor B cuando el A esté con carga muy alta, y esperar
que la base de datos sea consistente con el estado que veía en A.  Es
necesario introducir un período de espera para que los cambios se
propaguen.

-- 
Álvaro Herrerahttp://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training  Services

-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org)
Para cambiar tu suscripción:
http://www.postgresql.org/mailpref/pgsql-es-ayuda


Re: [pgsql-es-ayuda] consulta sobre sequencias globales de BDR

2015-02-03 Por tema Martín Marqués
El 29/01/15 a las 04:49, Hellmuth Vargas escribió:
 Hola Lista:
 
 Estoy realizado pruebas con BDR de PostgreSQL
 anunciado recientemente, comparto una hilo de conversación que sostuve con
 Jaime Casanova, entre otros, sobre el tema especifico del comportamiento
 de secuencias globales. La inquietud surge porque trabajo en un call center
 donde se realizan miles de transacciones por segundo de diferentes clientes
 a un único cluster de base de datos PostgreSQL (con replicacion asincronica
 obviamente), y por  balanceo de carga, disponibilidad,
 seguridad entre otros,  seria  extraordinario contar con la replicacion
 multimaster.

Yo no sería tan optimista sobre obtener mejoras en cuanto a rendimiento
con balanceo de carga en un cluster multi-maestro. Aunque envíes datos a
otro nodo, esos datos deben grabarse en todos los demás nodos (inclusive
al que le querías aliviar la carga).

La gran ventaja de BDR es que al ser asincrónico, te permite trabajar
con nodos muy distantes. Pensa por ejemplo una empresa con oficinas
comerciales distribuidas en ciudades lejanas: cada oficina puede
funcionar como un nodo de un cluster multi-maestro, por lo que las
respuestas de los clientes locales es muy rápido, pero a la vez los
datos se terminan replicando a los demás nodos de oficinas en otras
ciudades donde puede ser importante tener copia de todos los datos, pero
no en tiempo real.

Espero haber dado algo de luz sobre este tema.

Saludos,

-- 
Martín Marquéshttp://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training  Services

-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org)
Para cambiar tu suscripci�n:
http://www.postgresql.org/mailpref/pgsql-es-ayuda


[pgsql-es-ayuda] consulta sobre sequencias globales de BDR

2015-01-28 Por tema Hellmuth Vargas
Hola Lista:

Estoy realizado pruebas con BDR de PostgreSQL
anunciado recientemente, comparto una hilo de conversación que sostuve con
Jaime Casanova, entre otros, sobre el tema especifico del comportamiento
de secuencias globales. La inquietud surge porque trabajo en un call center
donde se realizan miles de transacciones por segundo de diferentes clientes
a un único cluster de base de datos PostgreSQL (con replicacion asincronica
obviamente), y por  balanceo de carga, disponibilidad,
seguridad entre otros,  seria  extraordinario contar con la replicacion
multimaster.

--


Buenos días

Actualmente me encuentro realizando una prueba con  BDR, para esto he
seguido  las pautas descritas en

https://wiki.postgresql.org/wiki/BDR_Quick_Start

luego ejecute las siguientes sentencias:

bdrdemo=# CREATE SEQUENCE seq_tabla2 USING bdr;
CREATE SEQUENCE

bdrdemo=# create table prueba2(id bigint primary key default
nextval('seq_tabla2'), origen text);
CREATE TABLE
--servidor 1
bdrdemo=# insert into prueba2(origen) select '' from
generate_series(0,1) as a(id);
INSERT 0 2

--servidor 2
bdrdemo=# insert into prueba2(origen) select '' from
generate_series(0,1) as a(id);
INSERT 0 2


-- Acontinuación envío estas dos sentencias cada una en cada uno de los
servidores:

--servidor 1

bdrdemo=# insert into prueba2(origen) select '' from
generate_series(0,2) as a(id);
ERROR:  could not find free sequence value for global sequence
public.seq_tabla2
HINT:  The sequence is refilling from remote nodes. Try again soon. Check
that all nodes are up if the condition persists.

--servidor 2
bdrdemo=# insert into prueba2(origen) select '' from
generate_series(0,2) as a(id);
ERROR:  could not find free sequence value for global sequence
public.seq_tabla2
HINT:  The sequence is refilling from remote nodes. Try again soon. Check
that all nodes are up if the condition persists.


y genera el error que hay se presenta, toca esperar un buen tiempo para que
vuelva a estar disponible

-- servidor 1
bdrdemo=# select nextval('seq_tabla2');
ERROR:  could not find free sequence value for global sequence
public.seq_tabla2
HINT:  The sequence is refilling from remote nodes. Try again soon. Check
that all nodes are up if the condition persists.
bdrdemo=# select nextval('seq_tabla2');
ERROR:  could not find free sequence value for global sequence
public.seq_tabla2
HINT:  The sequence is refilling from remote nodes. Try again soon. Check
that all nodes are up if the condition persists.
bdrdemo=# select nextval('seq_tabla2a');
 nextval
-
   10001
(1 row)


-- servidor 2

bdrdemo=#  select nextval('seq_tabla2');
ERROR:  could not find free sequence value for global sequence
public.seq_tabla2
HINT:  The sequence is refilling from remote nodes. Try again soon. Check
that all nodes are up if the condition persists.
bdrdemo=#  select nextval('seq_tabla2');
 nextval
--
 14314001
(1 row)



-- pero trato nuevamente de enviar el insert masivo y vuelve a generar
error:

-- servidor 1

bdrdemo=# insert into prueba2(origen) select '' from
generate_series(0,2) as a(id);
ERROR:  could not find free sequence value for global sequence
public.seq_tabla2
HINT:  The sequence is refilling from remote nodes. Try again soon. Check
that all nodes are up if the condition persists.


-- servidor 2
bdrdemo=# insert into prueba2(origen) select '' from
generate_series(0,2) as a(id);
ERROR:  could not find free sequence value for global sequence
public.seq_tabla2
HINT:  The sequence is refilling from remote nodes. Try again soon. Check
that all nodes are up if the condition persists.


La pregunta es si este comportamiento es normal? o debo configurar algo
adicional o estoy haciendo algo mal? LE agradezco de antemano su atención,
colaboración  y tiempo

--
Jaime Casanova respondio:

 -- Forwarded message --
 From: Hellmuth Vargas
 To:
 Cc:
 Date: Mon, 26 Jan 2015 21:49:55 -0500
 Subject: consulta sobre BDR

[...]

 -- servidor 1

 bdrdemo=# insert into prueba2(origen) select '' from
generate_series(0,2) as a(id);
 ERROR:  could not find free sequence value for global sequence
public.seq_tabla2
 HINT:  The sequence is refilling from remote nodes. Try again soon.
Check that all nodes are up if the condition persists.


 -- servidor 2
 bdrdemo=# insert into prueba2(origen) select '' from
generate_series(0,2) as a(id);
 ERROR:  could not find free sequence value for global sequence
public.seq_tabla2
 HINT:  The sequence is refilling from remote nodes. Try again soon.
Check that all nodes are up if the condition persists.


 La pregunta es si este comportamiento es normal? o debo configurar algo
adicional o estoy haciendo algo mal? Le agradezco de antemano su atención,