INSERT...SELECT
JDBC ile MySQL'de oldukça büyük bir yürütme yapmaya çalışıyordum ve aşağıdaki istisnayı aldım:
Exception in thread "main" java.sql.SQLException: Out of memory (Needed 1073741824 bytes)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
Aslında bir ResultSet nesnesi döndürmediğim için, Java yığın alanının bir sorun olmaması gerektiğini düşündüm. Ancak, yine de yukarı denedim ve hiç iyi olmadı. Daha sonra ifadeyi MySQL Workbench'te yürütmeye çalıştım ve aslında aynı şeyi aldım:
Error Code 5: Out of memory (Needed 1073741816 bytes)
Bu işlemleri tamamlamak için bol miktarda RAM'e sahip olmalıyım (seçtiğim tüm tabloya sığacak kadar), ancak tüm belleğimden yararlanmak için ince ayar yapmam gereken çeşitli ayarlar olduğunu tahmin ediyorum. Bir Windows Server 2008 AMI ile Amazon EC2 Yüksek Bellek Çift Ekstra Büyük Örnek çalıştırıyorum . Daha iyi ayarları kullanmak için my.ini dosyasıyla uğraşmayı denedim, ancak bildiğim kadarıyla işleri daha da kötüleştirebilirdim. İşte o dosyanın bir dökümü:
[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
Bu sadece ortamım için daha iyi çalışacak şekilde yukarıdaki ayarları değiştirmek midir? Öyleyse, hangi ayarları kullanmalıyım? Bu örneği kullanan tek kişi benim; Büyük veri kümelerinin istatistiksel analizini içeren kişisel hobi projem için kullanıyorum. Bu nedenle, kendi sorgularım için mevcut tüm kaynakları tüketmesine izin vermekten çekinmeyin.
Bu ayarların değiştirilmesi söz konusu değilse, sorun nedir? Her şeyi nasıl daha iyi yapılandıracağınız konusunda önerebileceğiniz herhangi bir yardım için teşekkürler.