Interesante, leyendo los manuales se aprenden cosas, en este caso estoy leyendo 
esto.
https://www.postgresql.org/docs/9.4/routine-vacuuming.html 
<https://www.postgresql.org/docs/9.4/routine-vacuuming.html>

Esto es algo que voy a agregar en mi monitoreos ( como mensione nunca eh tenido 
este problema antes ).
WARNING:  database "mydb" must be vacuumed within 177009986 transactions
HINT:  To avoid a database shutdown, execute a database-wide VACUUM in "mydb".

y Sobre todo esto.
ERROR:  database is not accepting commands to avoid wraparound data loss in 
database "mydb"
HINT:  Stop the postmaster and vacuum that database in single-user mode.

Recuerdo haber leido este hace un año ( creo ), hay una nota interesante para 
abrir la base para poder hacer vacuumdb y luego cerrarla.
https://www.reddit.com/r/PostgreSQL/comments/5orxib/help_approaching_xid_wraparound_vacuuming_doesnt/
 
<https://www.reddit.com/r/PostgreSQL/comments/5orxib/help_approaching_xid_wraparound_vacuuming_doesnt/>


> On 15/02/2019, at 11:31 AM, Horacio Miranda <hmira...@gmail.com> wrote:
> 
> Ehh acabo de hacer una prueba pequeña en mi ambiente de prueba, borre una 
> table y se creo la tabla y todos los numeritos cambiaron en todas las bases 
> de datos...  ( solo hice el cambio en una de ella, como mensione antes esto 
> se ve interesante para investigar ( por que este problema no lo eh tenido 
> antes ).
> 
>   datname  |   max   | percentage_transaction_ids_used 
> -----------+---------+---------------------------------
>  template0 | 4486633 |                           0.214
>  template1 | 4486633 |                           0.214
>  postgres  | 4486633 |                           0.214
>  horacio   | 4486633 |                           0.214
>  hmiranda  | 4486633 |                           0.214
>  adempiere | 1545016 |                           0.074
> 
> Despues de recrear la tabla, tengo esto.
>   datname  |   max   | percentage_transaction_ids_used 
> -----------+---------+---------------------------------
>  template0 | 4486635 |                           0.214
>  template1 | 4486635 |                           0.214
>  postgres  | 4486635 |                           0.214
>  horacio   | 4486635 |                           0.214
>  hmiranda  | 4486635 |                           0.214
>  adempiere | 1545018 |                           0.074
> 
> Y despues de hacer un vacuumdb -a me da los mismo numeros.
> 
>   datname  |   max   | percentage_transaction_ids_used 
> -----------+---------+---------------------------------
>  template0 | 4486635 |                           0.214
>  template1 | 4486635 |                           0.214
>  postgres  | 4486635 |                           0.214
>  horacio   | 4486635 |                           0.214
>  hmiranda  | 4486635 |                           0.214
>  adempiere | 1545018 |                           0.074
> 
> Voy a leer un rato sobre como bajar esto. pero no creo que tu problema vaya 
> por el vaccumdb.
> 
> On Fri, 15 Feb 2019 at 09:59, Carlos T. Groero Carmona <cton...@gmail.com 
> <mailto:cton...@gmail.com>> wrote:
> 
> 
> On Thu, Feb 14, 2019 at 3:09 AM Horacio Miranda <hmira...@gmail.com 
> <mailto:hmira...@gmail.com>> wrote:
> 
> 
> On 14/02/2019 6:21 PM, Carlos T. Groero Carmona wrote:
>> Horacio gracias por sus comentarios.
>> Dejame comentar que en mi caso tengo template0 y template1, pude conectarme 
>> a template1 y hacerle vacuum a toda la base de datos, pero no puedo 
>> conectarme a template0, esta situacion me preocupa.
> template1 esta abierto para conectarse y template0 no lo esta, es normal que 
> no te puedas conectar al template0.
>>   datname  |    max     | percentage
>> -----------+------------+-----------
>>  template0 | 1586628037 | 75.55
>>  template1 |  277797489 | 13.22
>> (2 rows)
>> 
>> La base de datos de production esta al 28%, como le dije, las base de datos 
>> a las cuales puedo conectarme no me preocupan, solo template0 porque no 
>> puedo hacerle vacuum.
> Estas usando el plugin de new relic para postgresql ? 
> 
> Actualmente me encuentro trabajando con New Relic para obtener el pluging y 
> activarlo, esta es la web donde hablan del procedimiento:
>   
> https://docs.newrelic.com/docs/integrations/host-integrations/host-integrations-list/postgresql-monitoring-integration
>  
> <https://docs.newrelic.com/docs/integrations/host-integrations/host-integrations-list/postgresql-monitoring-integration>
> 
> Ah, muchas gracia spor la aclaracion sobre los billion (ingles) y el billon 
> (espanol), me estaba volviendo loco con lo que estudie cuando nino y los 
> numeros que encontraba en la documentacion escrita en ingles...jaja
> 
> https://newrelic.com/plugins/boundless-production/109 
> <https://newrelic.com/plugins/boundless-production/109>
> https://www.youtube.com/watch?v=iYPFLKh1vP4 
> <https://www.youtube.com/watch?v=iYPFLKh1vP4>
> 
>> Estaba pensando en disminuir la configuracion de autovacuum_freeze_max_age a 
>> 1 billon forzando autovacuum a encargarse de esa base de datos.
> 
>> 
>> Sobre el uso de I/O adjunto 2 screenshoot tomados en NewRelic el viernes 
>> pasado, que fue cuando tuve que desactivar autovacuum por casi 2 horas 
>> esperando que el sistema volviera a su normalidad, despues de estar dos 
>> horas estabilizado lo volvi a activar y desminui el cost_limit, desde 
>> entonces no hemos tenido mas problema con la base de datos.
>> 
>> Saludos,
>> Carlos.
>> 
>> 
>> 
>> On Wed, Feb 13, 2019 at 4:06 PM Horacio Miranda <hmira...@gmail.com 
>> <mailto:hmira...@gmail.com>> wrote:
>> 
>> 
>> On 14/02/2019 6:18 AM, Carlos T. Groero Carmona wrote:
>>> Horacio gracia spor su respuesta, abajo los comentarios despues de revisar 
>>> cada uno de sus puntos.
>>> 
>>> On Mon, Feb 11, 2019 at 4:35 AM Horacio Miranda <hmira...@gmail.com 
>>> <mailto:hmira...@gmail.com>> wrote:
>>> Creo que hay varios problemas aquí, podemos ver los más basicos.
>>> 
>>> Estoy de acuerdo, tratando de figurar cuales, y super agradecido por la 
>>> ayuda brindada
>>> Revisa que las llaves Foraneas tengan indices.
>>> https://dba.stackexchange.com/questions/121976/discover-missing-foreign-keys-and-or-indexes
>>>  
>>> <https://dba.stackexchange.com/questions/121976/discover-missing-foreign-keys-and-or-indexes>
>>> Despues de usar la informaci'on en el link que me mandas y hacer una 
>>> comparaci'on entre el uso de sequencias y de indeces, puedo decir que no 
>>> tenemos falta de indices en la base de datos, o al menos solo 3 tablas han 
>>> usado mas secuencias que indexes y el tamano de estas tablas es inferior a 
>>> 10MB. Asi que creo que no es el uso de indices, tenemos de sobra, eso si 
>>> puedo asegurarle, estoy tratando de revisar con el equipo de desarrollo y 
>>> me aprueben quitar aquellos donde no se requieren o no se usan, tratando de 
>>> aumentar la velocidad de escritura.
>>> Dices que tienes tablas particionadas, esto solo sirve si las consultas 
>>> tienen en el Where el criterio de la particion, si son por fechas que las 
>>> consultas en la tabla gigantesca sean por fechas. de lo contrario no te va 
>>> a ayudar mucho.
>>> 
>>> Si, las consultas que usamos utilizan los indices correctamente, lcomo 
>>> quiera estoy usando pgBadger para identificar las queries mas lentas y 
>>> analizar como puedo mejorar su rendimiento. 
>>> Los parametros el S.O. los ajustaste para manejar una base de datos grande 
>>> ? Usas un Filesystem como XFS ? ( me gusta más que ext3 o ext4 ) pero es 
>>> algo personal.
>>> 
>>> El kernel del SO me permite usar hasta 137 GB of sahed memory, solo estoy 
>>> utilizando 24 GB en el shared_bufer.   
>>> Sobre los IO. iostat -m -x /dev/sd? 3 ( que te dice, contención ? ).
>>> 
>>> avg-cpu:  %user   %nice %system %iowait  %steal   %idle
>>>           16.90    0.00    6.39    1.54    0.00   75.17
>>> 
>>> Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz 
>>> avgqu-sz   await r_await w_await  svctm  %util
>>> dm-5              0.00     0.00    5.94   41.94     0.22     0.16    16.47  
>>>    0.01    0.17   11.46    3.76   0.31   1.48 
>>> sar ( que te dice sobre las contenciones ? ).
>>> 
>>> 07:30:01 AM     CPU     %user     %nice   %system   %iowait    %steal     
>>> %idle
>>> 07:40:01 AM     all     28.48      0.00     12.28      2.41      0.00     
>>> 56.83
>>> 07:50:01 AM     all     27.73      0.00     11.98      2.21      0.00     
>>> 58.07
>>> 08:00:01 AM     all     28.74      0.00     12.38      2.06      0.00     
>>> 56.82
>>> 08:10:01 AM     all     32.54      0.00     14.27      2.26      0.00     
>>> 50.93
>>> 08:20:01 AM     all     31.96      0.00     13.95      2.25      0.00     
>>> 51.84
>>> 08:30:01 AM     all     33.87      0.00     14.66      2.41      0.00     
>>> 49.06
>>> 08:40:01 AM     all     33.18      0.00     14.45      2.57      0.00     
>>> 49.80
>>> 08:50:01 AM     all     33.35      0.00     14.68      2.58      0.00     
>>> 49.38
>>> 09:00:01 AM     all     33.90      0.00     14.96      2.43      0.00     
>>> 48.71
>>> 09:10:01 AM     all     38.93      0.00     17.02      2.72      0.00     
>>> 41.33
>>> 09:20:01 AM     all     38.84      0.00     16.94      2.37      0.00     
>>> 41.85
>>> Average:        all     16.45      0.00      7.21      1.18      0.00     
>>> 75.16
>>> Los discos en la maquina real estan todos sanos ? 
>>> 
>>> Si, lo unico que no contribuye mucho es que usamos SAN, por eso vamos a 
>>> cambiar a otro servidor para usar SSD. 
>> No veo contención a nivel de disco, revisa de forma continua que le ocurre a 
>> la maquina ( mira datadog para monitoreo ) o si usas otra herramienta 
>> conecta el SO para capturar los IO de disco.
>>> 
>>> La fuente de poder estan las dos activas ? ( una fuente puesta en un 
>>> servidor pero desenchufada va a desabilitar los cache de las controladora.
>>> 
>>> El servidor esta en RackSpace, voy a preguntar, aunque no creo que eso sea 
>>> posible, ese servicio cuesta bien caro. 
>> no importa este punto, no hay contención de discos.
>>> Los cache estan funcionando ? ( supongo que tienes algo como HP o DELL, o 
>>> alguna marga que no sea un PC armado corriendo aquí ).
>>> 
>>> Tenemos un Dell Inc. PowerEdge R720. CPU:24 RAM:512 
>>> el shmmax esta reajustado de acuerdo al shared buffers ? ( no puedes tener 
>>> un shared buffer grande si no tienes el S.O. en sintonía con la base de 
>>> datos. ( elimina el Swap si puedes ), y no asignes más del 80% a la base de 
>>> datos si es lo unico que corre ahi ).
>>> 
>> Si tienes una maquina con 512G RAM usa la RAM para porgres lo que más puedas.
>> 
>> Usa este link para estimar los parámetros. https://pgtune.leopard.in.ua/#/ 
>> <https://pgtune.leopard.in.ua/#/>
>>> cat /proc/sys/kernel/shmmax = 137438953472 = ~137GB 
>>> postgres=# show shared_buffers;
>>>  shared_buffers 
>>> ----------------
>>>  24GB
>>> (1 row)
>>> Sobre python ( lee sobre pool y postgresql ).
>>> 
>>> Si usas jdbc ( pasa el parametro -Djava.security.egd=file:/dev/./urandom <> 
>>> )
>>> http://ruleoftech.com/2016/avoiding-jvm-delays-caused-by-random-number-generation
>>>  
>>> <http://ruleoftech.com/2016/avoiding-jvm-delays-caused-by-random-number-generation>
>>>  ).
>>> 
>>> He estado leyendo sobre como y la importancia de usar un connection pool, 
>>> en estos momentos no es una opcion cambiar la arquitectura ni modificar el 
>>> codigo de los sistemas para manejar mas eficiente la forma de escribir en 
>>> la BD, por eso propuse revisar la configuracion del connection pool que 
>>> trae implementado Ruby/Rails, que si se esta utilizando se esta usando la 
>>> configuration por defecto, que es 5, pero hay varios parametros que afentan 
>>> el numero final de conectiones por servidores, no solo dependiendo del 
>>> valor especificado en la configuarion del pool, he estado leyendo bastante 
>>> al respecto desde que hablamos hace como 6 semanas atras de la necesidad de 
>>> usar pgBouncer. Esto resume bastante bien como funciona Ruby/Rails:
>>> https://devcenter.heroku.com/articles/concurrency-and-database-connections#connection-pool
>>>  
>>> <https://devcenter.heroku.com/articles/concurrency-and-database-connections#connection-pool>
>>> 
>>> Puede que no sea importante, pero /dev/random es super malo para muchas 
>>> conexiones sobre todo si no usas pooling con java. 
>>> 
>>> Una pregunta, cuando dices /dev/random te refires al FS? este es el mio: 
>>> /dev/mapper/X-X
>> No, en Linux todo es un archivo, /dev/random es un dispositivo que crea 
>> numeros random en base a entropia ( para tener numeros realmente randoms ) 
>> ahora el problema es que la entropia no esta disponible siempre, para 
>> mejorar el rendimientos en programas que usan cryptografia yo uso 
>> /dev/urandom, apache /dev/urandom, etc. Hay varios articulos que hablan 
>> sobre que es un mito urbano que /dev/random es mejor que /dev/urandom ya que 
>> ambos usan la misma libreria para generar los numeros aleatorios.
>>>  
>>> 
>>> Es super raro que la base template1 este tan fragmentada, algo debe estar 
>>> escribiendo y borrando cosas. revisa que tabla es, puede que sea alguna de 
>>> estadisticas.
>>> 
>>> Analizando el crecimiento diaria (cada 24H) he visto que el promedio diario 
>>> de crecimiento del XID es alrededor de 44millones, esto afecta todas las 
>>> base de datos en el servidor por igual, es decir todas crecen con el mismo 
>>> indice, incluyendo template1 y template0. La unica que me preocupa 
>>> seriamente es template0, pues no puedo ejecutar un vacuum y no estoy seguro 
>>> si esta "base de datos" podria dejarme el servidor fuera de servicio 
>>> nuevamente, actualmente el XID de template1 es 1 562 227 160 representando 
>>> el 74% de 2.1 billon.
>>> 
>>> Seria bueno saber si existe alguna manera de hacerle vacuum a template0 o 
>>> en el caso que template1 alcance los 2.1billon que pasaria?
>>> 
>> Template1 es como decirlo el corazón de postgres, si esa base esta muerta, 
>> todo lo medas muere con ella ( en realidad puedes copiar los directorios por 
>> debajo en terioría pero solo me toco hacer una chancheria como esa una sola 
>> vez en mi vida con postgres 6.2 y ResiserFS o algo como eso, se recupero, 
>> nunca perdi un dato de producción con postgres y por eso toco madera.
>> 
>> Este problema se ve super interesante, hay alguna forma de generar tu data 
>> de forma random ? ( tengo maquinas en mi ambiente de pruebas grandes para 
>> jugar ).
>> 
>>> 
>>>  
> 
> 
> -- 
> Saludos,
> Horacio Miranda Aguilera.

Reply via email to