Otimização de Queries Complexas no SAP HANA para Análises em Tempo Real

10 de maio de 20266 min de leitura
"SAP Hana""SQL Server""Performance""Database"

O SAP HANA é um banco de dados relacional que executa em memória de alta performance. No entanto, mesmo com o poder do processamento in-memory, queries mal-estruturadas contendo cruzamentos (Joins) pesados, sub-seleções aninhadas ou cálculos ineficientes podem degradar a performance das instâncias de ERP corporativo e congelar painéis do Power BI.

Neste artigo técnico, detalho algumas estratégias chaves de sintaxe SQL e tuning no SAP HANA que apliquei para otimizar relatórios e pipelines de dados analíticos.

1. Evite Junções de Tabelas de Linha e Coluna

O SAP HANA armazena tabelas fisicamente em dois formatos: Orientado a Linhas (Row Store) e Orientado a Colunas (Column Store). Fazer Joins pesados entre tabelas de tipos opostos exige que o motor do banco faça conversões na memória em tempo de execução. * Boa prática: Mantenha as consultas analíticas operando preferencialmente sobre tabelas Column Store.

2. Prefira Funções Nativas do HANA

Ao invés de fazer manipulações de string e conversões complexas de data usando lógicas genéricas de SQL, utilize funções otimizadas de kernel do HANA, tais como DAYS_BETWEEN ou UTCTOLOCAL.
-- Exemplo otimizado de cálculo de idade da fatura
SELECT 
    "DocEntry",
    "DocDate",
    DAYS_BETWEEN("DocDueDate", CURRENT_DATE) AS "DaysOverdue"
FROM "OINV"
WHERE "DocStatus" = 'O';

Ver o plano antes de culpar o Power BI

DAYS_BETWEEN só ajuda se o otimizador não materializar a OINV inteira. No hdbsql, peça o plano e procure um scan de coluna em vez de uma conversão row/column no meio do join.

hdbsql -n hana-prod:30015 -u ANALYTICS -p "$HANA_PASSWORD" <<'SQL'
EXPLAIN PLAN FOR
SELECT "DocEntry",
       DAYS_BETWEEN("DocDueDate", CURRENT_DATE) AS "DaysOverdue"
FROM "OINV"
WHERE "DocStatus" = 'O';
SQL

Se o plano mostrar COLUMN SEARCH sobre OINV e o predicado DocStatus aplicado cedo, o refresh do Power BI deixa de esperar a compilação de um join misto. Foi esse corte que tirou a carga de 15 minutos para menos de 45 segundos.


Conclusão

A otimização de consultas reduziu o tempo de atualização da carga do Power BI de mais de 15 minutos para menos de 45 segundos, aliviando o estresse sobre as CPUs de produção do ERP.

Artigos Relacionados