Introducción a Azure Database for PostgreSQL

Completado

Azure Database for PostgreSQL está disponible en las versiones de multiservidor.

Como desarrollador de bases de datos con muchos años de experiencia en la ejecución y administración de instalaciones locales de PostgreSQL, desea explorar cómo Azure Database for PostgreSQL admite y escala sus características.

En esta unidad, explorará las opciones de precios, compatibilidad de versiones, replicación y escalado de Azure Database for PostgreSQL.

Azure Database for PostgreSQL

El servicio Azure Database for PostgreSQL es una implementación de la versión de la comunidad de PostgreSQL. El servicio proporciona las características comunes que se usan en los sistemas de PostgreSQL típicos, como la compatibilidad geoespacial y la búsqueda de texto completo.

Microsoft ha adaptado PostgreSQL para la plataforma de Azure y está totalmente integrado en muchos servicios de Azure. Microsoft administra totalmente el servicio Azure Database for PostgreSQL. Microsoft controla las actualizaciones y revisiones del software y proporciona un Acuerdo de Nivel de Servicio con una disponibilidad del 99,99 %. Esto significa que solo se puede centrar en las bases de datos y aplicaciones que se ejecutan mediante el servicio.

Puede implementar varias bases de datos en cada instancia de este servicio.

Planes de tarifa

Para crear una instancia del servicio Azure Database for PostgreSQL, debe especificar los recursos de proceso y almacenamiento que desea asignar mediante la selección de un plan de tarifa. Un plan de tarifa combina el número de núcleos de procesador virtual, la cantidad de almacenamiento disponible y diversas opciones de copia de seguridad. Cuanto más recursos asigne, mayor será el costo.

El servicio Azure Database for PostgreSQL usa el almacenamiento para hospedar los archivos de base de datos, los archivos temporales, los registros de transacciones y los registros del servidor. Opcionalmente, puede especificar que desea que el almacenamiento ofrezca la posibilidad de aumentarse cuando se aproxime a la capacidad actual. Si no selecciona esta opción, los servidores que se queden sin almacenamiento seguirán ejecutándose, pero serán de solo lectura.

En Azure Portal, los planes de tarifa se clasifican en tres grupos amplios:

  • Básico: es adecuado para entornos de desarrollo y sistemas pequeños, pero tiene un rendimiento de E/S variable.
  • De uso general: proporciona un rendimiento predecible, hasta 6000 IOPS, en función del número de núcleos de procesador y del espacio de almacenamiento disponible.
  • Optimizado para memoria: usa hasta 32 núcleos de procesador virtual optimizados para memoria y también proporciona un rendimiento predecible de hasta 6000 IOPS.

Microsoft también tiene una opción de almacenamiento de gran tamaño en versión preliminar, que puede aprovisionar hasta 16 TB de almacenamiento y admite hasta 20 000 IOPS.

Puede ajustar el número de núcleos de procesador y la cantidad de almacenamiento que necesita. Puede escalar y reducir verticalmente los recursos de procesamiento (no puede reducir verticalmente el almacenamiento, solo escalarlo verticalmente) y cambiar entre los planes de tarifa De uso general y Optimizado para memoria, según sea necesario, después de haber creado sus bases de datos. Solo paga por lo que necesita.

Image showing the pricing tiers in the Azure portal

Nota:

Si cambia el número de núcleos de procesador, Azure crea un servidor con esta asignación de proceso. Una vez que el nuevo servidor está en ejecución, las conexiones de cliente se transfieren a él. Este cambio puede tardar hasta un minuto. Durante este intervalo, no se pueden realizar nuevas conexiones y se revertirán las transacciones en curso.

Si solo cambia el tamaño de almacenamiento de las opciones de copia de seguridad, no se produce ninguna interrupción del servicio.

El plan de tarifa y los recursos de procesamiento asignados determinan el número máximo de conexiones simultáneas que el servicio admitirá. Por ejemplo, si selecciona el plan de tarifa De uso general y asigna 64 núcleos virtuales, el servicio admite 1900 conexiones simultáneas. El plan Básico, con dos núcleos virtuales, controla hasta 100 conexiones simultáneas. El propio Azure requiere cinco de estas conexiones para supervisar el servidor. Si supera el número de conexiones disponibles, los clientes recibirán el error FATAL: sorry, too many clients already (ERROR IRRECUPERABLE: ya hay demasiados clientes).

Los precios pueden cambiar. Visite la página Precios de Azure Database for PostgreSQL para obtener la información más reciente.

Parámetros del servidor

En una instalación local de PostgreSQL, establezca los parámetros de configuración del servidor en el archivo postgresql.conf. Use Azure Database for PostgreSQL para modificar los parámetros de configuración según la página Parámetros del servidor. No todos los parámetros de una instalación local de PostgreSQL son relevantes para Azure Database for PostgreSQL, por lo que en la página Parámetros del servidor solo se enumeran los parámetros que son adecuados para Azure.

Image showing the Server parameters page in the Azure portal

Los cambios en los parámetros marcados como Dinámicos surten efecto inmediatamente. Los parámetros estáticos requieren un reinicio del servidor. Reinicie el servidor con el botón Reiniciar en la página Información general del portal:

Image showing the Overview page in the Azure portal with the Restart button highlighted

Alta disponibilidad

Azure Database for PostgreSQL es un servicio de alta disponibilidad. Integra mecanismos de conmutación por error y de detección de errores. Si un nodo de procesamiento se detiene debido a un problema de hardware o software, se conmutará un nuevo nodo para reemplazarlo. Las conexiones que usen actualmente ese nodo se anularán, pero se abrirán automáticamente en el nuevo nodo. Se revertirán todas las transacciones realizadas por el nodo con errores. Por esta razón, siempre debe asegurarse de que los clientes estén configurados para detectar y reintentar las operaciones con errores.

Versiones de PostgreSQL admitidas

El servicio Azure Database for PostgreSQL admite actualmente PostgreSQL 11, que se revertió a la versión 9.5. Especifique la versión de PostgreSQL que se va a usar al crear una instancia del servicio. Microsoft tiene la finalidad de actualizar el servicio a medida que estén disponibles nuevas versiones de PostgreSQL y mantendrán la compatibilidad con las dos versiones principales anteriores.

Azure administra automáticamente las actualizaciones de las bases de datos entre las versiones secundarias de PostgreSQL, pero no las versiones principales. Por ejemplo, si tiene una base de datos que usa PostgreSQL 10, Azure puede actualizar automáticamente la base de datos a la versión 10.1. Si desea cambiar a la versión 11, debe exportar los datos de las bases de datos de la instancia de servicio actual, crear una instancia del servicio Azure Database for PostgreSQL e importar los datos en esta nueva instancia.

Nodos de coordinación y de trabajo

Los datos se particionan y se distribuyen entre los nodos de trabajo. El motor de consultas del nodo de coordinación puede paralelizar las consultas complejas, dirigiendo el procesamiento hacia los nodos de trabajo adecuados. Los nodos de trabajo se seleccionan según las particiones que contienen los datos que se están procesando. A continuación, el nodo de coordinación acumula los resultados de los nodos de trabajo antes de volver a enviarlos al cliente. Se pueden realizar consultas más sencillas con un solo nodo de trabajo. Los clientes también se conectan al nodo de coordinación y nunca se comunican directamente con un nodo de trabajo.

Puede escalar y reducir verticalmente el número de nodos de trabajo del servicio, según sea necesario.

Distribución de datos

Distribuya los datos entre los nodos de trabajo mediante la creación de tablas distribuidas. Una tabla distribuida se divide en particiones, y cada partición se asigna al almacenamiento en un nodo de trabajo. Para indicar cómo dividir los datos, defina una columna como columna de distribución. Los datos se particionan en función de los valores de los datos de esta columna. Al diseñar una tabla distribuida, es importante seleccionar detenidamente la columna de distribución. Debe utilizar una columna con un gran número de valores distintos que normalmente se usarían para agrupar las filas relacionadas. Por ejemplo, en una tabla de un sistema de comercio electrónico que almacena información sobre los pedidos de los clientes, el id. de cliente puede ser una columna de distribución razonable. Todos los pedidos de un cliente determinado se conservarán en la misma partición, pero los pedidos de todos los clientes se distribuirán entre las particiones.

También puede crear tablas de referencia. Estas tablas contienen datos de búsqueda, como los nombres de ciudades o códigos de estado. Una tabla de referencia se replica totalmente en todos los nodos de trabajo. Los datos de una tabla de referencia deben ser relativamente estáticos; cada cambio requiere la actualización de todas las copias de la tabla.

Por último, puede crear tablas locales. Una tabla local no está particionada, pero se almacena en el nodo de coordinación. Use tablas locales para que contengan tablas pequeñas con datos que probablemente no sean necesarios para las combinaciones. Entre los ejemplos se incluyen los nombres de los usuarios y sus detalles de inicio de sesión.

Replicación de datos en Azure Database for PostgreSQL

Las réplicas de solo lectura son útiles para controlar cargas de trabajo de lectura intensiva. Las conexiones de cliente se pueden distribuir entre réplicas, lo que alivia la carga en una única instancia del servicio. Si los clientes se encuentran en diferentes regiones del mundo, puede usar la replicación entre regiones para colocar los datos cerca de cada conjunto de clientes y reducir la latencia.

También puede usar réplicas como parte de un plan de contingencia para la recuperación ante desastres. Si el servidor maestro deja de estar disponible, es posible que todavía pueda conectarse a una réplica.

Nota:

Si el servidor maestro se pierde o elimina, todas las réplicas de solo lectura se convierten, en su lugar, en servidores de lectura y escritura. Sin embargo, estos servidores serán independientes entre sí, por lo que los cambios realizados en los datos de un servidor no se copiarán en el resto de servidores.

Establecimiento de una réplica

Una réplica de solo lectura contiene una copia de las bases de datos que se encuentran en el servidor original, que se conoce como maestro. Puede usar tanto Azure Portal como la CLI para crear una réplica de un servidor maestro.

Image showing the Replication page for the Azure Database for PostgreSQL service

Cuando se crea una réplica de solo lectura, Azure crea una instancia del servicio Azure Database for PostgreSQL y, a continuación, copia las bases de datos del servidor maestro en el servidor nuevo. La réplica se ejecuta en modo de solo lectura. Se producirá un error al intentar modificar los datos.

Retraso entre réplicas

La replicación no es sincrónica, y los cambios realizados en los datos del servidor maestro pueden tardar algún tiempo en aparecer en las réplicas. Las aplicaciones cliente que se conectan a las réplicas deben ser capaces de afrontar este nivel de coherencia ocasional. Azure Monitor le permite realizar un seguimiento del retraso en la replicación mediante las métricas Retraso máximo entre réplicas y Retraso entre réplicas.

Administración y supervisión

Puede usar herramientas conocidas como pgAdmin para conectarse a Azure Database for PostgreSQL para administrar y supervisar las bases de datos. pero algunas funcionalidades centradas en el servidor, como la realización de copias de seguridad y la restauración del servidor, no están disponibles porque Microsoft se encarga de administrar y mantener el servidor.

Image showing the pgAdmin tool connected to Azure Database for PostgreSQL

Azure Tools para supervisar Azure Database for PostgreSQL

Azure proporciona un amplio conjunto de servicios que se usan para supervisar el rendimiento del servidor y de la base de datos, así como para solucionar problemas. Estos servicios le permiten ver cómo PostgreSQL usa los recursos de Azure que ha asignado. Utilice esta información para evaluar si necesita escalar el sistema, modificar la estructura de las tablas y los índices de las bases de datos y visualizar las estadísticas en tiempo de ejecución y otros eventos. Los servicios disponibles incluyen los siguientes:

  • Azure Monitor. Azure Database for PostgreSQL proporciona métricas que le permiten realizar un seguimiento de elementos como la utilización de la CPU y del almacenamiento, las tasas de E/S, la ocupación de la memoria, el número de conexiones activas y el retraso de la replicación:

    Image showing the Azure Monitor with metrics for Azure Database for PostgreSQL

  • Registros del servidor. Azure permite que los registros estén disponibles en cada servidor de PostgreSQL. Puede descargarlos desde Azure Portal:

    Image showing the server logs for an instance of the Azure Database for PostgreSQL service

  • Almacén de consultas e Información de rendimiento de consultas Azure Database for PostgreSQL almacena información sobre las consultas que se ejecutan en las bases de datos del servidor y las guarda en una base de datos llamada azure_sys, en el esquema query_store. Consulte la vista query_store.qs_view para ver esta información. De forma predeterminada, Azure Database for PostgreSQL no captura ninguna información de consulta, ya que impone una pequeña sobrecarga, pero puede habilitar el seguimiento estableciendo la propiedad de servidor pg_qs.query_capture_mode en ALL o TOP.

    Image showing the server server parameters page for Azure Database for PostgreSQL

    Configure también el Almacén de consultas para capturar información sobre las consultas que pasan tiempo en espera. Es posible que una consulta tenga que esperar mientras otra quita un bloqueo en una tabla, o bien porque la consulta realiza muchas operaciones de E/S o porque la memoria se está agotando. Verá esta información en la vista query_store.runtime_stats_view.

    Si prefiere visualizar estas estadísticas en lugar de ejecutar instrucciones SQL, use Información de rendimiento de consultas en Azure Portal:

    Image showing Query Performance Insight

  • Recomendaciones de rendimiento. La utilidad Recomendaciones de rendimiento, también disponible en Azure Portal, examina las consultas que se ejecutan en las aplicaciones. También examina las estructuras de la base de datos y recomienda cómo organizar los datos, y si se debe considerar la posibilidad de agregar o quitar índices.

Conectividad de clientes

Azure Database for PostgreSQL se ejecuta detrás de un firewall. Para acceder al servicio y a la base de datos, debe agregar una regla de firewall para los intervalos de direcciones IP desde las que se conectan los clientes. Si necesita acceder al servicio desde dentro de Azure, como una aplicación que se ejecuta con Azure App Service, también debe habilitar el acceso a los servicios de Azure.

Configuración del firewall

La manera más sencilla de configurar el firewall es usar la configuración de seguridad de conexión para el servicio en Azure Portal. Agregue una regla para cada intervalo de direcciones IP de cliente. Use también esta página para aplicar conexiones SSL al servicio.

Image showing the firewall configuration for Azure Database for PostgreSQL

Haga clic en Agregar IP de cliente en la barra de herramientas para agregar la dirección IP del equipo de escritorio.

Si configuró réplicas de solo lectura, debe agregar una regla de firewall a cada una para que los clientes puedan acceder a ellas.

Bibliotecas de conexión de cliente

Si va escribir sus propias aplicaciones cliente, debe utilizar el controlador de base de datos adecuado para conectarse a una base de datos PostgreSQL. Muchas de estas bibliotecas dependen del lenguaje de programación. Terceros independientes se encargan de su mantenimiento. Azure Database for PostgreSQL es compatible con las bibliotecas cliente de Python, PHP, Node.js, Java, Ruby, Go, C# (.NET), ODBC, C y C++.

Lógica de reintento de cliente

Como se mencionó anteriormente, algunos eventos, como la conmutación por error durante la recuperación de alta disponibilidad y el escalado vertical de los recursos de CPU, pueden provocar una breve pérdida de conectividad. Se revertirán todas las transacciones en curso. Azure Database for PostgreSQL redirige automáticamente un cliente conectado a un nodo de trabajo, pero las operaciones realizadas por el cliente en ese momento devolverán un error. Debe tratar este hecho como una excepción transitoria. El código de la aplicación debe estar preparado para detectar estas excepciones y para realizar reintentos.

Características de PostgreSQL admitidas en Azure Database for PostgreSQL

Azure Database for PostgreSQL admite la mayoría de las características que suelen usar las bases de datos PostgreSQL, pero hay algunas excepciones. Si necesita una característica no admitida, deberá reprocesar la base de datos y el código de la aplicación para quitar esta dependencia, o bien considerar la ejecución de PostgreSQL en una máquina virtual. En el último caso, tendrá que asumir la responsabilidad de administrar y mantener el servidor.

Extensiones admitidas en Azure Database for PostgreSQL

Gran parte de la funcionalidad de PostgreSQL se encuentra en las extensiones. Las extensiones son paquetes de código y objetos SQL que se almacenan en el servidor; se pueden cargar en una base de datos mediante el comando CREATE EXTENSION. Actualmente, Azure Database for PostgreSQL proporciona muchas extensiones usadas con frecuencia para:

  • Tipos de datos
  • Funciones
  • Búsqueda de texto completo
  • Índices (bloom, btree_gist y btree_gin)
  • Lenguaje plpgsql
  • PostGIS
  • Muchas funciones administrativas

Use los paquetes dblink y postgres_fdw para conectar un servidor PostgreSQL a otro; esto permite que el código de un servidor acceda a los datos contenidos en otro. En Azure Database for PostgreSQL, la conexión solo puede establecerse entre servidores creados mediante Azure Database for PostgreSQL. No se pueden crear conexiones salientes a servidores PostgreSQL hospedados en otros lugares, como un entorno local o una máquina virtual.

Nota:

La lista de extensiones admitidas está continuamente en revisión y puede cambiar. Generará una lista de las extensiones admitidas con la siguiente consulta. Tenga en cuenta que no puede crear sus propias extensiones personalizadas y cargarlas en Azure Database for PostgreSQL:

SELECT * FROM pg_available_extensions;

Azure Database for PostgreSQL incluye la base de datos TimescaleDB como una extensión opcional. Esta base de datos contiene funciones analíticas orientadas al tiempo y otras características que admiten cargas de trabajo de serie temporal. Para usar esta base de datos, seleccione la opción TIMESCALEDB en el parámetro de servidor shared_preload_libraries y, a continuación, reinicie el servidor.

Compatibilidad de lenguajes con los desencadenadores y los procedimientos almacenados

La compatibilidad con otros lenguajes que no sean plpgsql normalmente requiere compilar el código del desencadenador o del procedimiento almacenado por separado, aparte de cargar la biblioteca compilada en el servidor. Principalmente por motivos de seguridad, no puede hacer esto con Azure Database for PostgreSQL. Si tiene código escrito en otros lenguajes, tendrá que trasladarlo a plpgsql.