Ich habe versucht, INSERT...SELECT
mit JDBC eine ziemlich große Version in MySQL auszuführen , und habe die folgende Ausnahme erhalten:
Exception in thread "main" java.sql.SQLException: Out of memory (Needed 1073741824 bytes)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
Da ich eigentlich kein ResultSet-Objekt zurückgebe, dachte ich, dass der Java-Heapspeicher kein Problem sein sollte. Ich habe es trotzdem versucht und es hat nicht gut getan. Ich habe dann versucht, die Anweisung in MySQL Workbench auszuführen, und habe im Wesentlichen dasselbe erhalten:
Error Code 5: Out of memory (Needed 1073741816 bytes)
Ich sollte genügend RAM haben, um diese Vorgänge abzuschließen (genug, um in die gesamte Tabelle zu passen, aus der ich auswähle), aber ich schätze, es gibt verschiedene Einstellungen, die ich anpassen muss, um meinen gesamten Speicher zu nutzen. Ich verwende eine doppelte extra große Amazon EC2- Instanz mit hohem Speicher und einem Windows Server 2008 AMI. Ich habe versucht, mit der Datei my.ini herumzuspielen, um bessere Einstellungen zu verwenden, aber soweit ich weiß, hätte ich die Dinge möglicherweise noch schlimmer gemacht. Hier ist ein Speicherauszug dieser Datei:
[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
Geht es also nur darum, die oben genannten Einstellungen zu ändern, um für meine Umgebung besser zu funktionieren? Wenn ja, welche Einstellungen sollte ich verwenden? Ich bin der einzige, der diese Instanz jemals verwendet. Ich verwende es für mein persönliches Hobbyprojekt, bei dem große Datensätze statistisch analysiert werden. Daher kann ich zulassen, dass alle verfügbaren Ressourcen für meine eigenen Abfragen verwendet werden.
Was ist das Problem, wenn es nicht darum geht, diese Einstellungen zu ändern? Vielen Dank für jede Hilfe, die Sie anbieten können, um alles besser zu konfigurieren.