Quais definições ou configurações no servidor Informatica, no próprio software Informatica ou nos servidores de banco de dados podem ser alteradas para aumentar a taxa de transferência do Informatica ETL? Quais são alguns benchmarks que podemos definir para solucionar problemas de desempenho? Estamos usando especificamente o Netezza como origem e o SQL Server como destino.
Exclua multi-threading e particionamento Informatica desta pergunta.
Isso nós fizemos no passado:
- reinicie os servidores de vez em quando
- remover índices em tabelas de destino no SQL Server antes de carregar ETL
- aumentar nível de comprometimento
Minha experiência com a Informatica acessando SQL Server e Netezza pode ser resumida a isto:
A leitura é igualmente rápida (100.000 linhas/s; às vezes o dobro dessa velocidade), desde que o SQL selecionado seja bastante simples, ou seja:
sem junções;
não
group by
;nenhum tipo;
where
cláusulas somente na chave de cluster da tabela do SQL Server.Em todos os outros casos, o Netezza vencerá o SQL Server.
As inserções com PowerCenter são do
array
tipo, e o SQL Server geralmente pode receber de 2.000 a 4.000 linhas por segundo.As inserções no Netezza são executadas de 80.000 a 200.000 linhas por segundo se o PowerCenter não for o gargalo.
As atualizações/exclusões com o PowerCenter têm sido notoriamente lentas em todos os bancos de dados há anos, pois o SQL executado é
singletons
e não um arquivoarray
. Portanto, uma sessão normalmente cai para aproximadamente 500 linhas por segundo com o SQL Server como destino e apenas 8 linhas por segundo com o Netezza.Por isso, definimos tabelas de preparação por destino do PowerCenter no Netezza e gravamos todas as atualizações/exclusões nessas tabelas enquanto a sessão é executada. Essas alterações são aplicadas em massa como um arquivo
target post SQL
. Isso é bem dimensionado, pois todas as operações de gravação agora são executadas em velocidades semelhantes para inserir.A melhor solução para o notório gargalo do gravador com o SQL Server como destino é gastar muito tempo dentro do PowerCenter comparando a origem com o destino e gravar apenas a diferença detectada. Isso levará você a um longo caminho, mas não à escala.
Minha pergunta final é: por que mover dados do Netezza para o SQLserver? Se sua empresa possui requisitos que realmente não podem ser atendidos no Netezza, especifique quais, talvez eles possam ser atendidos.
Se o powercenter informatica for o gargalo (e não netezza, sql server ou a rede), há uma configuração na sessão do powercenter que pode ajudar. IIRC é "tamanho do buffer de registro" ou algo semelhante. Altere de Padrão para 512 MB. Se isso ajudar, é melhor reduzi-lo a algo mais sensato experimentando com valores mais baixos.
Essa configuração não é o tamanho que ela usa para armazenar um único registro na memória, mas precisa ser grande o suficiente para caber um registro nela. A ajuda integrada é um pouco vaga neste ponto.
No cenário oposto (SQL Server -> Netezza), notei que os tipos de dados também podem desempenhar um papel. powercenter pode superestimar grosseiramente a quantidade de memória que precisa reservar para um único registro se o layout da tabela de origem contiver tipos de dados LONG/NTEXT/VARBINARY. O Netezza não os possui, mas talvez também seja importante se o destino contiver campos grandes.
O arquivo de log de sessão do powercenter deve conter algumas informações sobre quanta memória ele reserva para transferir os dados. Se for muito baixo, pode se tornar o gargalo.