2009-12-01 28 views
19

Quiero ejecutar mi servidor de base de datos PostgreSQL de memoria. La razón es que en mi nuevo servidor, tengo 24 GB de memoria, y apenas se usa nada de eso.PostgreSQL en la base de datos de memoria

sé que puedo ejecutar este comando para hacer un disco de memoria:

mdmfs -s 1024m md2 /mnt 

y pude tener en teoría almacenar datos PostgreSQL sus 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 al disco duro para leer cada registro, ya que tengo TONELADAS de memoria y porque la memoria es más rápida que el disco duro conduce.

¿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?

+0

¿Mide usted que casi nada de esos 24 gigabytes son utilizados por postgresql? – tuinstoel

+0

Dado que la memoria es más rápida que el disco, lo más probable es que se acelere un poco, pero dado que PostgreSQL no está diseñado para ejecutarse en la memoria, la aceleración puede no ser tan grande como se esperaba. Por ejemplo, PostgreSQL intentará vaciar su memoria al almacenamiento persistente (normalmente disco, memoria en este caso), ver _Main Sistemas de Bases de Datos de Memoria: Una visión general_ por Gracia-Molina y Kenneth Salem, [aquí están mis notas] (https: // docs.google.com/document/d/1k9N8UNvCVM484P8xKSAF8Su8UnNKAt3D8oWM-aFYsK8/edit) de este documento. – user454322

Respuesta

3

Tengo que creer que Postgres está escrito de tal manera que se aproveche al máximo la RAM disponible en el servidor. Como ya habrás adivinado, no existe una manera 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.

+0

http://www.postgresql.org/docs/8.4/static/spi-memory.html –

+2

Creo que lo que la pregunta está haciendo se relaciona con la persistencia del ramdisk desaparecido después del cierre, no con la naturaleza atómica de una transacción en Postgres. – Kuberchaun

+0

@JustBob: esta pregunta tiene más de tres años, y la respuesta más votada dice "Google it". Publique una respuesta si cree que puede hacerlo mejor (eso no debería ser demasiado difícil). –

6

¿has visto el capítulo del manual Server Configuration? compruébalo, luego google postgresql memory tuning.

+1

+1: shared_buffers es tu (bueno, el OP) amigo – araqnid

1

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.

8

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 el ESCLAVO, copiar los datos del postgresql de nuevo en ramdisk y luego reiniciar el 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.

+2

Esto es probablemente aún más factible ahora con la replicación síncrona. Haciendo lo que OP quiere. – plundra

+0

Si se utiliza la replicación sincrónica, debería ser a otro en el sistema de archivos de memoria; de lo contrario, no habría ganancias de rendimiento. _Al solicitar una replicación sincrónica, cada confirmación de una transacción de escritura esperará hasta que se reciba confirmación de que la confirmación se ha escrito en el registro de transacciones en el disco del servidor primario y del servidor en espera._ https://www.postgresql.org/ docs/9.4/static/warm-standby.html # SYNCHRONOUS-REPLICATION – user454322

Cuestiones relacionadas