Uso de enrutamiento de sentencias eficiente activando ProxySQL en Autonomous Database

ProxySQL permite el acceso unificado a varias bases de datos autónomas mediante sentencias de enrutamiento para DML y consultas, y elimina la necesidad de consolidar físicamente todos los datos en una única base de datos.

Temas

Acerca del enrutamiento eficiente de sentencias con ProxySQL en Autonomous Database

ProxySQL en Autonomous Database permite utilizar varias instancias de Autonomous Database y facilita el acceso y el análisis de datos como si se hubieran almacenado en un solo lugar.

Puede utilizar ProxySQL cuando necesite trabajar con una configuración grande que implique varias bases de datos autónomas. ProxySQL proporciona acceso unificado a diferentes bases de datos y elimina la necesidad de mover físicamente los datos a un solo lugar.

Al activar ProxySQL, designa una instancia de Autonomous Database como instancia de enrutador y una o más instancias de Autonomous Database son instancias de destino. La instancia de enrutador incluye una tabla de enrutamiento que determina cómo se distribuye (asigna) una sentencia a una o más instancias de destino. Una instancia de destino incluye una tabla de aceptación. La tabla de aceptación es similar a la tabla de enrutamiento y contiene entradas que especifican que la instancia acepta redireccionamientos de sentencias del enrutador.

Según el método de enrutamiento que seleccione, las sentencias se asignan automáticamente desde la instancia de enrutador a una o más instancias de destino. Una aplicación se conecta a la instancia de enrutador y se ejecuta en la instancia de enrutador, y Autonomous Database redirige las sentencias a una o más instancias de destino.

A continuación se muestran algunas de las ventajas de activar ProxySQL, en comparación con el uso de una única instancia de Autonomous Database muy grande:

  • ProxySQL proporciona autonomía e independencia de la base de datos para operaciones como la gestión del ciclo de vida y las tareas de administración. Por ejemplo, mediante ProxySQL, las operaciones de base de datos, incluidas la copia de seguridad y la restauración, y funciones como Autonomous Data Guard se gestionan de forma independiente en cada instancia de Autonomous Database.

  • ProxySQL permite gestionar de forma eficaz bases de datos muy grandes dividiendo los datos entre varias instancias de Autonomous Database.

Hay varios términos que se deben conocer al trabajar con ProxySQL:

Instancia de enrutador: al activar ProxySQL, se designa una instancia de enrutador. Una tabla de direccionamiento determina cómo se distribuye (asigna) una sentencia a una o más instancias de destino. Según el método de enrutamiento especificado, las sentencias de la instancia de enrutador se asignan automáticamente a una o más instancias de destino.

Instancia de destino: la instancia de destino se designa al crear una asignación en la instancia de enrutador. Se agrega una tabla de aceptación en cada instancia de destino.

Tabla de enrutamiento: una tabla de enrutamiento contiene entradas de asignación de destino que especifican la instancia a la que se direccionan automáticamente las sentencias.

Tabla de aceptación: una tabla de aceptación contiene entradas que especifican que la instancia acepta redireccionamientos de sentencias desde el enrutador.

Requisitos para utilizar ProxySQL

Los siguientes son los requisitos de ProxySQL:

  • La activación de ProxySQL solo está soportada para las instancias de Autonomous Database que están en un pool elástico. La instancia del enrutador y todas las instancias de destino deben ser miembros del mismo pool elástico.

  • La instancia del enrutador y todas las instancias de destino deben estar en la misma región.

  • Los metadatos de los objetos que está enrutando deben coincidir en las instancias de enrutador y destino. Es responsabilidad del diseñador de aplicaciones que los metadatos de los objetos presentes en una instancia de destino también estén presentes en la instancia del enrutador. Por ejemplo, si tiene una tabla denominada EMPLOYEES en la instancia de destino, también debe tener una tabla con metadatos coincidentes denominados EMPLOYEES en la instancia de enrutador. La tabla de la instancia del enrutador no tiene que estar vacía (solo metadatos).

Recomendación para activar ProxySQL

Las instancias que agregue como enrutador y como destinos pueden ser de cualquier tipo de carga de trabajo de Autonomous Database. Si hay entradas en la tabla de enrutamiento (asignación), las sentencias de los objetos especificados en esas entradas se direccionan a las instancias de destino correspondientes, independientemente del tipo de carga de trabajo del destino. Oracle recomienda que todas las instancias de base de datos theAutonomous utilicen el tipo de carga de trabajo del almacén de datos.

Enrutamiento automático de sentencias con ProxySQL activado

Con ProxySQL puede distribuir sentencias entre destinos mediante cualquiera de los métodos de enrutamiento soportados.

Nota

Independientemente del método de enrutamiento (asignación) que decida utilizar, es responsabilidad del diseñador de esquemas de aplicación asegurarse de que los metadatos de los objetos colocados en una instancia de destino también estén disponibles en la instancia de enrutador. Por ejemplo, si tiene una tabla denominada EMPLOYEES en la instancia de destino, también debe tener una tabla con metadatos coincidentes denominados EMPLOYEES en la instancia de enrutador. La tabla de la instancia del enrutador no tiene que estar vacía.
  • Enrutamiento de nivel de esquema: todos los objetos de un esquema se asignan a una única instancia de destino. Puede asignar varios esquemas a una única instancia de destino. Sin embargo, las sentencias de un esquema no se pueden asignar a varias instancias de destino, lo que significa que no se puede utilizar el mismo esquema para el enrutamiento de esquemas y objetos.

    Para especificar el enrutamiento de nivel de esquema, llame al procedimiento DBMS_PROXY_SQL.ADD_MAPPING con el parámetro object_name definido en el valor "*".


    A continuación se describe proxysql-schema.png
    Descripción de la ilustración proxysql-schema.png

    En este ejemplo, los metadatos de los objetos del esquema A están presentes tanto en la instancia de destino de Autonomous Database 1 como en la instancia de enrutador, y los metadatos de los objetos del esquema B están presentes tanto en la instancia de destino de Autonomous Database 2 como en la instancia de enrutador, etc.

  • Enrutamiento de nivel de objeto: los objetos de un esquema se asignan a varias instancias de destino.

    Para especificar el enrutamiento de nivel de objeto, llame al procedimiento DBMS_PROXY_SQL.ADD_MAPPING con el parámetro object_name definido en un nombre de tabla.


    A continuación se describe proxysql-object.png
    Descripción de la ilustración proxysql-object.png

    En este ejemplo, los metadatos de la tabla A están presentes en el destino 1 y en la instancia del enrutador, y los metadatos de la tabla B están presentes en el destino 2 y en la instancia del enrutador, etc.

  • Enrutamiento híbrido: los objetos de un esquema se direccionan mediante una combinación de enrutamiento a nivel de esquema y enrutamiento a nivel de objeto.


    A continuación se describe proxysql-hybrid.png
    Descripción de la ilustración proxysql-hybrid.png

    En este ejemplo, los metadatos para el esquema A están presentes tanto en la instancia de destino de Autonomous Database 1 como en la instancia de enrutador, y los metadatos para la tabla B (en el esquema B) están presentes tanto en la instancia de destino de Autonomous Database 2 como en la instancia de enrutador, etc.

Asignación de servicios con enrutamiento automático de extractos cuando ProxySQL está activado

Cuando la tabla de enrutamiento indica una asignación a una base de datos de destino, se utiliza el mismo servicio que está conectado a la base de datos del enrutador para el acceso a los datos en la base de datos de destino.

Por ejemplo, si una sesión está conectada al servicio HIGH en la instancia del enrutador, una sentencia o fragmento de sentencia enrutado a una instancia de destino también utiliza el servicio HIGH. Del mismo modo, si una sesión está conectada al servicio MEDIUM en la instancia del enrutador, una sentencia enrutada a una instancia de destino utiliza el servicio MEDIUM.

Si el servicio utilizado para conectarse a la instancia del enrutador no está disponible en una instancia de destino, la sentencia o el fragmento de sentencia enrutados a la instancia de destino utiliza el servicio MEDIUM (los servicios disponibles dependen del tipo de carga de trabajo de Autonomous Database).

Activar enrutamiento de sentencias y definir asignación de esquemas

En esta sección se explica cómo configurar ProxySQL para el enrutamiento automático de sentencias de un enrutador principal a una o más instancias de base de datos de destino.

Activar enrutamiento de extractos y definir asignación de objetos de enrutador a instancias de destino

Para configurar el enrutamiento de sentencias, active ProxySQL en la instancia del enrutador y defina el esquema u objetos cuyas sentencias se asignan (envían) a las bases de datos de destino.

A continuación se muestran los requisitos para activar el enrutamiento automático de sentencias:

  • Cree la instancia de Autonomous Database que desea utilizar para la instancia de enrutador o identifique una instancia de Autonomous Database existente como instancia de enrutador.

  • Cree las instancias de destino o identifique las instancias de destino a partir de las instancias de Autonomous Database existentes.

  • Asegúrese de que la instancia del enrutador y cualquier instancia de destino en la que redirija consultas tengan metadatos coincidentes para los objetos que está asignando del enrutador a un destino.

    Independientemente del método de enrutamiento (asignación) que decida utilizar, es responsabilidad del diseñador de esquemas de aplicación asegurarse de que los metadatos de los objetos colocados en una instancia de destino también estén disponibles en la instancia del enrutador. Por ejemplo, si tiene una tabla denominada EMPLOYEES en la instancia de destino, también debe tener una tabla con metadatos coincidentes denominados EMPLOYEES en la instancia de enrutador. La tabla de la instancia del enrutador no tiene que estar vacía.

  • En las opciones disponibles, determine el tipo de enrutamiento de sentencias que desea utilizar: enrutamiento de nivel de esquema, enrutamiento de nivel de objeto o enrutamiento híbrido.

Para activar el enrutamiento automático de sentencias y agregar entradas de asignación de destino a la tabla de enrutamiento:

  1. En una instancia de Autonomous Database, ejecute DBMS_PROXY_SQL.ENABLE_ROUTING para activar el enrutamiento automático de sentencias.

    Por ejemplo:

    BEGIN
       DBMS_PROXY_SQL.ENABLE_ROUTING;
    END;
    /

    La instancia en la que se ejecuta DBMS_PROXY_SQL.ENABLE_ROUTING se convierte en la instancia del enrutador. Esto activa el enrutamiento automático de sentencias y crea la tabla de enrutamiento.

    Consulte ENABLE_ROUTING Procedure para obtener más información.

  2. Ejecute DBMS_PROXY_SQL.ADD_MAPPING para definir la asignación del enrutador a un destino. Esto crea una entrada en la tabla de direccionamiento que especifica la instancia de destino a la que se direccionan automáticamente las consultas.

    Ejemplo para activar el enrutamiento a nivel de objeto:

    BEGIN
     DBMS_PROXY_SQL.ADD_MAPPING ( 
        object_owner   => 'DW_USER',
        object_name    => 'INVENTORY',
        database_ocid  => 'TARGET1_DATABASE_OCID');
    END;
    /

    Ejemplo para activar el enrutamiento a nivel de esquema:

    BEGIN
     DBMS_PROXY_SQL.ADD_MAPPING ( 
        object_owner   => 'DW_USER',
        object_name    => '*',
        database_ocid  => 'TARGET2_DATABASE_OCID');
    END;
    /

    Utilice la siguiente consulta para recuperar el OCID de la base de datos:

    SELECT json_value(cloud_identity,'$.DATABASE_OCID') 
       FROM v$pdbs;
    

    El parámetro object_owner especifica el propietario del objeto.

    El parámetro object_name especifica el objeto.

    El parámetro database_ocid especifica el OCID de la instancia de destino. El valor del parámetro database_ocid debe estar en mayúsculas. Puede determinar el OCID de la instancia de destino conectándose a la instancia de destino como ADMIN y ejecutando la siguiente consulta:

    SELECT json_value(cloud_identity, '$.DATABASE_OCID') FROM v$pdbs;

    Consulte Obtener detalles de arrendamiento para obtener más información.

    Esto crea una entrada de direccionamiento en la tabla de direccionamiento y define una asignación de objeto a una instancia de destino.

    Consulte ADD_MAPPING Procedure para obtener más información.

  3. Ejecute DBMS_PROXY_SQL.ADD_MAPPING para agregar asignaciones de destino adicionales, según sea necesario.

    Por ejemplo:

    BEGIN
     DBMS_PROXY_SQL.ADD_MAPPING ( 
        object_owner   => 'DW_USER_1',
        object_name    => 'CUSTOMERS',
        database_ocid  => 'TARGET3_DATABASE_OCID');
    END;
    /

Puede consultar la vista DBA_PROXY_SQL_MAPPINGS para mostrar los registros en la tabla de enrutamiento. Consulte DBA_PROXY_SQL_MAPPINGS View para obtener más información.

Aceptar enrutamiento de extracto en instancias de destino

Debe aceptar el enrutamiento de sentencias en una instancia de destino para permitir la asignación desde la instancia de enrutador.

Para permitir (aceptar) redireccionamientos de sentencias de la instancia de enrutador a una instancia de destino:

  1. En la instancia de destino, ejecute DBMS_PROXY_SQL.ACCEPT_MAPPING.

    Por ejemplo:

    BEGIN
     DBMS_PROXY_SQL.ACCEPT_MAPPING ( 
        object_owner          => 'DW_USER',
        router_database_ocid  => 'ROUTER_DATABASE_OCID'); 
     END;
    /

    object_owner es el propietario para el que el destino acepta el enrutamiento de sentencias.

    router_database_ocid especifica el OCID de la instancia de Autonomous Database del enrutador. Especifica la instancia desde la que el destino acepta solicitudes de sentencias redirigidas entrantes.

    La asignación de aceptación es una por propietario de objeto, por lo que solo se puede requerir una aceptación correspondiente a varias asignaciones de objeto en la instancia del enrutador.

    Puede declarar la vista DBMS_PROXY_SQL_ACCEPTED_MAPPINGS para mostrar los registros en la tabla de aceptación. Consulte DBA_PROXY_SQL_ACCEPTED_MAPPINGS View para obtener más información.

    Consulte ACCEPT_MAPPING Procedure para obtener más información.

  2. Si hay varios destinos especificados en la asignación de enrutadores, ejecute DBMS_PROXY_SQL.ACCEPT_MAPPING en cada destino.

    Consulte ACCEPT_MAPPING Procedure para obtener más información.

Enviar sentencias a través de ProxySQL

Para aprovechar el enrutamiento automático de sentencias, debe conectarse y enviar las sentencias a la instancia de enrutador gestionada por ProxySQL.

Al enviar consultas, incluidas las sentencias DML, con ProxySQL activado, debe conectarse a la instancia del enrutador para aprovechar el enrutamiento automático de sentencias.

Parada del Direccionamiento de Sentencias a una Instancia de Destino

Realice estos pasos en una instancia de Autonomous Database de destino para evitar que esta acepte sentencias enrutadas desde el enrutador ProxySQL.

  1. Ejecute DBMS_PROXY_SQL.REJECT_MAPPING en una instancia de destino para rechazar el enrutamiento de sentencias para el propietario especificado.

    Por ejemplo:

    BEGIN
     DBMS_PROXY_SQL.REJECT_MAPPING ( 
        object_owner          => 'DW_USER',
        router_database_ocid  => 'ROUTER_DATABASE_OCID');
     END;
    /

    El parámetro object_owner especifica el nombre del propietario.

    El parámetro router_database_ocid especifica el OCID de la instancia del enrutador.

    La instancia de Autonomous Database de destino en la que ejecuta este procedimiento ya no solicita solicitudes de enrutamiento de la instancia de enrutador especificada para el propietario del objeto especificado.

  2. Ejecute DBMS_PROXY_SQL.REJECT_MAPPING en destinos adicionales según sea necesario.

Consulte REJECT_MAPPING Procedure para obtener más información.

Eliminar esquema o asignación de objetos de la instancia del enrutador

Proporciona los pasos para eliminar una asignación específica de la base de datos de enrutador gestionada por ProxySQL.

  1. Puede utilizar el procedimiento DBMS_PROXY_SQL.REMOVE_MAPPING para eliminar una entrada de asignación agregada previamente para el objeto especificado. Por ejemplo:

    Ejemplo con una tabla:

    BEGIN
     DBMS_PROXY_SQL.REMOVE_MAPPING ( 
        object_owner   => 'DW_USER',
        object_name    => 'INVENTORY');
     END;
    /
    En este ejemplo, se elimina la entrada de asignación para la tabla INVENTORY de la tabla de enrutamiento. Después de ejecutar este procedimiento, las consultas de la tabla INVENTORY no se direccionan a ninguna instancia de Autonomous Database de destino.

    Ejemplo: con un esquema:

    BEGIN
     DBMS_PROXY_SQL.REMOVE_MAPPING ( 
        object_owner   => 'DW_USER',
        object_name    => '*');
     END;
    /
    En este ejemplo, se elimina la entrada de asignación para el esquema DW_USER de la tabla de enrutamiento. Después de ejecutar este procedimiento, las consultas en el esquema DW_USER no se direccionan a ninguna instancia de Autonomous Database de destino.

    El parámetro object_owner especifica el propietario.

    El parámetro object_name especifica el nombre de la tabla.

    Consulte REMOVE_MAPPING Procedure para obtener más información.

Desactivar enrutamiento de extracto

Muestra los pasos para el enrutamiento automático de sentencias desactivando ProxySQL.

Ejecute DBMS_PROXY_SQL.DISABLE_ROUTING en la instancia del enrutador para desactivar ProxySQL y para desactivar el enrutamiento automático de sentencias a las instancias de destino.

Por ejemplo:

BEGIN
 DBMS_PROXY_SQL.DISABLE_ROUTING;
END;
/

Esto desactiva ProxySQL y desactiva el enrutamiento automático de sentencias en el enrutador.

Al desactivar ProxySQL, las entradas de asignación de sentencias de la tabla de enrutamiento de la instancia de enrutador no se suprimen. Esto significa que si vuelve a activar ProxySQL y la tabla de direccionamiento tiene entradas existentes, el direccionamiento automático de sentencias direcciona las sentencias a las instancias de destino, como se especifica en la tabla de direccionamiento. Utilice el procedimiento DBMS_PROXY_SQL.REMOVE_MAPPING si desea eliminar las entradas existentes de la tabla de enrutamiento antes de volver a activar ProxySQL.

Consulte DISABLE_ROUTING Procedure para obtener más información.

Enrutamiento automático de extractos con notas ProxySQL

Muestra las limitaciones y las notas importantes sobre el enrutamiento automático de sentencias cuando ProxySQL está activado.

  • El usuario ADMIN tiene los privilegios para gestionar ProxySQL. Si desea activar otro usuario, debe otorgar los siguientes privilegios

    • privilegio EXECUTE en el paquete DBMS_PROXY_SQL.

    • Privilegio READ en la vista DBA_PROXY_SQL_MAPPINGS.

    • Privilegio READ en la vista DBA_PROXY_SQL_ACCEPTED_MAPPINGS.

  • El enrutamiento automático de sentencias se reanuda sin problemas cuando:
    • La instancia de Autonomous Database de destino realiza un failover a una instancia en espera de Autonomous Data Guard local.

    • Puede realizar un switchover para una instancia de Autonomous Database de destino en una instancia en espera de Autonomous Data Guard local.

    Sin embargo, el enrutamiento automático de sentencias se para después de un failover o switchover a una base de datos en espera de Autonomous Data Guard entre regiones.