Performance: Criar muitas procedures ou uma package ?

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
eduardojk
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 13
Registrado em: Qui, 18 Ago 2005 8:58 am
Localização: Curitiba

Olá galera :D

Estou reprojetando um sistema e quero escrever procedures e functions no banco para evitar duplicação de código dentro dos meus forms.

Minha dúvida é a seguinte, o que funciona melhor em questão de performance: Escrever várias Store Procedures e acessalas conforme necessário ou reuni-las em uma Package ?

Abraços.
RodrigoValentim
Moderador
Moderador
Mensagens: 367
Registrado em: Ter, 25 Mar 2008 3:41 pm
Localização: Salvador - BA
Rodrigo Valentim
Analista de Sistemas
Oracle Developer

Campanha: Faça uma pesquisa antes de perguntar!!!

Essa questão é muito pessoal, acredito que a performance não muda desde que bem escritas(ambas).

Eu acredito que fazer tudo dentro de Package (quando se tratar do mesmo processo) deixa o ambiente mais amigavel e organizado.
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

To com o Rodrigo tb brow.

Costumo criar Packages por Módulos.

A de Vendas, a de Materiais, a do Financeiro, enfim, agrupar por afinidade.
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Com certeza.
A criação de packages dá uma série de benefícios:
  • Você pode escolher quais procedures são PUBLICAS ou não. (declarando ou não na package spec)
  • Pode definir várias ASSINATURAS pra mesma procedure. (Por exemplo, procedure gera_log( entrada varchar2) e gera_log (entrada date ). A package vai saber qual procedure chamar de acordo com o tipo de parametro passado.
  • Pode se tornar uma package FIXA na memória. (Pin Package). A oracle sugere sempre deixar na memoria as seguintes packages: STANDARD, DBMS_STANDARD, DBMS_UTILITY, DBMS_DESCRIBE, DBMS_OUTPUT

    Selecionar tudo

    execute dbms_shared_pool.keep (' MINHA_PACKAGE');
  • Como foi dito acima, packages são melhores de controlar, pois não geral um monte de dependências, não ficam "espalhadas" no banco pra alguém mexer e mudar alguma característica importante. Imagina você ter um sistema com 30 procedures e 30 funções.
  • Pode se criar variáveis que são visíveis durante toda sessão.
:-o
rodfbar
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 241
Registrado em: Ter, 09 Out 2007 11:15 am
Localização: Batatais - SP

aproveitando a resposta do dr_gori..

tenho uma package que é utilizada pelo menos uma vez por minuto.
o acesso a ela é feito varias vezes pelo telemarketing..

voces aconcelhariam eu colocar ela em memoria, dando este comando ai dbms_shared_pool.keep????

aqui não tem DBA, precisaria fazer alguma configuracao muito especifica para utilizar este recurso?

depois sempre q tiver alguma manutencao na mesma ela já ficaria automaticamente na memoria???

obrigado
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Se é usado bastante, vale a pena sim. Mas use com sabedoria, pois não vale a pena colocar TUDO, pois você vai estar gastando recursos (memória). Coloque só o que é imprescindível e o que é vastamente usado. Daí vale a pena.

Quando você inicializa o banco tem que rodar o comando pra deixar ela na memória. Antigamente, eu vi um script que "inicializava" as packages mais usadas. Eles tinham em todas packages uma procedure que não fazia nada. (apenas um NULL). Dai quando startava o banco, eles rodavam essas procedures, apenas com a finalidade de colocá-las na memória.

Aqui tem um link com várias dicas a respeito:
http://www.dba-oracle.com/art_proc.htm
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 16 visitantes