Estaba tratando de ejecutar un INSERT...SELECT
MySQL bastante grande con JDBC, y obtuve la siguiente excepción:
Exception in thread "main" java.sql.SQLException: Out of memory (Needed 1073741824 bytes)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
Como en realidad no estoy devolviendo un objeto ResultSet, pensé que el espacio de almacenamiento dinámico de Java no debería ser un problema. Sin embargo, intenté subirlo de todos modos y no sirvió de nada. Luego intenté ejecutar la declaración en MySQL Workbench y obtuve esencialmente lo mismo:
Error Code 5: Out of memory (Needed 1073741816 bytes)
Debería tener suficiente RAM para completar estas operaciones (suficiente para adaptarse a toda la tabla que estoy seleccionando), pero supongo que hay varias configuraciones que necesito ajustar para aprovechar toda mi memoria. Estoy ejecutando una instancia de Amazon EC2 High Memory Double Extra Large con un AMI de Windows Server 2008. He intentado jugar con el archivo my.ini para usar una mejor configuración, pero por lo que sé, podría haber empeorado las cosas. Aquí hay un volcado de ese archivo:
[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
Entonces, ¿es solo una cuestión de cambiar la configuración anterior para que funcione mejor para mi entorno? Si es así, ¿qué configuración debo usar? Soy el único que usa esta instancia; Lo uso para mi proyecto de pasatiempo personal que implica el análisis estadístico de grandes conjuntos de datos. Como tal, soy libre de dejar que consuma todos los recursos disponibles para mis propias consultas.
Si no se trata de cambiar esa configuración, ¿cuál es el problema? Gracias por cualquier ayuda que pueda ofrecer sobre cómo configurar mejor todo.