Gestão de custos do conjunto de SQL sem servidor no Azure Synapse Analytics
Este artigo explica como pode estimar e gerir os custos do conjunto de SQL sem servidor no Azure Synapse Analytics:
- Estimar a quantidade de dados processados antes de emitir uma consulta
- Utilizar a funcionalidade de controlo de custos para definir o orçamento
Compreenda que os custos do conjunto de SQL sem servidor no Azure Synapse Analytics são apenas uma parte dos custos mensais na fatura do Azure. Se estiver a utilizar outros serviços do Azure, ser-lhe-ão cobrados todos os serviços e recursos do Azure utilizados na sua subscrição do Azure, incluindo os serviços de terceiros. Este artigo explica como planear e gerir os custos do conjunto de SQL sem servidor no Azure Synapse Analytics.
Dados processados
Os dados processados são a quantidade de dados que o sistema armazena temporariamente enquanto uma consulta é executada. Os dados processados consistem nas seguintes quantidades:
- Quantidade de dados lidos a partir do armazenamento. Este montante inclui:
- Dados lidos durante a leitura de dados.
- Dados lidos durante a leitura de metadados (para formatos de ficheiro que contêm metadados, como Parquet).
- Quantidade de dados em resultados intermédios. Estes dados são transferidos entre nós enquanto a consulta é executada. Inclui a transferência de dados para o ponto final, num formato descomprimido.
- Quantidade de dados escritos no armazenamento. Se utilizar o CETAS para exportar o conjunto de resultados para armazenamento, a quantidade de dados escritos é adicionada à quantidade de dados processados para a parte SELECT do CETAS.
A leitura de ficheiros a partir do armazenamento é altamente otimizada. O processo utiliza:
- Pré-obtenção, o que pode adicionar algum overhead à quantidade de dados lidos. Se uma consulta ler um ficheiro inteiro, não haverá sobrecarga. Se um ficheiro for lido parcialmente, como nas consultas TOP N, é lido um pouco mais através da pré-correspondência.
- Um analisador de valores separados por vírgulas (CSV) otimizado. Se utilizar PARSER_VERSION='2.0' para ler ficheiros CSV, as quantidades de dados lidos a partir do armazenamento aumentam ligeiramente. Um analisador CSV otimizado lê ficheiros em paralelo, em segmentos de tamanho igual. Os segmentos não contêm necessariamente linhas inteiras. Para garantir que todas as linhas são analisadas, o analisador CSV otimizado também lê pequenos fragmentos de segmentos adjacentes. Este processo adiciona uma pequena quantidade de custos gerais.
Estatísticas
O otimizador de consultas do conjunto de SQL sem servidor baseia-se em estatísticas para gerar planos de execução de consultas ideais. Pode criar estatísticas manualmente. Caso contrário, o conjunto de SQL sem servidor cria-os automaticamente. De qualquer forma, as estatísticas são criadas ao executar uma consulta separada que devolve uma coluna específica a uma taxa de exemplo fornecida. Esta consulta tem uma quantidade associada de dados processados.
Se executar a mesma consulta ou qualquer outra consulta que tire partido das estatísticas criadas, as estatísticas serão reutilizadas, se possível. Não existem dados adicionais processados para a criação de estatísticas.
Quando as estatísticas são criadas para uma coluna Parquet, apenas a coluna relevante é lida a partir de ficheiros. Quando as estatísticas são criadas para uma coluna CSV, os ficheiros inteiros são lidos e analisados.
Arredondamento
A quantidade de dados processados é arredondada para o MB mais próximo por consulta. Cada consulta tem um mínimo de 10 MB de dados processados.
Os dados processados não incluem
- Metadados ao nível do servidor (como inícios de sessão, funções e credenciais ao nível do servidor).
- Bases de dados que criar no ponto final. Essas bases de dados contêm apenas metadados (como utilizadores, funções, esquemas, vistas, funções de valor de tabela inline [TVFs], procedimentos armazenados, credenciais com âmbito de base de dados, origens de dados externas, formatos de ficheiro externos e tabelas externas).
- Se utilizar a inferência de esquema, os fragmentos de ficheiro são lidos para inferir nomes de colunas e tipos de dados e a quantidade de dados lidos é adicionada à quantidade de dados processados.
- Instruções de linguagem de definição de dados (DDL), exceto a instrução CREATE STATISTICS, uma vez que processa dados do armazenamento com base na percentagem de exemplo especificada.
- Consultas apenas de metadados.
Reduzir a quantidade de dados processados
Pode otimizar a quantidade por consulta de dados processados e melhorar o desempenho ao criar partições e converter os seus dados num formato comprimido baseado em colunas, como Parquet.
Exemplos
Imagine três tabelas.
- A tabela population_csv é suportada por 5 TB de ficheiros CSV. Os ficheiros estão organizados em cinco colunas de tamanho igual.
- A tabela population_parquet tem os mesmos dados que a tabela population_csv. É apoiado por 1 TB de ficheiros Parquet. Esta tabela é mais pequena do que a anterior porque os dados são comprimidos no formato Parquet.
- A tabela very_small_csv é suportada por 100 KB de ficheiros CSV.
Consulta 1: SELECT SUM(população) FROM population_csv
Esta consulta lê e analisa ficheiros inteiros para obter valores para a coluna população. Os nós processam fragmentos desta tabela e a soma da população de cada fragmento é transferida entre nós. A soma final é transferida para o ponto final.
Esta consulta processa 5 TB de dados e uma pequena quantidade de overhead para transferir somas de fragmentos.
Consulta 2: SELECT SUM(população) FROM population_parquet
Quando consulta formatos comprimidos e baseados em colunas, como Parquet, são lidos menos dados do que na consulta 1. Verá este resultado porque o conjunto de SQL sem servidor lê uma única coluna comprimida em vez de todo o ficheiro. Neste caso, é lido 0,2 TB. (Cinco colunas de tamanho igual são 0,2 TB cada.) Os nós processam fragmentos desta tabela e a soma da população de cada fragmento é transferida entre nós. A soma final é transferida para o ponto final.
Esta consulta processa 0,2 TB e uma pequena quantidade de sobrecarga para transferir somas de fragmentos.
Consulta 3: SELECT * FROM population_parquet
Esta consulta lê todas as colunas e transfere todos os dados num formato descomprimido. Se o formato de compressão for 5:1, a consulta processa 6 TB porque lê 1 TB e transfere 5 TB de dados não comprimidos.
Consulta 4: SELECT COUNT(*) FROM very_small_csv
Esta consulta lê ficheiros inteiros. O tamanho total dos ficheiros armazenados para esta tabela é de 100 KB. Os nós processam fragmentos desta tabela e a soma de cada fragmento é transferida entre nós. A soma final é transferida para o ponto final.
Esta consulta processa um pouco mais de 100 KB de dados. A quantidade de dados processados para esta consulta é arredondada até 10 MB, conforme especificado na secção Arredondamento deste artigo.
Controlo de custos
A funcionalidade de controlo de custos no conjunto de SQL sem servidor permite-lhe definir o orçamento para a quantidade de dados processados. Pode definir o orçamento em TB de dados processados por um dia, semana e mês. Ao mesmo tempo, pode ter um ou mais orçamentos definidos. Para configurar o controlo de custos para o conjunto de SQL sem servidor, pode utilizar o Synapse Studio ou o T-SQL.
Configurar o controlo de custos para o conjunto de SQL sem servidor no Synapse Studio
Para configurar o controlo de custos do conjunto de SQL sem servidor no Synapse Studio navegue para Gerir item no menu à esquerda, em vez de selecionar item do conjunto de SQL em Conjuntos de análise. À medida que paira o rato sobre o conjunto de SQL sem servidor, irá reparar num ícone de controlo de custos - clique neste ícone.
Depois de clicar no ícone de controlo de custos, será apresentada uma barra lateral:
Para definir um ou mais orçamentos, clique primeiro no botão de opção Ativar para um orçamento que pretenda definir do que introduzir o valor inteiro na caixa de texto. A unidade para o valor é TBs. Depois de configurar os orçamentos, clique no botão Aplicar na parte inferior da barra lateral. Já está, o orçamento está definido.
Configurar o controlo de custos para o conjunto de SQL sem servidor no T-SQL
Para configurar o controlo de custos para o conjunto de SQL sem servidor no T-SQL, tem de executar um ou mais dos seguintes procedimentos armazenados.
sp_set_data_processed_limit
@type = N'daily',
@limit_tb = 1
sp_set_data_processed_limit
@type= N'weekly',
@limit_tb = 2
sp_set_data_processed_limit
@type= N'monthly',
@limit_tb = 3334
Para ver a configuração atual, execute a seguinte instrução T-SQL:
SELECT * FROM sys.configurations
WHERE name like 'Data processed %';
Para ver a quantidade de dados que foram processados durante o dia, semana ou mês atual, execute a seguinte instrução T-SQL:
SELECT * FROM sys.dm_external_data_processed
Exceder os limites definidos no controlo de custos
Caso seja excedido qualquer limite durante a execução da consulta, a consulta não será terminada.
Quando o limite for excedido, a nova consulta será rejeitada com a mensagem de erro que contém detalhes sobre o período, o limite definido para esse período e os dados processados para esse período. Por exemplo, caso seja executada uma nova consulta, em que o limite semanal está definido como 1 TB e foi excedido, a mensagem de erro será:
Query is rejected because SQL Serverless budget limit for a period is exceeded. (Period = Weekly: Limit = 1 TB, Data processed = 1 TB))
Passos seguintes
Para saber como otimizar as suas consultas para desempenho, veja Melhores práticas para o conjunto de SQL sem servidor.