我试图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来完成这些操作(足以容纳要从中选择的整个表),但是我猜测我需要调整各种设置以利用我的所有内存。我正在使用Windows Server 2008 AMI 运行Amazon EC2 高内存双超大实例。我尝试摆弄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
因此,是否只是更改上述设置以使其更适合我的环境而已?如果是这样,我应该使用哪些设置?我是唯一使用此实例的人。我将其用于个人兴趣项目,该项目涉及对大型数据集的统计分析。因此,我可以随意使用它来查询自己的所有可用资源。
如果这不是更改这些设置的问题,那是什么问题?感谢您提供的有关如何更好地配置所有内容的帮助。