Um show é realmente muito pouco para que esse processo ocorra sem que os servidores SQL paginem freqüentemente para o disco. Ainda mais, se por acaso ambos os servidores estiverem na mesma máquina.
A dimensão final dos dados no MySQL (3 Gb) não é particularmente preocupante. Qualquer computador desktop 3Gb moderno de 32 bits pode lidar com isso. São as consultas que estão sendo executadas nos dados de origem de 900 GB (Oracle), que serão um exagero.
Eu entendo que você está se preocupando com a RAM no momento, mas outros fatores que aumentariam muito o desempenho seriam a velocidade do disco rígido e o número de núcleos do processador. O primeiro, porque haverá muito acesso a HDD, pois as consultas trazem dados do banco de dados em disco, e o segundo, porque os dois servidores SQL são excelentes para aproveitar ao máximo os processadores multicore.
Mas quanto à RAM:
Quanto mais RAM você tiver, mais dados uma consulta poderá extrair do disco. Muitos, muitos, muitos fatores afetarão a importância da RAM. O mais importante talvez seja se suas consultas incluirem subconsultas e construções SQL semelhantes? Em caso afirmativo, o mecanismo do Oracle extrairá os dados do disco para as tabelas temporárias de memória e executará consultas mais detalhadas em seu plano de execução. Quanto mais dados puderem residir na memória, menos oracle precisará repetir esse processo e menos dados precisarão ser paginados de volta ao disco para construir o resultado final.
E, no entanto, a massa do seu banco de dados (estou perdendo o termo apropriado, mas essencialmente o tamanho das tabelas consultadas no oracle) pode reduzir alguns dos requisitos, caso aconteça, as tabelas consultadas no oracle não são nada mais de 1 ou 2 GB de tamanho.
Necessariamente, a qualidade de suas consultas afetará a quantidade de RAM mais necessária. A ordem de negócio aqui é índices, índices e mais índices. Evite a pesquisa de texto completo, como a peste, por exemplo, e só recorra a ela quando for necessário, e não quando puder. Evite também a pesquisa não indexada e, como essa é uma tarefa de migração na qual você está envolvido, não há problema em indexar mais colunas de suas tabelas do que normalmente . Lembre-se, você só estará lendo da Oracle. Finalmente, você deve garantir que, no caso das subconsultas, você as otimize da melhor maneira possível para não extrair muitas linhas desnecessárias.
Quanta RAM?
A quantidade exata de RAM não pode ser formulada, receio. Somente depois de construir suas consultas e estar pronto para iniciar o processo, você poderá ter uma ideia da quantidade de dados sendo trabalhados em uma única transação.
Escolha sua transação mais pesada (aquela que você sabe que gerará a maior quantidade de dados enquanto estiver sendo trabalhada). Faça uma estimativa de quantas linhas ele irá gerar durante a parte mais intensiva do plano de execução. Obtenha a memória total necessária por linha (some a memória necessária para cada coluna) e multiplique pelo número de linhas. Essa é a quantidade de RAM livre que você precisa idealmente para evitar paginação.
Uma otimização final:
Uma transação pode parecer para você como uma boa prática de otimização. Mas cuidado. Seu ponto de estrangulamento em todo esse processo não será a rapidez com que você pode ler dados de um banco de dados de 900 Gb, mas a quantidade de dados que você pode armazenar na memória antes de ser paginada. Como as transações serão executadas como uma unidade, mais memória será necessária para manter os resultados temporários e os dados de reversão. Evite transações nessas consultas em que você estará trabalhando com grandes volumes de dados.
Além disso, extraia apenas as colunas necessárias durante todo o processo. SELECT *
realmente não é uma boa ideia, a menos que você precise.
Conclusão:
Eu não poderia te dar um valor de RAM como você pediu. Você deve entender que seria injusto fazê-lo. Eu estaria mentindo para você. A quantidade de memória RAM que você precisa não é afetada apenas pelo volume de dados que está sendo trabalhado em cada consulta, mas até mesmo pelo desempenho do seu HDD, pois é aceitável no seu caso que alguma paginação de dados ocorra. / p>
Seu processador e sistema operacional também têm uma palavra sobre a quantidade de RAM que você pode usar. Como você sabe, se ambos forem 32Bit, nada mais do que ~ 3.8 será usado. Se eles são 64 bits, você pode empinar 1 Terabyte de RAM nele e não se preocupar mais com isso.
Finalmente, separar o servidor Oracle do servidor MySQL também reduzirá consideravelmente os requisitos de RAM. A máquina do servidor Oracle torna-se sua prioridade e a máquina do servidor MySQL de 1 Gb de RAM processará mais do que os dados recebidos com prazer.
Mas uma coisa eu posso dizer para você, não tente isso com 1Gb de RAM. Se é uma máquina de 32 bits, atualize-a para os 4Gb completos.
Tudo de bom.