Stavo cercando di eseguire un abbastanza grande INSERT...SELECT
in MySQL con JDBC e ho ottenuto la seguente eccezione:
Exception in thread "main" java.sql.SQLException: Out of memory (Needed 1073741824 bytes)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
Dato che in realtà non sto restituendo un oggetto ResultSet, ho pensato che lo spazio heap Java non dovesse essere un problema. Tuttavia, ho provato a risolverlo comunque e non ha funzionato. Ho quindi cercato di eseguire la dichiarazione in MySQL Workbench e ho ottenuto sostanzialmente la stessa cosa:
Error Code 5: Out of memory (Needed 1073741816 bytes)
Dovrei avere molta RAM per completare queste operazioni (abbastanza per adattarsi all'intero tavolo da cui sto selezionando), ma immagino ci siano varie impostazioni che devo modificare per sfruttare tutta la mia memoria. Sto eseguendo un'istanza extra large doppia di memoria Amazon EC2 con un AMI di Windows Server 2008. Ho provato a giocherellare con il file my.ini per utilizzare impostazioni migliori, ma per quanto ne so avrei potuto peggiorare le cose. Ecco un dump di quel file:
[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
Quindi è solo una questione di modificare le impostazioni sopra per funzionare meglio per il mio ambiente? In tal caso, quali impostazioni dovrei usare? Sono l'unico che abbia mai usato questa istanza; Lo uso per il mio progetto di hobby personale che prevede l'analisi statistica di grandi set di dati. In quanto tale, sono libero di lasciarlo consumare tutte le risorse disponibili per le mie query.
Se non si tratta di modificare tali impostazioni, qual è il problema? Grazie per l'aiuto che puoi offrire per come configurare al meglio tutto.