Revisión de las características internas de PostgreSQL

NotaAutor
 

Este capítulo apareció originalmente como parte de la tesis doctoral de Stefan Simkovic preparada en la Universidad de Tecnología de Viena bajo la dirección de O.Univ.Prof.Dr. Georg Gottlob y Univ.Ass. Mag. Katrin Seyr.

Este capítulo da una visión general de la estructura interna del motor de Postgres. Tras la lectura de las siguientes secciones, usted tendrá una idea de como se procesa una consulta. No espere aquí una descripción detallada (¡creo que esa descripción detallada incluyendo todas las estructuras de datos y funciones utilizadas en Postgres excedería de 1000 páginas!). Este capítulo intenta ayudar en la comprensión del control general y del flujo de datos dentro del motor desde que se recibe una consulta hasta que se emiten los resultados.

El camino de una consulta

Damos aquí una corta revisión a los pasos que debe seguir una consulta hasta obtener un resultado.

  1. Se ha establecido una conexión desde un programa de aplicación al servidor Postgres. El programa de aplicación transmite una consulta y recibe el resultado enviado por el servidor.

  2. La etapa del parser (traductor) chequea la consulta transmitida por el programa de aplicación (cliente) para comprobar que la sintaxis es correcta y crear un árbol de la consulta.

  3. El sistema de reescritura toma el árbol de la consulta creado en el paso del traductor y busca reglas (almacenadas en los catálogos del sistema) que pueda aplicarle al árbol de la consulta y realiza las transformaciones que se dan en el/los cuerpo/s de la/s regla/s. Encontramos una aplicación del sistema de reescritura en la realización de las vistas.

    Siempre que se realiza una consulta contra una vista (es decir, una tabla virtual), el sistema de reescritura reescribe la consulta del usuario en una consulta que accede a las tablas base dadas en la definición de la vista inicial.

  4. El planeador/optimizador toma el árbol de la consulta (reescrita) y crea un plan de la consulta que será el input para el ejecutor.

    Hace esto creando previamente todas las posibles rutas que le conducen a un mismo resultado. Por ejemplo, si hay un índice en una relación que debe ser comprobada, hay dos rutas para comprobarla. Una posibilidad es un simple barrido secuencial y la otra posibilidad es utilizar el índice. Luego se estima el coste de ejecución de cada plan, y se elige y ejecuta el plan más rápido.

  5. El ejecutor realiza de modo recursivo el árbol del plan y recupera tuplas en la forma representada en el plan. El ejecutor hace uso del sistema de almacenamiento mientras está revisando las relaciones, realiza ordenaciones (sorts) y joins, evalúa cualificaciones y finalmente devuelve las tuplas derivadas.

En las siguientes secciones, cubriremos todos los pasos listados antes en más detalle, para dar un mejor conocimiento de las estructuras de datos y de control interno de Postgres.