Determinando quanto de RAM precisarei para processar uma migração de banco de dados

1

Estou tentando determinar quanta RAM será necessária para o processamento de uma migração de banco de dados (a empresa deseja adquirir mais RAM para mim). Os fatores são:

  • Aproximadamente 3 GIG de dados sendo transferidos entre o Oracle e o MySQL
  • Aproximadamente 900 GIG de dados de arquivo sendo lidos
  • Usando o Java para criar meu script de processamento

Estou curioso para saber se existe alguma maneira de criar uma fórmula matematicamente, ou se apenas um baile de 2 shows será suficiente? Estou correndo com um gig de RAM no momento.

    
por Jonathan Kushner 29.10.2009 / 14:52

2 respostas

1

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.

    
por 29.10.2009 / 15:51
0

Com o preço atual de RAM, sua empresa não está fazendo um grande investimento aqui.
Por isso, seria ridículo ir para 3 GB de RAM e descobrir que não é suficiente.

Escolha 4 GB de RAM, mesmo que em um O / S de 32 bits a placa de vídeo consuma parte do quarto GB.

Não matematicamente falando, 4GB deve ser o suficiente. Caso contrário, o próximo investimento da sua empresa deve ser em um O / S de 64 bits (e talvez um novo computador) com 8 GB.

    
por 29.10.2009 / 15:59