Prácticas recomendadas para el rendimiento de RLS
A continuación, se enumeran las prácticas recomendadas para garantizar un mejor rendimiento de Amazon Redshift en las tablas protegidas por RLS.
Seguridad de los operadores y las funciones
Al consultar tablas protegidas por RLS, el uso de determinados operadores o funciones puede conducir a un deterioro del rendimiento. Amazon Redshift clasifica a los operadores y las funciones como seguros o no seguros para consultar tablas protegidas por RLS. Una función u operador se clasifica como seguro para RLS cuando no tiene efectos secundarios observables en función de las entradas. Concretamente, una función u operador seguro para RLS no puede ser uno de los siguientes:
-
Muestra un valor de entrada, o un valor que depende del valor de entrada, con o sin un mensaje de error.
-
Falla o devuelve errores que dependen del valor de entrada.
Entre los operadores no seguros para RLS se incluyen los siguientes:
-
Operadores aritméticos: +, -, /, *, %.
-
Operadores de texto: LIKE y SIMILAR TO.
-
Operadores cast.
-
UDF.
Utilice la siguiente instrucción SELECT para comprobar la seguridad de los operadores y las funciones.
SELECT proname, proc_is_rls_safe(oid) FROM pg_proc;
Al planificar consultas en tablas protegidas por RLS, Amazon Redshift impone restricciones al orden de evaluación de los predicados de usuario que contienen operadores y funciones no seguros para RLS. Las consultas que hacen referencia a operadores o funciones no seguros para RLS pueden provocar un deterioro del rendimiento al consultar tablas protegidas por RLS. El rendimiento puede deteriorarse de manera significativa cuando Amazon Redshift no puede enviar predicados no seguros para RLS a los análisis de la tabla base para aprovechar las claves de clasificación. Para un mejor rendimiento, evite las consultas que utilizan predicados no seguros para RLS que aprovechan una clave de clasificación. Utilice las instrucciones EXPLAIN junto con el permiso del sistema EXPLAIN RLS para comprobar que Amazon Redshift puede enviar operadores y funciones.
Almacenamiento en caché de los resultados
Para reducir el tiempo de ejecución de las consultas y mejorar el rendimiento del sistema, Amazon Redshift almacena en caché los resultados de determinados tipos de consultas en la memoria del nodo principal.
Amazon Redshift utiliza los resultados almacenados en caché para una consulta nueva que analiza tablas protegidas con RLS cuando se cumplen todas las condiciones de las tablas no protegidas y se cumplen todas las condiciones a continuación:
-
Las tablas o las vistas de la política no se han modificado.
-
La consulta no utiliza una función que debe evaluarse cada vez que se ejecuta, como GETDATE o CURRENT_USER.
Para obtener un mejor rendimiento, evite utilizar predicados de políticas que no cumplan con las condiciones anteriores.
Para obtener más información sobre el almacenamiento en caché de los resultados en Amazon Redshift, consulte Almacenamiento en caché de los resultados .
Políticas complejas
Para obtener un mejor rendimiento, evite el uso de políticas complejas con subconsultas que unan varias tablas.