Padrões de mapa de calor para chaves de índice

Nesta página, mostramos exemplos de padrões que podem ser vistos em um mapa de calor do Key Visualizer. Esses padrões podem ajudar você a resolver problemas de desempenho específicos.

Uso distribuído de modo uniforme

Mapa de calor que mostra leituras e gravações distribuídas uniformemente

Se um mapa de calor mostrar uma mistura refinada de cores escuras e brilhantes, as operações de gravação/exclusão das chaves de índice serão distribuídas uniformemente por todo o banco de dados. Esse mapa de calor provavelmente representa um padrão de uso eficaz para o modo Datastore.

Índices em chaves sequenciais

Um mapa de calor com uma única linha diagonal brilhante pode indicar um índice que está em uma chave que está estritamente crescente ou decrescente, como o carimbo de data/hora. Os índices em chaves sequenciais não são recomendados e podem criar pontos de acesso. Ao criar um ponto de acesso, é possível observar latências elevadas correspondentes.

Veja alguns exemplos de pontos de acesso comuns no índice:

Ponto de acesso devido ao aumento do carimbo de data/hora

Mapa de calor mostrando um ponto de acesso devido ao aumento do carimbo de data/hora

Neste exemplo, um mapa de calor com uma única linha diagonal brilhante pode indicar um banco de dados que usa operações de gravação/exclusão de índice estritamente crescentes ou decrescentes em uma propriedade de carimbo de data/hora.

Ponto de acesso devido ao aumento dos nomes das propriedades

Mapa de calor mostrando o uso excessivo do ponto de acesso devido ao aumento da propriedade

Neste exemplo, um mapa de calor com uma única linha diagonal brilhante pode indicar um banco de dados que usa operações de gravação/exclusão de índice estritamente crescentes ou decrescentes em uma propriedade incremental, como números de faturas gerados automaticamente.

Para identificar o problema de uso excessivo do ponto de acesso, use a ferramenta Key Visualizer e entenda a estrutura da chave de índice para determinar qual índice causa o problema e isentar esses índices com as práticas recomendadas.

Compreender a estrutura da chave do índice

Antes de entender a estrutura das chaves de índice que você vê na ferramenta Key Visualizer, saiba mais sobre índices no modo Datastore.

O código a seguir mostra um exemplo de formato de chave de índice que você vê ao passar o cursor sobre o intervalo de chaves afetado no mapa de calor.

NAMESPACE: NS KIND: Users
PROPERTIES: (Timestamp: DESC, Name: DESC)
ANCESTOR: KEY(PROJECT('PROJECT_ID'),NAMESPACE('NS'),`UserList`,1)
VALUES: (16500000000000001,'Alice')
ENTITY:KEY(PROJECT('PROJECT_ID'),NAMESPACE(''),`UserList`,1,`User`,5000000000000001)

Em que:

  • NAMESPACE: namespace da entidade.
  • TIPO: tipo de entidade que categoriza as entidades.
  • PROPRIEDADEs: propriedades relacionadas à entidade. A propriedade de ordenação __key__ só é mostrada para definições de índice que modificam a ordem padrão.
  • ANCESTOR: é um caminho ancestral opcional para localizar a entidade na hierarquia do banco de dados.
  • VALORES: valor de cada propriedade.
  • ENTITY: ID da entidade atualizada em uma operação.

No exemplo anterior, identifique as propriedades do valor PROPERTIES para encontrar o índice afetado.

Para encontrar o índice, siga estas etapas:

  1. Acesse a página Índices do modo Datastore no console do Google Cloud.

    Acessar os índices do modo Datastore

    É possível identificar o tipo de índice analisando o campo PROPERTIES. Consulte exemplos de chaves de índice para mais informações.

  2. Clique em Filtro, selecione Campos e insira o nome do campo.

    Use o operador OR para adicionar mais propriedades em caso de índices compostos.

Depois de identificar o índice que está causando problemas, você pode usar as seguintes soluções:

  • Índice integrado: exclua a propriedade para que o índice não mantenha as entradas de índice dela. Consulte Propriedades excluídas para mais informações.
  • Índice composto: modifique o índice no arquivo index.yaml para garantir que o campo com valor que aumenta ou diminui monotonicamente não seja selecionado como o primeiro campo para indexação ou exclua o índice. Consulte Sobre o index.yaml para mais informações.

Exemplos de entradas de chave de índice no mapa de calor

Tipo Descrição Exemplo
Entrada de índice integrada Entrada de índice do índice de propriedade única na propriedade Timestamp, em ordem decrescente para o namespace NS. NAMESPACE: NS
KIND: Users
PROPERTIES: (Timestamp: DESC)
ANCESTOR: NONE
VALUES: (16500000000000001)
ENTITY: KEY(PROJECT('PROJECT_ID'), NAMESPACE('NS'),usuários, 5000000000000001)
Entrada de índice integrada Entrada de índice do índice de propriedade única no namespace padrão. NAMESPACE: ' '
KIND: Users
PROPERTIES: (Timestamp: DESC)
ANCESTOR: NONE
VALUES: (16500000000000001)
ENTITY: KEY(PROJECT('PROJECT_ID'), NAMESPACE('NS'),Usuários, 5000000000000001)
Entrada de índice composta Entrada de índice do índice composto na propriedade Timestamp e na propriedade Name em ordem decrescente sem o ancestral ativado. NAMESPACE: NS
KIND: Users
PROPERTIES: (Timestamp: DESC, Name: DESC)
ANCESTOR: NONE
VALUES: (16500000000000001, 'Alice')
ENTITY: KEY(PROJECT('PROJECT_ID'),NAMESPACE('NS'),Usuários,5000000000000001)
Entrada de índice composto com ancestral Entrada de índice para o índice composto na propriedade Timestamp em ordem decrescente e a propriedade Name em ordem decrescente com o ancestral ativado. NAMESPACE: NS
KIND: Users
PROPERTIES: (Timestamp: DESC, Name: ASC)
ANCESTOR: KEY(PROJECT('PROJECT_ID'),NAMESPACE('NS'),lista de usuários,1,Usuário,5000000000000001
VALUES: (16500000000000001, 'Alice')
ENTITY: KEY(PROJECT('PROJECT_ID'),NAMESPACE('NS'),usuário da lista de usuários,1,Usuário,5000000000000001)
Entrada de índice composta com __key__ Entrada de índice para o índice composto na propriedade Timestamp em ordem crescente e __key__ em ordem decrescente sem ancestral ativado. É possível usar __key__ como a propriedade final em uma definição de índice para mudar a ordem padrão dos resultados. NAMESPACE: NS
KIND: Users
PROPERTIES: (Timestamp: ASC, __key__ DESC)
ANCESTOR: NONE
VALUES: (16500000000000001)
ENTITY: KEY(PROJECT('PROJECT_ID'),NAMESPACE('NS'),ID de usuário,1,Usuário,5000000000000001)

A seguir