INSERT...SELECT
JDBCを使用してMySQLでかなり大きなサイズを実行しようとしましたが、次の例外が発生しました。
Exception in thread "main" java.sql.SQLException: Out of memory (Needed 1073741824 bytes)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
実際にはResultSetオブジェクトを返すわけではないので、Javaヒープ領域は問題にならないはずです。しかし、とにかくそれを上げようとしたところ、うまくいきませんでした。次に、MySQL Workbenchでステートメントを実行しようとすると、基本的に同じものが得られました。
Error Code 5: Out of memory (Needed 1073741816 bytes)
これらの操作を完了するには十分なRAMが必要です(選択するテーブル全体に収まるほど)が、すべてのメモリを活用するために微調整する必要のあるさまざまな設定があると思います。Amazon EC2 ハイメモリダブルエクストララージインスタンスをWindows Server 2008 AMIで実行しています。my.iniファイルをいじって、より良い設定を使用しようとしましたが、すべての状況で、状況がさらに悪化した可能性があることはわかっています。これがそのファイルのダンプです。
[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
これは、上記の設定を変更して私の環境でより適切に機能するようにするだけの問題ですか?その場合、どの設定を使用すればよいですか?このインスタンスを使用するのは私だけです。大規模なデータセットの統計分析を含む個人的な趣味のプロジェクトに使用します。そのため、自分のクエリで使用可能なすべてのリソースを消費させることができます。
これがこれらの設定を変更する問題ではない場合、問題は何ですか?すべてを適切に構成する方法について提供できるヘルプをありがとう。