Analisar perfis de consulta para tabelas híbridas

As cargas de trabalho do Unistore levantam algumas questões interessantes sobre a execução de consulta que você pode investigar usando o recurso Perfil de Consulta da Snowsight ou informações coletadas da saída EXPLAIN. Além de monitorar o desempenho geral e a produtividade, você pode querer saber se uma verificação de tabela está sendo executada no armazenamento de linhas ou no armazenamento de objetos, ou se um índice secundário específico está sendo usado.

Esta seção identifica operadores e atributos do Query Profile que pertencem às operações de tabela híbrida e apresenta alguns exemplos para ajudar você a entender como ler planos de consulta que acessam tabelas híbridas. Consulte também Monitoramento da atividade de consulta com o Histórico de consultas.

Verificações de tabela híbrida e verificações de índice

Operadores de verificação de tabela e índice aparecem em perfis de consulta para mostrar acesso a tabelas híbridas. Esses operadores geralmente aparecem na parte inferior da árvore, representando a primeira etapa na leitura dos dados necessários para executar uma consulta específica. Consultas em tabelas padrão sempre usam verificações de tabela; elas não usam verificações de índice.

Quando um índice de chave primária é usado para fazer a verificação de uma tabela híbrida, um operador TableScan aparece no perfil de consulta, não um operador IndexScan. Quando qualquer outro índice é usado para fazer a verificação de uma tabela híbrida, como um índice secundário, você verá um operador IndexScan.

Em Attributes, para o operador IndexScan, você pode ver o nome totalmente qualificado do índice e Access predicates. Esses são os predicados que são aplicados ao índice durante a verificação. Você também pode ver predicados para filtros aplicados durante verificações de tabela.

Quando um predicado é “enviado” para um índice, o predicado contém um espaço reservado, entre parênteses, para a constante que foi usada na consulta. Por exemplo: SENSOR_DATA_DEVICE2.DEVICE_ID = (:SFAP_PRE_NR_1)

Modo de verificação

Os dados da tabela híbrida são mantidos em dois formatos para atender às cargas de trabalho operacionais e analíticas. Uma pergunta comum feita por administradores é se uma determinada consulta acessará o armazenamento de linhas ou o armazenamento de colunas (armazenamento de objetos). Uma consulta pode ler a partir de um ou ambos os tipos de armazenamento, dependendo das tabelas em questão, dos requisitos específicos da consulta, da disponibilidade de índices e de outros fatores.

O perfil de consulta para consultas de tabelas híbridas inclui um atributo Scan Mode para cada operador de verificação de tabela na árvore:

  • ROW-BASED: a consulta lê os dados da tabela no armazenamento de linhas ou usa índices para calcular os resultados de consulta.

  • COLUMN-BASED: a consulta lê uma cópia do armazenamento de objetos dos mesmos dados que foram carregados no armazenamento de linhas. As verificações de índice também podem acessar o armazenamento de objetos para consultas do Time Travel.

O modo de verificação é específico para tabelas híbridas. Se uma verificação de tabela for executada em uma tabela padrão, nenhum atributo Scan Mode será exibido.

Dados lidos do cache do warehouse em colunas

Sempre que possível, as verificações de tabela para tabelas híbridas leem dados de um cache de warehouse em colunas. Esse cache é uma extensão do cache de warehouse padrão; consulte Como otimizar o cache do warehouse. O cache contém dados que foram lidos do provedor de armazenamento de tabelas híbridas e podem ser acessados por consultas em modo somente leitura em tabelas híbridas.

Para ver o uso do cache em um determinado perfil de consulta, selecione o operador de verificação de tabela e marque Percentage scanned from cache em Statistics.

Consultas que selecionam tabelas híbridas não se beneficiam do cache de resultados de consulta.

Limitação para solicitações de tabela híbrida

Em Profile Overview, você pode ver uma porcentagem de Hybrid Table Requests Throttling. Para ver essa visão geral, não selecione um operador na árvore; a visão geral se aplica a todo o plano de consulta.

Por exemplo, a consulta a seguir registrou que 87,5% do seu tempo de execução foi gasto sendo limitado pelo provedor de armazenamento de tabelas híbridas. Uma alta porcentagem de limitação é um indicador de que muitas solicitações de leitura e gravação de tabela híbrida estão sendo enviadas ao provedor de armazenamento, em relação à cota do banco de dados. Para obter mais informações, consulte Cotas e limitação.

A visão geral do perfil de consulta mostra uma alta porcentagem de limitação para solicitações de tabela híbrida.

Exemplos

Os exemplos da Snowsight de perfis de consulta a seguir mostram atributos específicos para operações de tabela híbrida. Para entender esses exemplos, você não precisa criar e carregar as tabelas que são consultadas e modificadas. Entretanto, aqui está a instrução CREATE TABLE de uma das tabelas para referência. Observe a definição da restrição PRIMARY KEY (na coluna timestamp) e um índice secundário (na coluna device_id):

CREATE OR REPLACE HYBRID TABLE sensor_data_device1 (
  device_id VARCHAR(10),
  timestamp TIMESTAMP PRIMARY KEY,
  temperature DECIMAL(6,4),
  vibration DECIMAL(6,4),
  motor_rpm INT,
  INDEX device_idx(device_id));
Copy

Outra tabela híbrida semelhante, sensor_data_device2, também é usada nos exemplos.

Plano de consulta que acessa a coluna de chave primária

Quando sua consulta filtra a chave primária da tabela (timestamp), que é indexada automaticamente, o perfil de consulta usa um operador TableScan. Observe também que o modo de verificação ROW_BASED é usado para essa consulta.

SELECT * FROM sensor_data_device1 WHERE timestamp='2024-03-01 13:45:56.000';
Copy
Operador TableScan para consulta que filtra na coluna de chave primária, carimbo de data/hora

Plano de consulta que acessa um índice secundário

A consulta que gerou esse perfil é semelhante a:

SELECT COUNT(*) FROM sensor_data_device1 WHERE device_id='DEVICE2';
Copy

Apenas parte do perfil é mostrada aqui, com foco no operador IndexScan e seus atributos. O modo de verificação é ROW_BASED, e você pode ver o predicado completo passando o mouse sobre Access Predicates. O nome do índice totalmente qualificado também é exibido.

Operador IndexScan com atributos, incluindo predicado de acesso e modo de verificação ROW_BASED

Plano de consulta para DML em uma tabela híbrida

Operações DML em tabelas híbridas normalmente modificam linhas únicas. Por exemplo:

UPDATE sensor_data_device2 SET device_id='DEVICE3' WHERE timestamp = '2024-04-02 00:00:05.000';
Copy

O perfil de consulta para o operador TableScan mostra que UPDATE acessa o armazenamento de linhas da tabela híbrida (o modo de verificação é ROW_BASED):

Operador de verificação de tabela que usa uma verificação ROW_BASED para UPDATE de única linha

Consulta recorrente que se beneficia de dados armazenados em cache

Nesse caso, suponha que a consulta a seguir seja executada duas vezes em rápida sucessão em uma tabela híbrida.

SELECT device_id, AVG(temperature)
  FROM sensor_data_device2
  WHERE temperature>33
  GROUP BY device_id;
Copy

A primeira consulta lê todos os dados do armazenamento de objetos. A segunda execução da consulta lê 100% dos dados do cache de colunas. Observe também que o modo de verificação para essa consulta é COLUMN_BASED.

Operador de verificação de tabela que lê 100% dos dados do cache

Plano de consulta para uma junção (tabela híbrida para tabela padrão)

Ao juntar uma tabela híbrida com uma tabela padrão, você verá um atributo Scan Mode para a verificação na tabela híbrida, mas não na tabela padrão. Por exemplo, o operador TableScan no lado esquerdo desse plano de junção usou o modo de verificação ROW_BASED. A tabela order_header é uma tabela híbrida com order_id como chave primária (a coluna de junção nesse exemplo). A outra tabela, truck_history, é uma tabela padrão.

Operador TableScan para uma tabela híbrida em uma junção, incluindo predicado de acesso e modo de verificação ROW_BASED