Eu estava tentando executar um bastante grande INSERT...SELECT
no MySQL com JDBC, e recebi a seguinte exceção:
Exception in thread "main" java.sql.SQLException: Out of memory (Needed 1073741824 bytes)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
Como na verdade não estou retornando um objeto ResultSet, achei que o espaço de heap Java não deveria ser um problema. No entanto, tentei fazê-lo de qualquer maneira e não adiantou. Tentei então executar a instrução no MySQL Workbench e obtive essencialmente a mesma coisa:
Error Code 5: Out of memory (Needed 1073741816 bytes)
Eu deveria ter bastante RAM para concluir essas operações (o suficiente para caber em toda a tabela da qual estou selecionando), mas acho que existem várias configurações que preciso ajustar para aproveitar toda a minha memória. Estou executando uma Instância extra grande dupla do Amazon EC2 com memória alta com uma AMI do Windows Server 2008. Tentei mexer no arquivo my.ini para usar configurações melhores, mas, pelo que sei, posso ter piorado as coisas. Aqui está um despejo desse arquivo:
[client]
port=3306
[mysql]
default-character-set=latin1
[mysqld]
port=3306
basedir="C:/Program Files/MySQL/MySQL Server 5.5/"
datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/"
character-set-server=latin1
default-storage-engine=INNODB
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
max_connections=100
query_cache_size=1024M
table_cache=256
tmp_table_size=25G
thread_cache_size=8
myisam_max_sort_file_size=100G
myisam_repair_threads = 2
myisam_sort_buffer_size=10G
key_buffer_size=5000M
bulk_insert_buffer_size = 4000M
read_buffer_size=8000M
read_rnd_buffer_size=8000M
sort_buffer_size=1G
innodb_additional_mem_pool_size=26M
innodb_flush_log_at_trx_commit=2
innodb_log_buffer_size=13M
innodb_buffer_pool_size=23G
innodb_log_file_size=622M
innodb_thread_concurrency=18
innodb_file_per_table=TRUE
join_buffer_size=4G
max_heap_table_size = 10G
Portanto, é apenas uma questão de alterar as configurações acima para funcionar melhor no meu ambiente? Se sim, quais configurações devo usar? Eu sou o único que usa essa instância; Eu o uso no meu projeto de hobby pessoal, que envolve análise estatística de grandes conjuntos de dados. Como tal, estou livre para consumir todos os recursos disponíveis para minhas próprias consultas.
Se não se trata de alterar essas configurações, qual é o problema? Obrigado por qualquer ajuda que você possa oferecer para configurar melhor tudo.