Mysql
為什麼MySQL說我記憶體不足?
我試圖
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)
我應該有足夠的 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
那麼這只是更改上述設置以更好地適應我的環境的問題嗎?如果是這樣,我應該使用什麼設置?我是唯一一個使用過這個實例的人;我將它用於我的個人愛好項目,該項目涉及對大型數據集的統計分析。因此,我可以自由地讓它為我自己的查詢消耗所有可用資源。
如果這不是更改這些設置的問題,那麼問題是什麼?感謝您為如何更好地配置所有內容提供的任何幫助。
鑑於這是一個 Windows 安裝,@DTest 仍然提供了最初的正確方向。
應用以下公式:
大多數人使用這個:
Maximum MySQL Memory Usage = innodb_buffer_pool_size + key_buffer_size + (read_buffer_size + sort_buffer_size) X max_connections
我更喜歡這個:
Maximum MySQL Memory Usage = innodb_buffer_pool_size + key_buffer_size + ((read_buffer_size + read_rnd_buffer_size + sort_buffer_size + join_buffer_size) X max_connections)
這些變數是您需要調整的變數,直到公式產生已安裝 RAM 的 80% 或更少。
sort_buffer_size read_buffer_size read_rnd_buffer_size join_buffer_size max_connections