Hola Lista! Hacía tiempo que no se me presentaba una situación en la que tuviera que recurrir a la teoría para poder explicar lo que se presenta en la práctica....dicho de otra forma, salir de lo mecánico y rutinas que uno realiza y que da por sentado al momento de instalar y diseñar y desarrollar una bd. Les explico....
Tengo una situación en una plataforma en la que recién instalé postgres 9 y no hay otra aplicación en ejecución.....La configuración del entorno a grandes rasgos es el siguiente:.. ====================================================================== Server con 16GB RAM, S.O. Red Hat Enterprise Linux Server release 5.3 (Tikanga)... i386 32b Los valores de memoria en el kernel (/etc/sysctl.conf) son: kernel.shmmax = 4294967295 kernel.shmall = 268435456 , que son los valores que en general dejamos en el Kernel con la diferencia que por lo general nuestras plataformas son de hasta 8 o 12 Gb. en RAM y nunca hemos tenido problemas ni de estabilidad ni de rendimiento, al punto que nunca hemos necesitado modificar dichos valores...... En Postgres, en los valores asociados a memoria tenemos: shared_buffers = 4096MB work_mem = 10MB maintenance_work_mem = 30MB effective_cache_size = 8192MB ====================================================================== Problema: Al momento de intentar subir el servicio con la configuración anterior se arroja el error: 13352 0 2011-12-20 09:07:23 PET FATAL: la peticion de tamano de memoria compartida desborda size_t (no se alcanza a ver el resto de la palabra size_t.. y no se alcanza a escribir en el log tampoco.. pero eso es lo de menos..) Yo siempre empiezo aplicando la regla de 25% de la RAM para shared_buffers y 50% para effcachesize y los otros valores son bajos asi que fui a modificar el /etc/sysctl.conf dejandolo en el doble de lo que tenía... Se intentó subir el servicio y el error permanecía.... volví el sysctl atrás y empecé a bajar de a poco el shared_buffers...y me empezó a tirar el error: 32634 0 2011-12-20 10:32:36 PET FATAL: shmat(id=360449) failed: No se pudo asignar memoria hasta que finalmente llegué a los 2700MB y el servicio subió... ====================================================================== No estoy seguro pero alguna vez leí respecto a que existen algunos límites en relación al uso de memoria para sistemas de 32 bits (independiente que el server sea de 64b..).. y entre esos límites está la memoria compartida... asi que mi pregunta es: Alguien me puede explicar claramente los alcances de estos límites??.. donde puedo modificar algo??.. la idea es aprovechar al menos 25% real de la RAM para el caso de postgres.... o simplemente debo decirle a mi jefatura que se instalen los S.O. de 64b y a los programadores que modifiquen su código para 64b??.... Eso...Si necesitan algún otro dato para justificar mejor el problema y guiarme mejor, me avisan. Gracias Saludos AP
