instancia - PostgreSQL en la base de datos de memoria
psql example (4)
Quiero ejecutar mi servidor de base de datos PostgreSQL desde la memoria. La razón es que en mi nuevo servidor, tengo 24 GB de memoria, y apenas se usa nada de eso.
Sé que puedo ejecutar este comando para hacer un ramdisk:
mdmfs -s 1024m md2 /mnt
Y teóricamente podría tener PostgreSQL almacenar sus datos allí. Pero el problema con esto es que si el servidor falla o se reinicia, los datos desaparecerán.
Básicamente, quiero que la base de datos se cargue en la memoria en todo momento para que no tenga que ir a la unidad de disco duro para leer cada registro, ya que tengo TONELADAS de memoria y porque la memoria es más rápida que las unidades de disco duro.
¿Hay alguna manera de hacer esto teniendo también PostgreSQL escribiendo en el disco para que no pierda ningún dato en caso de que el servidor se caiga? ¿O hay una forma de almacenar en caché todos los datos en la memoria?
Tengo que creer que Postgres está escrito de tal manera que se aproveche al máximo la memoria RAM disponible en el servidor. Como ya habrás adivinado, no hay una forma confiable de hacerlo fuera de Postgres.
Dentro de Postgres, las transacciones aseguran que todas las operaciones son atómicas, por lo que si se corta la energía mientras escribe en una base de datos de Postgres, solo perderá esa operación en particular, y no toda la base de datos.
¿Has visto el capítulo del manual de Configuración del servidor ? échale un vistazo, luego postgresql memory tuning
google postgresql memory tuning
.
La respuesta es el almacenamiento en caché. Investigue agregar memoria al servidor, luego ajuste PostgreSQL para maximizar el uso de la memoria. Además, la caché del sistema de archivos ayudará con esto, haciendo algo de esto automáticamente. Podrá acelerar el rendimiento, casi como si estuviera en la memoria a excepción del primer golpe, sin tener que administrarlo usted mismo, y poder tener una base de datos más grande que la memoria física.
Ahora estoy usando la replicación de transmisión que es asíncrona. Esto significa que mi MASTER podría estar ejecutándose todo en memoria, con la instancia SLAVE separada usando el disco tradicional.
Un reinicio de la máquina implicaría detener al ESCLAVO, copiar los datos del postgresql nuevamente en RAMDisk y luego reiniciar MASTER seguido del ESCLAVO. Esta sería una posibilidad interesante que se compara bien con algo como REDIS, pero con la ventaja de redundancy / hotstandby / backup / sql / rich toolset etc.