Na Rockset, buscamos continuamente maneiras de dar aos nossos clientes melhor visibilidade do produto. Para atingir esse objetivo, decidimos recentemente melhorar nosso registro de consulta voltado para o cliente. Nossa iteração anterior de registros de consulta period baseada em um de nossos serviços compartilhados chamado apiserver. Como parte do trabalho que o apiserver faria ao concluir uma solicitação de execução de consulta, ele criaria um registro que eventualmente seria ingerido no _events
coleção. No entanto, houve problemas que nos fizeram repensar essa implementação de logs de consulta:
- Sem isolamento: porque a consulta faz login
_events
dependia de serviços compartilhados, o tráfego pesado de uma organização poderia ter impacto no registro de consultas em outras organizações. - Logs incompletos: devido aos problemas causados pelo uso de serviços compartilhados, registramos apenas erros de consulta – consultas bem-sucedidas não seriam registradas. Além disso, não foi possível registrar dados sobre consultas assíncronas.
- Nenhuma capacidade de depurar o desempenho da consulta – a consulta é registrada
_events
continha apenas informações básicas sobre cada consulta. Não havia como o usuário obter informações sobre o motivo pelo qual uma determinada consulta pode ter sido executada lentamente ou esgotado recursos de computação, pois os logs não continham informações sobre o plano de consulta.
Registro de consulta aprimorado
O novo registros de consulta O recurso aborda todos esses problemas. Os mecanismos que manipulam logs de consulta estão contidos inteiramente em sua Instância Digital, em vez de estarem em um dos serviços compartilhados da Rockset. Isso dá aos logs de consulta a vantagem do isolamento. Além disso, cada consulta que você enviar será registrada automaticamente se você já tiver criado uma coleção com uma fonte de logs de consulta (desde que você não atinja um limite de taxa).
Como funcionam os logs de consulta
O log de consultas começa no remaining da execução da consulta. Como parte das etapas que são executadas no agregador remaining quando uma consulta é concluída, um registro contendo metadados associados à sua consulta é criado. Neste ponto, também podemos ter que coletar informações de outros agregadores que estavam envolvidos na consulta. Depois que isso é feito, o registro é armazenado temporariamente em um buffer na memória. O conteúdo desse buffer é liberado para o S3 a cada poucos segundos. Depois que os logs de consultas forem despejados no S3, eles serão ingeridos em qualquer uma das suas coleções de logs de consultas que foram criadas.
Registros INFO vs DEBUG
Quando projetamos este projeto pela primeira vez, sempre tivemos a intenção de que ele funcionasse com o profiler de consulta no console. Isso permitiria que nossos clientes depurassem gargalos de consulta com esses logs. No entanto, o profiler de consulta requer uma quantidade considerável de dados, o que significa que seria impossível para cada log de consulta conter todas as informações necessárias para o profiler. Para resolver esse problema, optamos por criar duas camadas de logs de consulta – logs INFO e DEBUG.
Os logs INFO são criados automaticamente para cada consulta emitida pela sua organização. Eles contêm alguns metadados básicos associados à sua consulta, mas não podem ser usados com o profiler de consulta. Quando você sabe que pode querer ter a capacidade de depurar uma determinada consulta com o profiler, você pode especificar um limite de log DEBUG com sua solicitação de consulta. Se o tempo de execução da consulta for maior que o limite especificado, o Rockset criará um log INFO e um DEBUG. Há duas maneiras de especificar um limite:
Use o
debug_log_threshold_ms
dica de consultaSELECT * FROM _events HINT(debug_log_threshold_ms=1000)
- Use o
debug_threshold_ms
parâmetro em solicitações de API. Isso está disponível para ambos consulta e consulta lambda solicitações de execução.
Observe que, como os logs DEBUG são muito maiores que os logs INFO, o limite de taxa para logs DEBUG é muito menor. Por esse motivo, é recomendável que você forneça um limite de log DEBUG somente quando souber que essas informações podem ser úteis. Caso contrário, você corre o risco de atingir o limite de taxa quando mais precisa de um log DEBUG.
Fontes do sistema
Como parte deste projeto, decidimos introduzir um novo conceito chamado fontes do sistema. Estas são fontes que ingerem dados originários do Rockset. No entanto, diferentemente do _events
coleção, coleções com fontes de sistema são gerenciadas inteiramente pela sua organização. Isso permite que você configure todas as definições dessas coleções. Apresentaremos mais tipos de fontes de sistema conforme o tempo passar.
Introdução ao registro de consultas
Para começar a registrar suas consultas, tudo o que você precisa fazer é criar uma coleção com uma fonte de logs de consulta. Isso pode ser feito por meio do console.
O Rockset começará a ingerir logs de consultas nesta coleção conforme você envia consultas. Os logs das últimas 24 horas de consultas também serão ingeridos nesta coleção. Observe que pode levar alguns minutos após a conclusão de uma consulta para que o log associado apareça na sua coleção.
Para usar o profiler de consulta com esses logs, abra o Editor de consulta do Rockset Console e emita uma consulta que tenha como alvo uma de suas coleções de logs de consulta. O editor de consulta detectará que você está tentando consultar uma coleção com uma fonte de logs de consulta e uma coluna chamada ‘Profiler’ será adicionada à tabela de resultados da consulta. Todos os documentos que tiverem um campo de estatísticas preenchido terão um hyperlink nesta coluna. Clicar neste hyperlink abrirá o perfil de consulta em uma nova guia.
Observe que transformações de ingestão personalizadas ou aliases de consulta podem interferir nessa funcionalidade, portanto, é recomendável que você não renomeie nenhuma coluna.
Para um mergulho mais profundo no uso do Question Profiler da Rockset, consulte o vídeo disponível aqui.
Conclusão
Espero que isso tenha lhe dado uma rápida olhada na funcionalidade que os logs de consulta podem oferecer. Se você precisa depurar o desempenho da consulta ou verificar por que as consultas concluídas anteriormente falharam, sua experiência com o Rockset será melhorada ao fazer uso dos logs de consulta.