Я намагався виконати досить великий INSERT...SELECT
обсяг у MySQL за допомогою JDBC, і я отримав таке виняток:
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)
У мене повинно бути достатньо оперативної пам’яті, щоб виконати ці операції (достатньо, щоб вмістити всю таблицю, яку я вибираю), але я здогадуюсь, що існують різні налаштування, які потрібно налаштувати, щоб скористатися всією моєю пам’яттю. Я використовую подвійний надзвичайно великий екземпляр пам'яті Amazon EC2 з великим екземпляром із Windows AMI для Windows Server 2008. Я спробував познайомитися з файлом 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
Тож це лише питання зміни вищевказаних налаштувань, щоб вони краще працювали в моєму середовищі? Якщо так, то які параметри я повинен використовувати? Я єдиний, хто коли-небудь використовує цей екземпляр; Я використовую його для особистого хобі-проекту, який включає статистичний аналіз великих наборів даних. Як такий, я вільний дозволити йому споживати всі наявні ресурси для моїх власних запитів.
Якщо проблема не в зміні цих налаштувань, у чому проблема? Дякуємо за будь-яку допомогу, яку ви можете запропонувати, як краще налаштувати все.