Conferencia de la Conferencia Postgres 2024 丨 Un artículo explica en detalle la esencia del discurso informativo de Tuoshupai

Del 17 al 19 de abril, se celebró en San José, EE. UU., la Conferencia Postgres 2024, una de las conferencias de PostgreSQL más grandes del mundo. Esta conferencia incluyó cuatro temas: Operaciones, Desarrollo, Esenciales y Google Cloud. Se lanzaron temas como gestión y aplicación, ejemplos de usuarios y experiencia de base de datos, y se invitó a asistir a la conferencia a profesores destacados de Google, AWS, EDB, Yugabyte, DBeaver y otras empresas. Con su fuerte influencia en la comunidad tecnológica internacional, Tuoshupai fue invitado a participar en este evento como patrocinador de la conferencia y pronunciar un discurso técnico.

En la conferencia, el experto técnico de PieCloudDB, Richard Guo, como nuevo colaborador de PostgreSQL, fue invitado a pronunciar un discurso técnico "Una introducción de alto nivel al planificador de consultas en PostgreSQL combinando la experiencia de construir el optimizador de base de datos PieCloudDB". Se presenta en detalle cómo funciona el optimizador de PostgreSQL desde la perspectiva del desarrollador y el proceso de convertir un árbol de consultas en un árbol de planes. El discurso de Richard recibió comentarios positivos de la audiencia y generó una interacción y comunicación profundas.

En un sistema de gestión de bases de datos (DBMS), el procesamiento de consultas SQL es un proceso complejo y crítico. Para PostgreSQL, una declaración SQL debe pasar por los siguientes cinco pasos principales desde la recepción hasta la ejecución:

  • Analizador: responsable de comprobar errores de sintaxis y generar un árbol de analizador;
  • Análisis (Analizador): realice un análisis semántico basado en el árbol de análisis y genere un árbol de consulta;
  • Reescritor: reescribe el árbol de consultas de acuerdo con las reglas que existen en el sistema;
  • Planificación/optimización (Planner): genere un árbol de plan con la mayor eficiencia de ejecución según el árbol de consultas;
  • Ejecutor: acceda a tablas e índices en el orden en el árbol del plan y ejecute la consulta correspondiente.

La misma declaración de consulta generalmente se puede ejecutar de varias maneras. Como componente importante de la base de datos, la función del optimizador de consultas es encontrar el plan de consulta con el menor costo de cada modo de ejecución posible y convertirlo en un árbol de plan ejecutable.

Lo siguiente se centrará en la fase de planificación/optimización en el procesamiento de consultas de PostgreSQL, que también es la fase más importante y compleja de todo el proceso. El proceso generalmente se divide en cuatro etapas: etapa de preprocesamiento, etapa de optimización de escaneo/conexión, etapa de optimización fuera del escaneo/conexión y etapa de posprocesamiento.

1. Etapa de preprocesamiento

En la etapa inicial de la fase de preprocesamiento, las consultas generalmente se simplifican tanto como sea posible simplificando expresiones constantes (funciones, booleanas, CASE, etc.) e incorporando funciones SQL simples. Al mismo tiempo, el árbol de unión se simplificará convirtiendo IN, EXISTS y otros tipos de subconsultas en semiuniones, promoviendo subconsultas y eliminando uniones externas (convirtiéndolas en uniones internas o antiuniones).

Además de estos métodos, se utilizan una variedad de métodos de optimización más adelante en la etapa de preprocesamiento, que incluyen:

  • Distribuir restricciones WHERE y JOIN/ON
  • Construir clases de equivalencia
  • Recopilar información sobre las restricciones de pedidos para unirse
  • Eliminar conexiones inútiles
  • ...

2. Fase de escaneo/optimización de la conexión

La fase de optimización de escaneo/conexión procesa principalmente las partes DESDE y DÓNDE de la declaración de consulta, y también considera la información ORDER BY. Toda esta parte está determinada por el costo.

Esta etapa primero determina la ruta de escaneo para la tabla base, estima el costo de la ruta de escaneo y luego utiliza programación dinámica y algoritmos genéticos para buscar en todo el espacio de secuencia de conexión y generar la ruta de conexión. Al buscar el espacio del orden de conexión, también es necesario considerar las restricciones del orden de conexión causadas por las uniones externas.

En programación dinámica, la búsqueda de conexiones se realizará de la siguiente manera:

  • Primero genere una ruta de escaneo para cada tabla base
  • Genere rutas de unión para todas las uniones posibles de dos tablas
  • Genere rutas de unión para todas las uniones posibles de las tres tablas.
  • Genere rutas de unión para todas las uniones posibles de cuatro tablas
  • ...
  • Hasta que todas las mesas base estén conectadas entre sí.

Sin embargo, el costo de este proceso es muy alto. En teoría, hay n! órdenes de conexión diferentes para la conexión de n tablas. No es realista recorrer todas las órdenes de conexión posibles. Por lo tanto, generalmente se utilizan algunos métodos heurísticos para reducir el espacio de búsqueda. Para las tablas que no tienen condiciones de unión, intente no descomponer un problema grande en múltiples subproblemas para reducir la complejidad.

3. Fase de optimización más allá del escaneo/conexión

En esta etapa, el optimizador priorizará GROUP BY, agregación, funciones de ventana y DISTINCT, luego procesará las operaciones de recopilación (UNION/INTERSECT/EXCEPT) y finalmente procesará ORDER BY. Cada uno de los pasos anteriores generará una o más rutas. El optimizador filtrará estas rutas según el costo y agregará nodos LockRows, Limit y ModifyTable a las rutas filtradas.

4. Etapa de posprocesamiento

En esta etapa, el optimizador necesita convertir la ruta de menor costo en un árbol de plan y ajustar algunos detalles en el árbol de plan:

  • Aplanar la tabla de rangos de una subconsulta
  • Cambie las variables en el nodo del plan superior al formato OUTER_VAR o INNER_VAR para que apunten a la salida del subplan.
  • Elimine SubqueryScan, Append, MergeAppend y otros nodos innecesarios

Después de completar este paso, el optimizador obtendrá el árbol del plan completo y podrá entregarlo al ejecutor para su ejecución y finalmente obtener los resultados de la consulta.

Como empresa de innovación de alta tecnología con sede en China, Tuoshupai ha estado profundamente involucrada en la tecnología y el ecosistema de código abierto internacional a través de contribuciones de código, conferencias, patrocinio y participación en conferencias, cooperación ecológica y otras formas en los últimos años. En el futuro, Tuoshupai seguirá ampliando sus horizontes internacionales, integrándose activamente en la ola de innovación tecnológica global, ampliando su influencia internacional y construyendo una empresa internacional impulsada por la tecnología.

Decidí renunciar al código abierto Hongmeng Wang Chenglu, el padre del código abierto Hongmeng: El código abierto Hongmeng es el único evento de software industrial de innovación arquitectónica en el campo del software básico en China: se lanza OGG 1.0, Huawei contribuye con todo el código fuente. Google Reader es asesinado por la "montaña de mierda de códigos" Fedora Linux 40 se lanza oficialmente Ex desarrollador de Microsoft: el rendimiento de Windows 11 es "ridículamente malo" Ma Huateng y Zhou Hongyi se dan la mano para "eliminar rencores" Compañías de juegos reconocidas han emitido nuevas regulaciones : los regalos de boda de los empleados no deben exceder los 100.000 yuanes Ubuntu 24.04 LTS lanzado oficialmente Pinduoduo fue sentenciado por competencia desleal Compensación de 5 millones de yuanes
{{o.nombre}}
{{m.nombre}}

Supongo que te gusta

Origin my.oschina.net/u/5944765/blog/11059181
Recomendado
Clasificación