Usuário com melhor resposta
Importação de dados em massa

Pergunta
-
Bom dia!
Estou tentando realizar uma Importação de dados de uma tabela em um servidor para outro servidor, são bases diferentes e estou tentando tentando atraves de linked server e utilizando merge. Mas é uma tabela com cerca de 193.114.961 (e crescendo) de registros e ela não possui um campo único de forma que eu possa utilizar na ligacao das duas tabelas entre as duas bases no merge, eu até posso utilizar um conjunto de campos para garantir a unicidade do registro, mas em uma tentativa de trazer um TOP 10, cheguei a 3 minutos de execução e não obtive resultados.
Estou em busca de novas ideias ou mesmo dicas que podem melhorar o meu processo atual. Meu objetivo é apenas manter um servico que copie a diferenca de dados entre as duas tabelas diariamente, sem a nescessidade de atualizar ou deletar o que ja foi copiado.
Desde ja, agradeço.
- Editado Fabianomaso sábado, 25 de abril de 2015 13:11
Respostas
-
Deleted
- Sugerido como Resposta Durval RamosModerator segunda-feira, 6 de julho de 2015 03:04
- Marcado como Resposta Durval RamosModerator domingo, 2 de agosto de 2015 03:11
sábado, 25 de abril de 2015 20:19 -
Fabiano, bom dia.
Você já pensou em utilizar o Integration Services pra isso?
Eu alterei alguns processos antigos aqui que usavam linked server para um pacote do Integration que faz o tratamento dos dados e a exportação.
Na média obtive um ganho de 70% no tempo.
Você pode fazer um teste utilizando o Lookup do SSIS com essas 13 colunas. Acredito que vá ganhar em tempo de execução!
Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */
- Sugerido como Resposta Durval RamosModerator segunda-feira, 6 de julho de 2015 03:03
- Marcado como Resposta Durval RamosModerator domingo, 2 de agosto de 2015 03:10
Todas as Respostas
-
-
Eu tenho uma combinacao de 13 campos para garantir isso, mas acabei de fazer outro teste aqui de top 10 e demorou 15 segundos. e assim, se na melhor das hipoteses ele levar 1 segundo por registro, ainda sim vai demorar um bom tempo para poder preencher a massa de arquivos inicial.
-
Você não tem permissão para alteração dessa base de dados aonde esta consultando para criação de um novo campo?
Esse Merge que esta realizando com Linked Server, está utilizando o insert SSIS?
Uma imagem vale mais do que mil palavras, mas ocupa 3 mil vezes mais espaço em disco
-
O processo inicial realmente tende a ser demorado, como vc mesmo disse.
Uma coisa que fazemos no nosso trabalho com grandes massas de dados é controlar novas inclusões com um flag. Partindo desta premissa, filtramos apenas os novos registros, de forma a tornar as cargas posteriores mais rápidas.
Acredito que esta seja uma possiblidade também, a fim de tornar o processo mais veloz depois desta carga inicial.
-
Infelizmente a base de origem, nao tenho acesso para alterações, apenas consulta. Em resumo estou executando o comando direto por enquanto:
MERGE INTO banco.schema.table T USING ( SELECT a b, c, FROM linkserver.banco.schema.tabela WITH (nolock) ) S ON S.a = T.a1 S.b = T.b1 WHEN NOT MATCHED THEN INSERT ( a1 , b1 , c1 ) VALUES ( S.a , S.b , S.c );
(simplifiquei o codigo)
Dpois que ele ficar ele tiver OK é que vou alimentar uma procedure com ele e consequentemente um job.
- Editado Fabianomaso sábado, 25 de abril de 2015 14:52
-
Entendi, fica um pouco complicado, você mencionou que essa tabela não tem um campo unico correto?
Ela possui algum campo com data e hora? ou alguma tabela que tem ligação com ela possui algum campo com data e hora?
Pois se tiver fica mais facil para realização do merge.
Uma imagem vale mais do que mil palavras, mas ocupa 3 mil vezes mais espaço em disco
-
Bom dia, consegui separar 13 colunas para formarem de forma unica a linha. Quanto a indices, o top 10 era apenas um test drive de como ele iria se comportar, o processo em si inicial vai ser uma massa de informacoes que irei copiar e como mencionei acima, tenho apenas permissao de leitura nessa base, nao consigo ver detalhes sobre indices nem nada.
(desculpem a ausencia de pontuacoes, esto usando um teclado americano e nao me acostumei com ele)
-
Bom dia,
Infelizmente nao tenho acesso a tabela de origem, apenas posso consulta la. O processo atual que faco do merge atraves de linked server ja funciona perfeitamente em outros projetos meus na mesma base, essa em questao o que me preocupa um pouco e o grande volume de informacoes que terei que transferir inicialmente e a quantidade de chaves (13) que estou utilizando, pois como so tenho acesso a leitura nao tenho como otimizar a origem para melhorar o processo.
(desculpem a ausencia de pontuacoes, estou usando um teclado americano e nao me acostumei com ele)
-
Fabiano, bom dia.
Você já pensou em utilizar o Integration Services pra isso?
Eu alterei alguns processos antigos aqui que usavam linked server para um pacote do Integration que faz o tratamento dos dados e a exportação.
Na média obtive um ganho de 70% no tempo.
Você pode fazer um teste utilizando o Lookup do SSIS com essas 13 colunas. Acredito que vá ganhar em tempo de execução!
Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */
- Sugerido como Resposta Durval RamosModerator segunda-feira, 6 de julho de 2015 03:03
- Marcado como Resposta Durval RamosModerator domingo, 2 de agosto de 2015 03:10
-
Boa tarde,
Todas as linhas seram lidas e copiadas e na clausula where estou verificando a melhor combinacao de importacao por periodo, ja que sao dados de 5 anos ao longo de 12 meses.
Origem:
Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (X64) xxxxxxx Copyright (c) 1988-2008 Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
Destino:
Microsoft SQL Server 2008 (SP3) - 10.0.5844.0 (X64) xxxxxxxx Copyright (c) 1988-2008 Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
-
-
- Editado Fabianomaso segunda-feira, 27 de abril de 2015 19:26
-
-
-
Bom dia,
Sim incialmente nao criei indices, pois pensei que seria mais facil para inserir, ja que o processo de consulta so ocorreria depois, entao os indices adequados eu iria criar depois tambem. Como disse criei um indice envolvendo as 13 colunas e atendendo a esse requisito de maior para menor seletividade como vc mencionou, infelizmente eu so posso testar isso de madrugada quando nao ha usuarios no banco e eu acabei esquecendo de ativar o job ontem entao ainda nao pude dar uma resposta sobre os resultados obtidos.
- Estou tentando fazer micro testes aqui para ver o que terei de resultados.
Enquanto isso fiquei com um duvida, se puder tira la agradeco. (novato na area on!)
Qual seria a diferenca entre usar o comando MERGE normal com aquele MERGE utilizando o OPENQUERY que vc postou mas editou naquele dia?