Próbowałem wykonać dość duży INSERT...SELECT
w MySQL z JDBC i otrzymałem następujący wyjątek:
Exception in thread "main" java.sql.SQLException: Out of memory (Needed 1073741824 bytes)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
Ponieważ tak naprawdę nie zwracam obiektu ResultSet, pomyślałem, że przestrzeń sterty Java nie powinna stanowić problemu. Jednak i tak próbowałem go podnieść i nic nie dało. Następnie próbowałem wykonać instrukcję w MySQL Workbench i uzyskałem zasadniczo to samo:
Error Code 5: Out of memory (Needed 1073741816 bytes)
Powinienem mieć dużo pamięci RAM, aby wykonać te operacje (wystarczające, aby zmieścić cały stół, z którego wybieram), ale domyślam się, że istnieją różne ustawienia, które muszę dostosować, aby wykorzystać całą moją pamięć. Korzystam z podwójnie bardzo dużej instancji Amazon EC2 High Memory Double z systemem Windows Server 2008 AMI. Próbowałem majstrować przy pliku my.ini, aby korzystać z lepszych ustawień, ale o ile wiem, mogłem pogorszyć sytuację. Oto zrzut tego pliku:
[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
Czy to tylko kwestia zmiany powyższych ustawień, aby działały lepiej w moim środowisku? Jeśli tak, jakich ustawień powinienem użyć? Jestem jedynym, który kiedykolwiek korzysta z tego wystąpienia; Używam go do mojego osobistego projektu hobby, który obejmuje analizę statystyczną dużych zbiorów danych. W związku z tym mogę swobodnie zużywać wszystkie dostępne zasoby do własnych zapytań.
Jeśli to nie jest kwestia zmiany tych ustawień, na czym polega problem? Dziękujemy za wszelką pomoc, która może pomóc w lepszym skonfigurowaniu wszystkiego.