Re: [pgsql-es-ayuda] consulta sobre sequencias globales de BDR
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
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
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
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
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
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,