none
Executar queries em Paralelo RRS feed

  • Pergunta

  • Estou tendo que copiar um mesmo arquivo de um servidor para outros três servidores diferentes. Para isto criei uma procedure que monta o comando e executa o COPY através de comandos DOS. Através de um JOB eu agendei este processo e em um STEP eu tenho o seguinte código:

    USE [master]
    GO
    
    
    EXEC master.dbo.sp_CopiaArquivoBackup 
    	'SERVIDOR1'
    GO
    
    EXEC master.dbo.sp_CopiaArquivoBackup 
    	'SERVIDOR2'
    GO
    
    EXEC master.dbo.sp_CopiaArquivoBackup 
    	'SERVIDOR3'
    GO

    O problema que este STEP está copiando o mesmo arquivo para cada servidor UM de cada vez. O LOG mostra que cada cópia demora 30 minutos, logo o processo todo demora 1:30h! Queria saber um jeito de executar estes 3 comandos em paralelo e reduzir o tempo total para 30 minutos (claro que pode ser que demore um pouco mais por estar transferindo 3 ao mesmo tempo e consumindo mais CPU etc).

    Alguma ajuda?


    Igor Auler

    quarta-feira, 30 de janeiro de 2013 15:12

Respostas

  • Bom como ninguém mais respondeu e eu estava com um pouco de pressa, optei por utilizar o Integration Services, e funcionou.

    Obrigado pela ajuda,


    Igor Auler

    • Marcado como Resposta Igor Auler quinta-feira, 31 de janeiro de 2013 13:01
    quinta-feira, 31 de janeiro de 2013 13:01

Todas as Respostas

  • Boa tarde Igor,

    Porque você nao usa o Integration Services para esse procedimento? É uma ferramenta bem interessante.

    At.
    rafael

    • Sugerido como Resposta Rafael S. Melo quinta-feira, 31 de janeiro de 2013 13:13
    • Não Sugerido como Resposta Igor Auler quinta-feira, 31 de janeiro de 2013 15:56
    quarta-feira, 30 de janeiro de 2013 16:01
  • Igor, a dica do Rafael é interessante utilizando o integration services onde voce pode colocar quantos processamentos voce quiser (e o HW aguentar) em paralelo.

    do jeito que o seu codigo esta ele irá sempre esperar um terminar para outro começar, o que voce poderia fazer tambem seria abrir 3 conexões no sql cada uma fazendo uma copia.


    Alexandre Matayosi Conde Mauricio. Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    quarta-feira, 30 de janeiro de 2013 16:09
  • Igor,

    Uma alternativa que você poderia utilizar seria a opção Mirror em conjunto com o comando Backup Database.

    Atráves desta opção é possível realizar uma cópia identifica do arquivo de backup do seu banco de dados, para outro disco, unidade de rede e servidor.

    Veja um exemplo abaixo:

    Backup Database Master

     To Disk = 'D:\Master.bak'

     Mirror To Disk = 'D:\Master-Mirror.bak'

     With Init, Format

    Go

    Backup Database Master

     To Disk = 'D:\Master.bak'

     Mirror To Disk = '\\SERVIDOR\ARQUIVOS\BACKUP\Master-Mirror.bak'

     With Init, Format

    Go


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    quarta-feira, 30 de janeiro de 2013 16:21
  • Rafaele Alexandre,

            detesto o Integration Services:

    1. Não tem transparência nenhuma no processo;
    2. A manutenção é uma M****;

            Outra pq eu preciso que este passo seja executado apenas quando um outro STEP do JOB termine, ou seja, teria que migrar todo o JOB (15 Steps) para o Integration Services, ou talvez, criar um STEP, ao final destes 15, que execute o Package do IS.

            Realmente tenho um pouco de implicancia com o IS, principalmente por conta de manutenção (Importa pacote, Exporta pacote...) e transparência, preciso importar o pacote para ver o que ele ta fazendo, enquanto no JOB dou 2 cliques. MAAAAS, se n tiver outra opção, utilizarei o IS mesmo.

    Junior,

           Sua opção parece ser interessante, mas sabe me dizer como ele faz para copiar o arquivo de backup para os servidores? Porque para otimizar a cópia, eu estou utilizando o comando ROBOCOPY do DOS, inclusive, caso esta cópia fique lenta, alterarei este processo para ser feito via FTP, para otimiza-lo.

    EU pensei em criar um plano de manutenção e executar este plano ao final destes STEPs, seria praticamente um IS, ele faria o Backup Differencial e criaria Três tasks de T-SQL para copiar estes arquivos, logo abriria 3 sessões e copiaria em paralelo.

    O que acham?

    Alexandre, como eu faço para abrir 3 conexões no SQL Server em um JOB? Consigo fazer isso? Não né? Eu não executo este processo manualmente, ele é agendado.


    Igor Auler


    • Editado Igor Auler quarta-feira, 30 de janeiro de 2013 16:49
    • Marcado como Resposta Igor Auler quinta-feira, 31 de janeiro de 2013 13:02
    • Não Marcado como Resposta Igor Auler quinta-feira, 31 de janeiro de 2013 13:02
    quarta-feira, 30 de janeiro de 2013 16:46
  • Bom como ninguém mais respondeu e eu estava com um pouco de pressa, optei por utilizar o Integration Services, e funcionou.

    Obrigado pela ajuda,


    Igor Auler

    • Marcado como Resposta Igor Auler quinta-feira, 31 de janeiro de 2013 13:01
    quinta-feira, 31 de janeiro de 2013 13:01