2011-02-15 5 views

Respuesta

1

No, no puede controlar lo que se almacenará en caché.

Pero si esa es una tabla a la que se accede con frecuencia, se almacenará en caché de todos modos. Si no se accede con frecuencia, no se almacenará en caché.

Así que no veo un motivo para tratar de controlar esto.

2

No puede hacer eso. PostgreSQL hace un muy buen trabajo manteniéndolo solo. De hecho, no puedo pensar en un caso en el que te gustaría modificar este comportamiento.

Si ve un problema (como una tabla que usa demasiada memoria caché), probablemente signifique que la tabla se usa de manera ineficaz (por ejemplo, hay consultas con exploración seq). Si algunas tablas usan poca memoria caché, es porque muy poco es óptimo o porque el tamaño total de la memoria caché es demasiado pequeño. De cualquier manera, PG está haciendo lo mejor que puede.

¿Qué hizo exactamente esta pregunta?

+1

Una exploración seq no necesariamente coloca los datos de la tabla en los búferes compartidos. Creo que hay un umbral (en porcentaje de las filas de la tabla) más allá de que las filas no llegarán a los búferes compartidos, pero podría estar equivocado –

+2

Tengo un proceso de escritura que escribe continuamente en la tabla maestra que es bastante grande, una vez que escribo los datos, realmente no los uso. Leo de 4-5 otras mesas que no son tan grandes. Me pregunto si esta pesada operación de escritura está causando la desaceleración del sistema debido a que no se usa la caché de manera efectiva. Si pudiera decirle al postgres que no debe almacenar en la memoria caché esta tabla (o la cantidad de% a la memoria caché), eso hubiera ayudado a mejorar el mecanismo de la memoria caché. – Sujit

+0

Las escrituras son asincrónicas.Tal vez deberías revisar tu configuración de escritor de fondo? ver http://www.postgresql.org/docs/9.0/static/runtime-config-resource.html –

1

PostgreSQL y el sistema operativo hará el almacenamiento en caché mucho mejor. Los datos que no utiliza, no estarán en la memoria caché, los datos que hacen uso, están en la caché. No desea luchar contra su base de datos y el sistema operativo, no es necesario.

3

Para leer datos y operarlos, PostgreSQL tiene que llevarlos a su caché. Y hacer eso también lo pondrá temporalmente en el caché del sistema operativo, también. Puede encontrar una descripción exacta de cómo los datos eventualmente serán desalojados de la memoria caché de la base de datos una vez que los procesos dejen de usarlo en mi conversación Inside the PostgreSQL Buffer Cache.

Puede obtener un desalojo más rápido de la memoria caché reduciendo el tamaño del parámetro shared_buffers, que puede tener desventajas de rendimiento. PostgreSQL siempre lee utilizando el caché del sistema operativo, y no puede evitar que se contamine cuando accede a grandes cantidades de datos.

Existe una optimización para escaneos secuenciales que evita que la base de datos shared_buffers cache sea tomada por esos datos. Las tablas que son más grandes que (shared_buffers/4) están limitadas a solo usar una pequeña cantidad de memoria en el lado de la base de datos. Sin embargo, esos aún dañarán la memoria caché del sistema operativo, pero tienden a retener datos usados ​​con poca frecuencia por menos tiempo de lo que lo hará la base de datos.

Cuestiones relacionadas