[Cascavel-pm] Perl e Oracle

Luis Campos de Carvalho lechamps em terra.com.br
Sexta Setembro 5 12:31:01 CDT 2003


Alceu R. de Freitas Jr. wrote:
>  --- Luis escreveu: >
[ Estranho gosto da empresa pelo D3... ]
> Ah, eu não vou iniciar uma flamewar na lista sobre
> bancos de dados. :-)

   Obrigado, eu te devo esta.
   Meu sonho de consumo é trabalhar com Perl e Oracle em um grande 
projeto... quem sabe um dia? =-]

> Com certeza estou falando sobre o ítem 2: estou
> carregando dados de sistemas distintos de/para. Às
> vezes consigo usar XML (o que é uma boa) mas a maior
> parte fica por arquivos texto. 

   Opa! Desculpe!
   Acho que quem não se expressou corretamente fui eu!
   O (2) do primeiro email (consultem o arquivo da lista, mongers!) faz 
referência a informações obtidas dinamicamente, uma a uma, normalmente 
de fontes de dados distintas e humanas. Um bom exemplo é um artigo ou 
mensagem postada para um web-board, ou um registro de um usuario para um 
sistema de intranet ou bugtrack...

   Você está falando de carga de dados em batch, ou está falando de 
cadastramento de registros um-a-um, por humanos ou algo parecido?

   Dica: o Oracle tem ferramentas (data-loader) insuperáveis em 
velocidade para carregar dados em batch. O Data Loader grava diretamente 
no arquivo de dados, sem solicitar ajuda do RDBMS. Isso economiza o 
tempo de armazenamento das operações de inserção de dados no Redo-Log, o 
que torna este método imbatível...

> Li em algum lugar que as procedures do Oracle são
> guardadas em memória. Ou seja, são lidas e compiladas
> uma vez, depois ficam lá esperando serem chamadas de
> novo. Se isso ocorre mesmo, fica complicado para o
> Perl ganhar em velocidade.

   Possivelmente no manual da Oracle.
   Não é completamente mentira, mas certamente não é toda a verdade.
   Stored procedures normalmente estão em disco, como texto 
(source-code). Elas sobem para a memória, são compiladas, catalogadas no 
cache de disco em uma área de memória partilhada chamada "Library 
Cache", onde o Oracle guarda todo o tipo de código PL/SQL depois de 
compilado. O que o pessoal não menciona muito é que esta área é pequena, 
proporcionalmente ao tamanho e quantidade de procedures normalmente 
armazenadas. É a campeã de falhas de cache ("cache page miss" -- quando 
o que você procura não está mais em cache) do RDBMS Oracle.

   Um outro aspecto: o Perl tem custo de startup fixo: você roda uma vez 
e pronto, o programa está funcionando (e vai fazer carga de todos os 
registros que você apresentar para esta sessão). O Oracle reinicia um 
stored procedure (e paga os custos de start-up) a cada nova chamada. 
Isso acumula muito mais custos para o Oracle, sem dúvida.

> Estou pensando em sugestionar uso de Perl em lugar de
> procedures mais complexas, uma vez que é bem mais
> simples utilizar Perl para controlar dados, gerar
> logs, etc...

   Eu acho que isso vai depender muito da forma como seus dados estão: 
São confiáveis? Vêm em pacotes de milhares de registros? São puros? 
Existem registros com problemas / sujos? Que tipo de informações de log 
você precisa? Isso está dentro do banco de dados?

   Você pode sugerir ao pessoal que <code>use Perl;</code>, mas acho que 
a possibilidade de utilizar um mecanismo de carga de dados da Oracle 
pode ser mais atraente...

> Esclareci um pouco melhor agora?
   =-] Estamos chegando lá.
   Eu espero ter sido claro também.
   []'z!
-- 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
   Luis Campos de Carvalho is Computer Scientist,
   PerlMonk [SiteDocClan], Cascavel-pm Moderator,
   Unix Sys Admin && Certified Oracle DBA
   http://br.geocities.com/monsieur_champs/
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=




Mais detalhes sobre a lista de discussão Cascavel-pm