Ajuste de desempenho com cache de conjunto de resultadosPerformance tuning with result set caching

Quando o cache do conjunto de resultados estiver habilitado, o Azure SQL Data Warehouse armazenará em cache automaticamente os resultados da consulta no banco de dados do usuário para uso repetitivo.When result set caching is enabled, Azure SQL Data Warehouse automatically caches query results in the user database for repetitive use. Isso permite que as execuções de consulta subsequentes obtenham resultados diretamente do cache persistente, de modo que a recomputação não seja necessária.This allows subsequent query executions to get results directly from the persisted cache so recomputation is not needed. O cache do conjunto de resultados melhora o desempenho da consulta e reduz o uso de recursos de computação.Result set caching improves query performance and reduces compute resource usage. Além disso, as consultas que usam resultados em cache definidos não usam nenhum slot de simultaneidade e, portanto, não contam com os limites de simultaneidade existentes.In addition, queries using cached results set do not use any concurrency slots and thus do not count against existing concurrency limits. Por segurança, os usuários só poderão acessar os resultados armazenados em cache se tiverem as mesmas permissões de acesso a dados que os usuários que criam os resultados armazenados em cache.For security, users can only access the cached results if they have the same data access permissions as the users creating the cached results.

Comandos de chaveKey commands

Ativar/desativar o cache do conjunto de resultados para um banco de dados de usuárioTurn ON/OFF result set caching for a user database

Ativar/desativar o cache do conjunto de resultados para uma sessãoTurn ON/OFF result set caching for a session

Verificar o tamanho do conjunto de resultados em cacheCheck the size of cached result set

Limpar o cacheClean up the cache

O que não está armazenado em cacheWhat's not cached

Quando o cache do conjunto de resultados está ativado para um banco de dados, os resultados são armazenados em cache para todas as consultas até que o cache esteja cheio, exceto para essas consultas:Once result set caching is turned ON for a database, results are cached for all queries until the cache is full, except for these queries:

  • Consultas que usam funções não determinísticas, como DateTime. Now ()Queries using non-deterministic functions such as DateTime.Now()
  • Consultas que usam funções definidas pelo usuárioQueries using user defined functions
  • Consultas que usam tabelas com segurança em nível de linha ou segurança em nível de coluna habilitadaQueries using tables with row level security or column level security enabled
  • Consultas retornando dados com tamanho de linha maior que 64 KBQueries returning data with row size larger than 64KB

Importante

As operações para criar o cache do conjunto de resultados e recuperar dados do cache acontecem no nó de controle de uma instância de data warehouse.The operations to create result set cache and retrieve data from the cache happen on the control node of a data warehouse instance. Quando o cache do conjunto de resultados está ativado, a execução de consultas que retornam um conjunto de resultados grande (por exemplo, > 1 milhão de linhas) pode causar alto uso da CPU no nó de controle e reduzir a resposta geral da consulta na instância.When result set caching is turned ON, running queries that return large result set (for example, >1 million rows) can cause high CPU usage on the control node and slow down the overall query response on the instance. Essas consultas são usadas normalmente durante a exploração de dados ou operações de ETL.Those queries are commonly used during data exploration or ETL operations. Para evitar a sobrecarga do nó de controle e causar problemas de desempenho, os usuários devem desativar o cache do conjunto de resultados no banco de dados antes de executar esses tipos de consultas.To avoid stressing the control node and cause performance issue, users should turn OFF result set caching on the database before running those types of queries.

Execute esta consulta para o tempo gasto pelas operações de cache do conjunto de resultados para uma consulta:Run this query for the time taken by result set caching operations for a query:

SELECT step_index, operation_type, location_type, status, total_elapsed_time, command 
FROM sys.dm_pdw_request_steps 
WHERE request_id  = <'request_id'>; 

Aqui está um exemplo de saída para uma consulta executada com o cache de conjunto de resultados desabilitado.Here is an example output for a query executed with result set caching disabled.

Consulta-etapas-com-RSC-desabilitado

Aqui está um exemplo de saída para uma consulta executada com o cache do conjunto de resultados habilitado.Here is an example output for a query executed with result set caching enabled.

Consulta-etapas-com-habilitado para RSC

Quando os resultados armazenados em cache são usadosWhen cached results are used

O conjunto de resultados em cache será reutilizado para uma consulta se todos os seguintes requisitos forem atendidos:Cached result set is reused for a query if all of the following requirements are all met:

  • O usuário que está executando a consulta tem acesso a todas as tabelas referenciadas na consulta.The user who's running the query has access to all the tables referenced in the query.
  • Há uma correspondência exata entre a nova consulta e a consulta anterior que gerou o cache do conjunto de resultados.There is an exact match between the new query and the previous query that generated the result set cache.
  • Não há nenhuma alteração de esquema ou de dados nas tabelas em que o conjunto de resultados em cache foi gerado.There is no data or schema changes in the tables where the cached result set was generated from.

Execute este comando para verificar se uma consulta foi executada com um erro de cache de resultado ou perda.Run this command to check if a query was executed with a result cache hit or miss. Se houver um impacto no cache, o result_cache_hit retornará 1.If there is a cache hit, the result_cache_hit will return 1.

SELECT request_id, command, result_cache_hit FROM sys.dm_pdw_exec_requests 
WHERE request_id = <'Your_Query_Request_ID'>

Gerenciar resultados em cacheManage cached results

O tamanho máximo do cache do conjunto de resultados é 1 TB por banco de dados.The maximum size of result set cache is 1 TB per database. Os resultados armazenados em cache são automaticamente invalidados quando os dados de consulta subjacentes são alterados.The cached results are automatically invalidated when the underlying query data change.

A remoção de cache é gerenciada pelo Azure SQL Data Warehouse automaticamente após este agendamento:The cache eviction is managed by Azure SQL Data Warehouse automatically following this schedule:

  • A cada 48 horas, se o conjunto de resultados não foi usado ou se foi invalidado.Every 48 hours if the result set hasn't been used or has been invalidated.
  • Quando o cache do conjunto de resultados se aproximar do tamanho máximo.When the result set cache approaches the maximum size.

Os usuários podem esvaziar manualmente todo o cache do conjunto de resultados usando uma destas opções:Users can manually empty the entire result set cache by using one of these options:

  • Desativar o recurso de cache do conjunto de resultados para o banco de dadosTurn OFF the result set cache feature for the database
  • Executar DBCC DROPRESULTSETCACHE enquanto estiver conectado ao banco de dadosRun DBCC DROPRESULTSETCACHE while connected to the database

Pausar um banco de dados não esvaziará o conjunto de resultados em cache.Pausing a database won't empty cached result set.

Próximas etapasNext steps

Para obter mais dicas de desenvolvimento, confira Visão geral sobre o desenvolvimento no SQL Data Warehouse.For more development tips, see SQL Data Warehouse development overview.