Mostrando postagens com marcador Powercenter: Conceitos Avançados. Mostrar todas as postagens
Mostrando postagens com marcador Powercenter: Conceitos Avançados. Mostrar todas as postagens

terça-feira, 10 de maio de 2011

SQL sobre o Repositório do PowerCenter - Identificar Quantidade de Sessions em Paralelo

Pessoal,

Criei um SQL para identificar a quantidade de sessions em paralelo durante um determinado período do dia no servidor PowerCenter. Este SQL foi testado na versão 8.6.1.
A quantidade de sessions é calculada no intervalo de 60 segundos, começando a meia noite e realizando 1000 interações (CONNECT BY LEVEL <=1000) .

SELECT RESULTADO_AUX.TEMPO, NVL(RESULTADO.QTD,0) AS QTD
FROM
(
  SELECT TABELA_TEMPO_AUX.TEMPO, COUNT(1) AS QTD
 FROM
     (SELECT TO_DATE('15-04-2011','DD-MM-YYYY')+(LEVEL/86400)*60 TEMPO FROM DUAL CONNECT BY LEVEL <=1000) TABELA_TEMPO_AUX,
     (SELECT  S.INSTANCE_NAME AS NOME_SESSION, S.START_TIME AS INICIO, S.END_TIME AS FIM
      FROM REP_TASK_INST_RUN S
      WHERE to_char(start_time, 'DD/MM/YYYY') = '15/04/2011'
        AND S.TASK_TYPE = 68 -- apenas session
        AND S.RUN_ERR_CODE = 0 ) TABELA_SESSIONS  
 WHERE TABELA_TEMPO_AUX.TEMPO BETWEEN TABELA_SESSIONS.INICIO AND TABELA_SESSIONS.FIM
 GROUP BY TABELA_TEMPO_AUX.TEMPO) RESULTADO, 
 (SELECT TO_DATE('15-04-2011','DD-MM-YYYY')+(LEVEL/86400)*60 TEMPO FROM DUAL CONNECT BY LEVEL <=1000) RESULTADO_AUX
WHERE RESULTADO_AUX.TEMPO =  RESULTADO.TEMPO (+) 
ORDER BY RESULTADO_AUX.TEMPO 


O resultado deste SQL pode ser exibido através de um gráfico no Excel de forma a facilitar o entendimento dos pontos de pico no Servidor.




quinta-feira, 14 de outubro de 2010

Particionamento no PowerCenter - Pipeline Partitioning

Escrevo este post sobre um dos temas mais importantes sobre o PowerCenter atualmente, o Particionamento. Por ser um recurso precioso de otimização de carga e que a maioria das empresas possuem comprado, os desenvolvedores devem conhecer, no mínimo, os principais tipos de particionamento e onde pode ser aplicado no seu dia-a-dia. São estas informações que eu trago no texto abaixo.

Quando usar Particionamento?
Algumas vezes necessitamos de acelerar a entrega das informações de uma determinada carga e podemos utilizar nesses casos o plug-in de Particionamento do PowerCenter. Com este plug-in podemos criar até 64 threads (partições) para acelerarmos o tempo de execução de um processo demorado.

Como usar Particionamento?
A partir de um mapa construído, é preciso apenas na sessão ser definida a quantidade de partições (threads) que você quer utilizar e selecionar o tipo apropriado em cada transformation. Dessa forma, não é necessário construir um mapa “próprio” para ser particionado, como é o caso atualmente do DataStage Parallel.

Tipos de Particionamento:

Pass-Through
Este é o tipo de Particionamento mais comum. Os dados de cada partição não são reorganizados quando você usa este tipo. Os dados de cada partição continuam na mesma partição ao passar por uma transformation com este tipo de particionamento configurado.

Hash Auto-Keys
O próprio PowerCenter define por qual campo os dados irão ser organizados na partição por um valor hash interno. Normalmente utilizamos este tipo de particionamento em sorter, joiner e aggretator. Dessa forma, o PowerCenter agrupa os dados de acordo com o campo que é feita a ordenação, a condition ou o group by, respectivamente.

Hash User-Keys
O usuário define o campo que deseja q o PowerCenter organize os dados utilizando um campo interno de hash.

Round-Robin
O intuito deste tipo de Particionamento é fazer o balanceamento da quantidade dos dados nas partições criadas. Suponha que você tenha uma sessão com 4 partições: a primeira possui 1000 registros, a segunda 10, a terceira 90 e a quarta 100. Utilizando este tipo de Particionamento os dados serão reorganizados de forma que cada partição tenha 1200/4=300 registros. Isto é útil para a distribuição correta de CPU/memória para processamento dos dados e sincronização da finalização de carga de cada partição.

Key-Range
Para este tipo, o usuário pode definir o intervalo de dados de um determinado campo que deseja dividir por cada partição. Se você quiser dividir, por exemplo, pessoas do sexo masculino e feminino em duas partições e gravar em arquivos separadamente, basta usar este Particionamento.

Database Partitioning
Você pode utilizar este tipo de partição em sources e targets, definindo nos mesmos, a partição que está criada fisicamente no banco de dados.

Cuidados ao utilizar Particionamento
O maior cuidado em usar Particionamento é definir o tipo correto em cada transformation. Caso você não defina o tipo correto, quando você utilizar joiner e aggregator, por exemplo, os dados podem ser gerados inconsistentes.

Quando definimos partições na sessão, podemos definir o tipo de merge dos arquivos gerados. O padrão é o Seqüencial Merge. Neste tipo de merge os arquivos gerados das partições são gravados seqüencialmente num único arquivo. Usando o Cuncorrent Merge, não são gerados os arquivos outputs temporários. O arquivo de merge é gerado de acordo com que os dados são gravados em cada partição. Este segundo tipo de merge costuma ser mais rápido.

Pontos que poderiam melhorar
Para a extração de dados de um banco de dados usando particionamento precisamos definir manualmente o SQL ou o intervalo de registros que queremos que os dados sejam buscados. Poderia ser implementado no PowerCenter uma distribuição automática de uma tabela no banco pelas partições criadas, utilizando, por exemplo, o intervalo de rowid de cada partição. Essa característica está presente atualmente no Datastage Parallel.

Abraço a todos.
Marcos David M Caliman

quinta-feira, 13 de maio de 2010

Matar Worklow no PowerCenter

Alguma vezes, quando desejamos parar a execução de um workflow usando apenas as funções stop ou abort, não temos êxito e o status do workflow fica "eternamente" como running.

Nestes casos, quando o servidor está instalado em ambiente UNIX, podemos utilizar o comando kill para "matar" este workflow ativo.

O número do processo (pid) do workflow pode ser encontrado na sexta linha do log da execução do mesmo:

"Session task instance [s_TESTE]: started a process with pid [820] on node [node_caliman]."

Então, para esse workflow, bastaria executar o comando abaixo:

kill -9 820

Abraço a todos,

Marcos David M Caliman

sexta-feira, 22 de janeiro de 2010

Artigo sobre Performance e Conceitos atuias do PowerCenter 8

Segue abaixo o link do artigo “Getting the most out of your Informatica PowerCenter 8 Environment”.

Este artigo é muito interessante para desenvolvedores e analistas que trabalham com o PowerCenter 8 e destaca os conceitos atuais sobre performance e a arquitetura 64 bits.

http://www.element61.be/e/resourc-detail.asp?ResourceId=57

Abraço
Marcos David M Caliman

sexta-feira, 13 de novembro de 2009

Pushdown Optimization - Uma Breve Introdução

O tema de hoje é Pushdown Optimization, um dos mais recentes plug-ins lançados pela Informatica para otimização de cargas pelo PowerCenter.

A ideia do Pushdown é passar toda ou parte da lógica de um mapping para instruções SQL que são diretamente executadas no banco de dados.

Imagine um ambiente aonde o processo de carga execute na madrugada com um servidor sobrecarregado do PowerCenter e existam recursos disponíveis no banco de dados. Este é o cenário recomendado para utilização do Pushdown: utilizar os recursos disponíveis no banco de dados e minimizar a sobrecarga no servidor do PowerCenter.

Quando o plug-in do Pushdown é instalado, uma nova aba dentro da edição da session é criada. Sua utilização é bem fácil, o próprio PowerCenter, caso seja possível, gerará um SQL que representa toda a lógica do mapa construído. Dessa forma, você pode aplicar a técnica do Pushdown em mappings já construídos.

O Pushdown pode ser utilizado nos seguintes bancos de dados:

- Oracle 9.x and above
- IBM DB2
- Teradata
- Microsoft SQL Server
- Sybase ASE
- Databases que usam ODBC drivers

Tipos de Pushdown

Source-Side: O Integration Service passa a maior parte da lógica do mapping para o banco de dados Source.
Target-Side: O Integration Service passa a maior parte da lógica do mapping para o banco de dados Target.
Full Pushdown: O Integration Service passa a maior parte da lógica para ambos os bancos Source e Target.

Conclusão

Eu realizei alguns testes com o Pushdown e na prática ele ainda falta amadurecer muito.

O plug-in consegue apenas converter mapas que possuem uma lógica bem simples, sem expressions e outros componentes. Na maioria dos casos você terá que fazer adaptações no mapa para que o script seja gerado.

A ideia de passar parte do processamento para o banco de dados foi uma ótima jogada da Informatica, porém ficamos no aguardo para que a próxima versão deste plug-in possa ser mais bem utilizada em ambientes que há tempos necessitam de ganho de performance.

Uma alternativa para este problema é o plug-in de Real-Time, lançado recentemente pela Informatica, onde os dados são enviados para o ambiente de BI próximo ao tempo real. Com certeza esse tipo de arquitetura será testada e implementada nas empresas que possuem grande volumes de dados dentro dos próximos 5 anos.

Abraço,
Marcos David Caliman