none
Dúvidas sobre Triggers e desempenho RRS feed

  • Pergunta

  • Boa tarde

    Pessoal estou iniciando algumas pesquisas e estudos sobre banco de dados, atualmente em meus projetos referente a parte de banco de dados é criar as relations e indices.

    Estou interessado nas triggers, pelo que andei vendo eu crio as querys direto no banco e apenas chamo elas para execução na minha aplicação .net. Tirando o fator "organização" dentro da aplicação em si, por exemplo hoje crio classes dentro do meu projeto só para camada de dados onde jogo as querys usando os recursos do ADO, quando necessário chamo os recursos dessas classes.

    Minha dúvida é, ganho desempenho retirando essas classes de camadas de dados do meu projeto e jogando tudo triggers? Ou não o desempenho do sistema é o mesmo e mudo apenas a forma de desenvolver?

    terça-feira, 15 de outubro de 2013 19:25

Respostas

  • Alexandre,

    Com certeza há ganho no desempenho da aplicação, já que você mantém uma manipulação de dados, executando dois processos de uma única vez (INSERT/UPDATE/DELETE) do executor e da(s) Trigger(s) na mesma camada da aplicação (Camada de Dados).

    Mas é importante lembrar que você precisa observar se esta solução realmente é a melhor a ser utilizada na aplicação, pois em alguns casos se o disparo da trigger não for bem feito, pode tornar o seu processo lento e até com falhas de integridade de dados.

    Faça diversos testes unitários e de carga para validar a execução da sua aplicação durante o disparo da trigger e não esqueça de utilizar os hints corretos (NOLOCK, ROWLOCK, ...) afim de evitar lentidão com "tabelas travadas".

    Espero que seja útil para você.

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA - SQL Server 2012
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    terça-feira, 15 de outubro de 2013 20:06
    Moderador

Todas as Respostas

  • Alexandre,

    Com certeza há ganho no desempenho da aplicação, já que você mantém uma manipulação de dados, executando dois processos de uma única vez (INSERT/UPDATE/DELETE) do executor e da(s) Trigger(s) na mesma camada da aplicação (Camada de Dados).

    Mas é importante lembrar que você precisa observar se esta solução realmente é a melhor a ser utilizada na aplicação, pois em alguns casos se o disparo da trigger não for bem feito, pode tornar o seu processo lento e até com falhas de integridade de dados.

    Faça diversos testes unitários e de carga para validar a execução da sua aplicação durante o disparo da trigger e não esqueça de utilizar os hints corretos (NOLOCK, ROWLOCK, ...) afim de evitar lentidão com "tabelas travadas".

    Espero que seja útil para você.

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA - SQL Server 2012
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    terça-feira, 15 de outubro de 2013 20:06
    Moderador
  • Boa tarde

    Obrigado pela dica, preciso aprender sobre trigger melhor então, existem algum bom link para aprender na web que você possa me indicar, e claro se tiver alguns casos de uso para ajudar fico grato.

    Aproveitando o tópico gostaria de saber também sobre as views do banco, quando usar? Vale posso usar uma view criada direto no banco dentro da minha aplicação?

    terça-feira, 15 de outubro de 2013 20:41
  • Deleted
    terça-feira, 15 de outubro de 2013 22:12
  • Deleted
    terça-feira, 15 de outubro de 2013 22:20
  • Boa tarde a todos e obrigado pela ajuda.

    É realmente vi como estou confuso ainda com esses recursos, confundi tudo, nas verdade minha pergunta inicial era para ser sobre procedures e em seguidas precisava conhecer triggers.

    Nossa desculpe minha confusão pessoal. Bom peguei os links e inclusive a dica dos livros, vou começar a estudar.

    Porém agora preciso tirar a bagunça que ficou na minha mente, lá vai as perguntas:

    1. Com relação a minha pergunta inicial não a comparação de classes que faço na minha aplicação era para ser comprado com procedures. É melhor criar as classes de camadas de dados na aplicação ou é melhor e mais eficiente trabalhar com procedures direto no banco ativando elas pelo meu aplicativo?
    2. Para que servem as triggers e quando devo usá-las
    3. Referente as views quando devo usá-las

    Vou avaliar os links postados aqui e o livros, mas se tiver como passar uma explicação simples referentes as perguntas para me ajudar nos estudos aprofundados fico grato.

    Desculpe a bagunça mais uma vez

    quarta-feira, 16 de outubro de 2013 18:51