Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este artigo discute dicas para alcançar melhor desempenho de escrita ao carregar dados na Azure SQL Database usando o Azure Stream Analytics.
A saída SQL no Azure Stream Analytics suporta a escrita em paralelo como opção. Esta opção permite topologias de trabalho totalmente paralelas , onde múltiplas partições de saída escrevem em paralelo na tabela de destino. No entanto, ativar esta opção no Azure Stream Analytics pode não ser suficiente para alcançar maiores throughputs, pois depende significativamente da configuração da sua base de dados e do esquema da tabela. A escolha dos índices, a chave de agrupamento, o fator de preenchimento do índice e a compressão têm impacto no tempo de carregamento das tabelas. Para mais informações sobre como otimizar a sua base de dados para melhorar o desempenho das consultas e cargas com base em benchmarks internos, consulte as orientações de desempenho da base de dados SQL. A ordenação das escritas não é garantida quando se escreve em paralelo com a base de dados SQL.
Aqui estão algumas configurações dentro de cada serviço que podem ajudar a melhorar o desempenho global da sua solução.
Azure Stream Analytics
Herdar Particionamento – Esta opção de configuração de saída SQL permite herdar o esquema de particionamento do passo anterior da consulta ou entrada. Com isto ativado, ao escrever numa tabela baseada em disco e ter uma topologia totalmente paralela para o seu trabalho, espera-se ver melhores taxas de transferência. Esta partição já acontece automaticamente para muitas outras saídas. O bloqueio de tabela (TABLOCK) também está desativado para inserções em massa com esta opção.
Observação
Quando existem mais de 8 partições de entrada, herdar o esquema de particionamento de entrada pode não ser uma escolha apropriada. Este limite superior foi observado numa tabela com uma única coluna identidade e um índice agrupado. Neste caso, considere usar INTO 8 na sua consulta, para especificar explicitamente o número de autores de saída. Com base no seu esquema e na escolha dos índices, as suas observações podem variar.
Tamanho do Batch - A configuração de saída SQL permite-lhe especificar o tamanho máximo do lote numa saída SQL do Azure Stream Analytics com base na natureza da sua tabela de destino/carga de trabalho. O tamanho do lote é o número máximo de registos enviados com cada transação de inserção em massa. Nos índices columnstore agrupados, os tamanhos de lote em torno de 100K permitem maior paralelização, mínima geração de logs e otimização de locks. Em tabelas baseadas em disco rígido, 10K (por padrão) ou inferior pode ser ideal para a sua solução, pois tamanhos de lote maiores podem desencadear o escalonamento de bloqueios durante inserções em massa.
Ajuste de Mensagens de Entrada – Se otimizaste usando partição herdada e tamanho de lote, aumentar o número de eventos de entrada por mensagem por partição ajuda a aumentar ainda mais o teu throughput de escrita. A afinação de mensagens recebidas permite que os tamanhos de lote dentro do Azure Stream Analytics sejam até ao limite de Tamanho de Lote especificado, melhorando assim a taxa de transferência. Isto pode ser conseguido usando compressão ou aumentando o tamanho das mensagens de entrada no EventHub ou Blob.
SQL Azure
Tabela e Índices Particionados – Usar uma tabela SQL particionada e índices particionados na tabela com a mesma coluna da sua chave de partição (por exemplo, PartitionId) pode reduzir significativamente as contendas entre partições durante as escritas. Para uma tabela particionada, terá de criar uma função de partição e um esquema de partição no grupo de ficheiros PRINCIPAL. Isto também aumentará a disponibilidade dos dados existentes enquanto novos dados estão a ser carregados. O limite de entrada/saída de log pode ser atingido com base no número de partições, que pode ser aumentado através da atualização da Unidade de Manutenção de Estoque (SKU).
Evite violações de chave únicas – Se receber múltiplas mensagens de aviso de violação de chave no Registo de Atividades do Azure Stream Analytics, certifique-se de que o seu trabalho não é afetado por violações de restrições únicas que provavelmente ocorrem durante os casos de recuperação. Isto pode ser evitado definindo a opção IGNORE_DUP_KEY nos seus índices.
Azure Data Factory e Tabelas In-Memory
- In-Memory Tabela como tabela temporária – In-Memory tabelas permitem cargas de dados de muito alta velocidade, mas os dados precisam de caber na memória. Os benchmarks mostram que carregar em massa uma tabela em memória para uma tabela baseada em disco é cerca de 10 vezes mais rápido do que inserir diretamente em massa usando um único gravador na tabela baseada em disco com uma coluna de identidade e um índice agrupado. Para tirar partido deste desempenho de inserção em massa, configure um trabalho de cópia usando o Azure Data Factory que copie dados da tabela em memória para a tabela baseada em disco.
Evitar armadilhas de desempenho
A inserção massiva de dados é muito mais rápida do que carregar dados com inserções individuais porque evita a repetida sobrecarga de transferir os dados, analisar a instrução de inserção, executar a declaração e emitir um registo de transação. Em vez disso, é utilizado um caminho mais eficiente para o motor de armazenamento para transmitir os dados. O custo de configuração deste caminho é, no entanto, muito superior ao de uma única instrução insert numa tabela baseada em disco. O ponto de equilíbrio situa-se tipicamente em torno das 100 filas, a partir das quais o carregamento a granel é quase sempre mais eficiente.
Se a taxa de eventos recebidos for baixa, pode facilmente criar tamanhos de lote inferiores a 100 linhas, o que torna a inserção em massa ineficiente e consome demasiado espaço em disco. Para contornar esta limitação, pode fazer uma destas ações:
- Cria um gatilho INSTEAD OF para usar inserção simples em cada linha.
- Use uma tabela temporária na memória, como descrito na secção anterior.
Outro cenário semelhante ocorre ao escrever num índice de coluna não agrupado (NCCI), onde inserções em massa mais pequenas podem criar demasiados segmentos, o que pode fazer o índice colapsar. Neste caso, a recomendação é usar um índice Clustered Columnstore em vez disso.
Resumo
Em resumo, com a funcionalidade de saída particionada no Azure Stream Analytics para saída SQL, a paralelização alinhada do seu trabalho com uma tabela particionada no SQL Azure deverá proporcionar-lhe melhorias significativas no rendimento. Aproveitar o Azure Data Factory para orquestrar o movimento de dados de uma tabela em memória para tabelas baseadas em disco pode proporcionar aumentos de desempenho de ordem de magnitude. Se possível, melhorar a densidade de mensagens pode também ser um fator importante para melhorar o throughput global.
Passos seguintes
- Compreender as saídas do Azure Stream Analytics
- Saída do Azure Stream Analytics para a Azure SQL Database
- Utilize identidades geridas para aceder ao Azure SQL Database ou Azure Synapse Analytics num trabalho do Azure Stream Analytics
- Utilize dados de referência de uma base de dados SQL para uma tarefa de Azure Stream Analytics
- Atualizar ou fundir registos no Azure SQL Database com Azure Functions
- Quickstart: Crie um trabalho de Stream Analytics usando o portal Azure