¿Cuándo usar tablespaces?

Aunque la mayoría de las implementaciones no necesitan tablespaces, hay casos en los que sí son útiles. Los tablespaces en PostgreSQL son muy diferentes de los tablespaces de otros productos y su influencia en el rendimiento es mínima.

La división entre tablespaces puede permitir el uso de múltiples sistemas de archivos. De este modo, es posible realizar un fsck paralelo durante la recuperación tras una caída del sistema operativo, lo cual podría reducir los tiempos de recuperación. Sin embargo, el fsck rara vez debería ser necesario o incluso útil con los sistemas de archivos modernos a prueba de caídas. Si lo es, lo más probable es que algo no haya funcionado correctamente y debería considerarse un failover, no una reparación. Es conveniente evitar el fsck, especialmente porque los sistemas de archivos de Linux más utilizados carecen de soporte para cualquier tipo de fsck en línea.

Los tablespaces no son particularmente útiles para organizar los datos en niveles de durabilidad. Se podría esperar que, si existen tablas o índices cuya pérdida sea tolerable, podrían ser colocados en tablespaces respaldados por un almacenamiento menos fiable. Sin embargo, el REDO de recuperación tras una caída no podrá continuar cuando falte una tabla o un archivo de índice, incluso si se considera irrelevante. Como consecuencia, aunque se lo considere irrelevante, el índice retrasará el reinicio de todo el sistema. Al momento de escribir este artículo, la posibilidad de ignorar tablas o índices faltantes y proseguir con el REDO no está soportada por PostgreSQL. Aunque existe un soporte limitado a través de la opción (bastante agresiva) zero_damaged_pages , es posible que la misma no logre manejar todos los posibles problemas ocasionados por la pérdida de tablespaces.

Los tablespaces no influyen en el paralelismo de E/S de PostgreSQL. No obstante, es posible configurar en cierta medida el acceso al almacenamiento subyacente. Por ejemplo, si se sabe que las consultas, que son las principales fuentes de carga, tienden a (digamos) unir dos tablas de gran tamaño, almacenarlas en tablespaces separados respaldados por almacenamiento independiente puede resultar en un pequeño beneficio de rendimiento.

La principal utilidad de los tablespaces es organizar los datos en clases de servicio basadas en el rendimiento del almacenamiento: colocar los datos más relevantes, aquellos que cambian con mayor rapidez, en el almacenamiento de alto rendimiento, y los datos menos relevantes o los que sólo se añaden, en el almacenamiento de menor rendimiento.