Práticas recomendadas para desempenho de RLS
Veja a seguir as práticas recomendadas para garantir um melhor desempenho do Amazon Redshift em tabelas protegidas por RLS.
Segurança dos operadores e funções
Ao consultar tabelas protegidas por RLS, o uso de determinados operadores ou funções pode levar à degradação do desempenho. O Amazon Redshift classifica operadores e funções como seguros ou não seguros para consultar tabelas protegidas por RLS. Uma função ou operador é classificado como seguro para RLS quando não tem efeitos colaterais observáveis, dependendo das entradas. Em particular, uma função ou operador seguro para RLS não pode ser um dos seguintes:
-
Produz um valor de entrada, ou qualquer valor que seja dependente do valor de entrada, com ou sem uma mensagem de erro.
-
Falha ou retorna erros que são dependentes do valor de entrada.
Os operadores não seguros para RLS incluem:
-
Operadores aritméticos: +, -, /, *, %.
-
Operadores de texto: LIKE e SIMILAR TO.
-
Operadores Cast.
-
UDFs.
Use a seguinte instrução SELECT para verificar a segurança dos operadores e das funções.
SELECT proname, proc_is_rls_safe(oid) FROM pg_proc;
O Amazon Redshift impõe restrições na ordem de avaliação dos predicados do usuário que contêm operadores e funções não seguros para RLS ao planejar consultas em tabelas protegidas por RLS. Consultas que fazem referência a operadores ou funções não seguras para RLS podem causar degradação do desempenho ao consultar tabelas protegidas por RLS. O desempenho pode degradar significativamente quando o Amazon Redshift não pode enviar predicados não seguros para RLS para varreduras de tabela base para aproveitar as chaves de classificação. Para obter um melhor desempenho, evite consultas usando predicados não seguros para RLS que tiram proveito de uma chave de classificação. Para verificar se o Amazon Redshift é capaz de enviar operadores e funções, é possível usar instruções EXPLAIN em combinação com a permissão de sistema EXPLAIN RLS.
Armazenamento em cache dos resultados
Para reduzir o tempo de execução da consulta e melhorar a performance do sistema, o Amazon Redshift armazena em cache os resultados de certos tipos de consultas na memória no nó líder.
O Amazon Redshift usa resultados armazenados em cache para uma nova consulta que verifica tabelas protegidas por RLS quando todas as condições para tabelas desprotegidas são verdadeiras e quando todas as seguintes opções são verdadeiras:
-
As tabelas ou as exibições na política não foram modificadas.
-
A política não usa uma função que precisa ser avaliada cada vez que ela é executada, por exemplo GETDATE ou CURRENT_USER.
Para melhorar a performance, evite usar predicados de política que não satisfaçam as condições anteriores.
Para obter mais informações sobre o armazenamento em cache de resultados no Amazon Redshift, consulte Armazenamento em cache dos resultados .
Políticas complexas
Para obter um melhor desempenho, evite usar políticas complexas com subconsultas que unem várias tabelas.