Compartilhar via


Considerações de desempenho do ponto de extremidade de análise SQL

Aplica-se a:✅ ponto de extremidade de análise SQL no Microsoft Fabric

O ponto de extremidade de análise SQL permite que você consulte dados no lakehouse usando a linguagem T-SQL e o protocolo TDS. Cada lakehouse tem um ponto de extremidade de análise SQL. O número de pontos de extremidade de análise SQL em um espaço de trabalho corresponde ao número de lakehouses e bancos de dados espelhados provisionados no espaço de trabalho.

Um processo em segundo plano é responsável por verificar se há alterações no lakehouse e por manter o ponto de extremidade de análise SQL atualizado para todas as alterações confirmadas nos lakehouses em um espaço de trabalho. O processo de sincronização é gerenciado de forma transparente pela plataforma Microsoft Fabric. Quando uma alteração é detectada em um lakehouse, um processo em segundo plano atualiza os metadados e o ponto de extremidade de análise SQL reflete as alterações confirmadas nas tabelas do lakehouse. Em condições normais de operação, o atraso entre um lakehouse e o ponto de extremidade de análise SQL é inferior a um minuto.

Esquema gerado automaticamente no ponto de extremidade de análise SQL do Lakehouse

O ponto de extremidade de análise SQL gerencia as tabelas geradas automaticamente para que os usuários do workspace não possam modificá-las. Os usuários podem enriquecer o modelo de banco de dados adicionando seus próprios esquemas SQL, exibições, procedimentos e outros objetos de banco de dados.

Para cada tabela Delta no Lakehouse, o ponto de extremidade de análise de SQL gera automaticamente uma tabela no dbo. Para tipos de dados de esquema gerados automaticamente para o ponto de extremidade de análise SQL, confira Tipos de dados no Microsoft Fabric.

As tabelas no ponto de extremidade de análise de SQL são criadas com um atraso menor. Depois que você criar ou atualizar a tabela do Delta Lake no lake, a tabela de ponto de extremidade de análise de SQL que faz referência à tabela do Delta Lake será criada/atualizada automaticamente em 10 segundos.

A quantidade de tempo necessária para atualizar a tabela está relacionada ao nível de otimização das tabelas Delta. Para obter mais informações, revise Otimização de tabela e V-Order do Delta Lake para saber mais sobre os principais cenários e ter um guia detalhado sobre como manter eficientemente tabelas Delta para máximo desempenho.

Você pode forçar manualmente uma atualização da verificação automática de metadados no portal do Fabric. Na página do ponto de extremidade de análise de SQL, escolha o botão Atualizar na barra de ferramentas do Explorer para atualizar o esquema. Acesse Consultar seu ponto de extremidade de análise SQL e procure o botão Atualizar, como mostra a imagem a seguir.

Captura de tela do portal do Fabric mostrando o botão Atualizar esquema do ponto de extremidade de análise de SQL.

Diretrizes

  • A descoberta automática de metadados rastreia as alterações confirmadas nos lakehouses e é uma instância única por espaço de trabalho do Fabric. Se você estiver observando um aumento na latência para alterações a serem sincronizadas entre os lakehouses e o ponto de extremidade de análise SQL, isso poderá ser devido ao grande número de lakehouses em um espaço de trabalho. Nesse cenário, considere migrar cada lakehouse para outro espaço de trabalho, uma vez que isso permitirá dimensionar a descoberta automática de metadados.
  • Os arquivos Parquet são imutáveis por design. Quando houver uma operação de atualização ou exclusão, uma tabela Delta adicionará novos arquivos parquet com o conjunto de alterações, aumentando o número de arquivos ao longo do tempo, dependendo da frequência de atualizações e exclusões. Se não houver manutenção agendada, em algum momento, esse padrão criará uma sobrecarga de leitura e isso afetará o tempo necessário para sincronizar as alterações no ponto de extremidade de análise SQL. Para resolver esse problema, agende operações regulares de manutenção de tabelas do lakehouse.
  • Em alguns cenários, você pode observar que as alterações confirmadas em um lakehouse não são visíveis no ponto de extremidade de análise SQL associado. Por exemplo, você pode ter criado uma nova tabela no lakehouse, mas ela não está listada no ponto de extremidade de análise SQL. Ou você pode ter confirmado um número grande de linhas em uma tabela de um lakehouse, mas esses dados não são visíveis no ponto de extremidade de análise SQL. É recomendável iniciar uma sincronização de metadados sob demanda, disparada com a opção da faixa de opções Atualizar do editor de consultas SQL. Essa opção força uma sincronização de metadados sob demanda, em vez de esperar que a sincronização de metadados em segundo plano seja concluída.

Considerações de tamanho da partição

A escolha da coluna de partição para uma tabela delta em um lakehouse também afeta o tempo necessário para sincronizar as alterações no ponto de extremidade de análise SQL. O número e o tamanho das partições da coluna de partição são importantes para o desempenho:

  • Uma coluna com alta cardinalidade (principalmente ou inteiramente composta de valores exclusivos) resulta em um número grande de partições. Um número grande de partições afeta negativamente o desempenho da verificação de descoberta de metadados em busca de alterações. Se a cardinalidade de uma coluna for alta, escolha outra coluna para particionamento.
  • O tamanho de cada partição também pode afetar o desempenho. Nossa recomendação é usar uma coluna que resulte em uma partição de pelo menos (ou perto de) 1 GB. Recomendamos seguir as melhores práticas para manutenção de tabelas delta; otimização. Para um script python que avalie partições, consulte Amostra de script para obter detalhes da partição.

Um grande volume de arquivos parquet de tamanho pequeno aumenta o tempo necessário para sincronizar as alterações entre um lakehouse e seu ponto de extremidade de análise SQL associado. Você pode acabar com um número grande de arquivos parquet em uma tabela delta por um ou mais motivos:

  • Se você escolher uma partição para uma tabela delta com alto número de valores exclusivos, ela será particionada por cada valor exclusivo e poderá ser particionada em excesso. Escolha uma coluna de partição que não tenha uma cardinalidade alta e resulte em um tamanho de partição individual de pelo menos 1 GB.
  • As taxas de ingestão de dados em lote e streaming também podem resultar em arquivos pequenos, dependendo da frequência e do tamanho das alterações gravadas em um lakehouse. Por exemplo, pode haver um volume pequeno de alterações chegando ao lakehouse, e isso resultaria em arquivos parquet pequenos. Para resolver esse problema, recomendamos implementar a manutenção regular de tabelas do lakehouse.

Amostra de script para obter detalhes da partição

Use o notebook a seguir para imprimir um relatório detalhando o tamanho e os detalhes das partições que sustentam uma tabela delta.

  1. Primeiro, você deve fornecer o caminho ABSFF para sua tabela delta na variável delta_table_path.
    • Você pode obter o caminho ABFSS de uma tabela delta no Explorer do portal do Fabric. Clique com o botão direito do mouse no nome da tabela e selecione COPY PATH na lista de opções.
  2. O script gera todas as partições para a tabela delta.
  3. O script itera cada partição para calcular o tamanho total e o número de arquivos.
  4. O script gera os detalhes de partições, arquivos por partições e tamanho por partição em GB.

O script completo pode ser copiado do seguinte bloco de código:

# Purpose: Print out details of partitions, files per partitions, and size per partition in GB.
  from notebookutils import mssparkutils

# Define ABFSS path for your delta table. You can get ABFSS path of a delta table by simply right-clicking on table name and selecting COPY PATH from the list of options.
  delta_table_path = "abfss://<workspace id>@<onelake>.dfs.fabric.microsoft.com/<lakehouse id>/Tables/<tablename>"

# List all partitions for given delta table
partitions = mssparkutils.fs.ls(delta_table_path)

# Initialize a dictionary to store partition details
partition_details = {}

# Iterate through each partition
for partition in partitions:
  if partition.isDir:
      partition_name = partition.name
      partition_path = partition.path
      files = mssparkutils.fs.ls(partition_path)
      
      # Calculate the total size of the partition

      total_size = sum(file.size for file in files if not file.isDir)
      
      # Count the number of files

      file_count = sum(1 for file in files if not file.isDir)
      
      # Write partition details

      partition_details[partition_name] = {
          "size_bytes": total_size,
          "file_count": file_count
      }
      
# Print the partition details
for partition_name, details in partition_details.items():
  print(f"{partition_name}, Size: {details['size_bytes']:.2f} bytes, Number of files: {details['file_count']}")