PostgreSQL 11: la evolución de la partición de Postgres 9.6 a Postgres 11

¡Gran viernes a todos! Cada vez queda menos tiempo hasta el lanzamiento del curso "DBMS relacional" , por lo que hoy compartimos la traducción de otro material útil sobre el tema.



Durante el proceso de desarrollo de PostgreSQL 11 , se ha realizado un trabajo impresionante para mejorar el particionamiento de tablas. El particionamiento de tablas es una función que ha existido en PostgreSQL durante bastante tiempo, pero, por así decirlo, en realidad no existía antes de la versión 10, en la que se convirtió en una función muy útil. Anteriormente dijimos que la herencia de tablas es nuestra implementación de particionamiento, y es cierto. Solo este método te obligó a hacer la mayor parte del trabajo manualmente. Por ejemplo, si quería que se insertaran tuplas en las secciones durante las INSERTAS, tenía que configurar los desencadenantes para que lo hicieran por usted. Particionar usando herencia fue muy lento y difícil de desarrollar funciones adicionales.

En PostgreSQL 10, vimos el nacimiento de la "partición declarativa", una característica diseñada para resolver muchos problemas que no se podían resolver al usar el método antiguo con herencia. ¡Esto llevó a la aparición de una herramienta mucho más poderosa que nos permite dividir los datos horizontalmente!

Comparación de características

PostgreSQL 11 presenta una impresionante variedad de nuevas características que ayudan a mejorar el rendimiento y hacen que las tablas particionadas sean más transparentes para las aplicaciones.




1. Uso de excepciones restrictivas
2. Agrega solo nodos
3. Solo para una tabla particionada que se refiere a una tabla no particionada
4. Los índices deben contener todas las columnas clave de una sección.
5. La restricción en la sección en ambos lados debe coincidir

Rendimiento

¡Aquí también tenemos buenas noticias! Se ha agregado un nuevo método para eliminar secciones . Este nuevo algoritmo puede determinar secciones adecuadas mirando la condición de consulta WHERE . El algoritmo anterior, a su vez, verificó cada sección para determinar si podía coincidir con la WHERE . Esto condujo a un aumento adicional en el tiempo de planificación a medida que aumentaba el número de secciones.

En 9.6, con particionamiento por herencia, el enrutamiento de tuplas en una sección generalmente se hacía escribiendo una función de disparo que contenía una serie de sentencias IF para insertar la tupla en la sección correcta. Estas funciones pueden ser muy lentas de ejecutar. Con la partición declarativa agregada en la versión 10, esto se ha vuelto mucho más rápido.

Usando una tabla particionada con 100 secciones, podemos estimar el rendimiento de cargar 10 millones de filas en una tabla de 1 columna BIGINT y 5 columnas INT.



El rendimiento de una consulta en esta tabla para buscar un registro indexado y ejecutar DML para manipular un registro (usando solo 1 procesador):



Aquí vemos que el rendimiento de cada operación aumentó significativamente después de PG 9.6. SELECT consultas SELECT ven mucho mejor, especialmente aquellas que pueden excluir varias secciones durante la programación de consultas. Esto significa que el planificador puede omitir la mayor parte del trabajo que debería haber hecho antes. Por ejemplo, las rutas para secciones innecesarias ya no se construyen.

Conclusión

Particionar tablas está comenzando a convertirse en una característica muy poderosa en PostgreSQL. Le permite generar rápidamente datos en línea y traducirlos sin conexión, sin esperar la finalización de operaciones lentas masivas de DML . También significa que los datos relacionados se pueden almacenar juntos, es decir, se puede acceder a los datos requeridos de manera mucho más eficiente. Las mejoras realizadas en esta versión no hubieran sido posibles sin los desarrolladores, revisores y encargados que trabajaron incansablemente en todas estas características.
Gracias a todos ellos! ¡PostgreSQL 11 se ve fantástico!

Aquí hay un artículo tan corto, pero bastante interesante. Comparta sus comentarios y no olvide registrarse para una jornada de puertas abiertas , durante la cual se describirá el programa del curso en detalle.

Source: https://habr.com/ru/post/452280/


All Articles