मैं लोड डेटा इनइमर के माध्यम से 100GB फ़ाइल लोड कर रहा हूं। मुझे MyISAM के साथ अच्छी सफलता मिली है, कुछ घंटे और किए।
मैं इसे अब InnoDB का उपयोग करके देख रहा हूँ। लोड 10 एमबी / सेकंड से अधिक तेजी से शुरू होता है (टेबल फ़ाइल की वृद्धि को देखते हुए, file_per_table
चालू होता है)।
लेकिन लगभग 5GB डेटा के बाद यह 2-4MB / सेकंड की सीमा तक धीमा हो जाता है, क्योंकि मुझे 20GB से अधिक मिलता है यह लगभग 2MB / सेकंड था।
InnoDB बफर पूल का आकार 8G है। और मैंने LOAD DATA INFILE कमांड को चलाने से पहले निम्नलिखित काम किए हैं:
SET @@session.sql_log_bin=0;
SET autocommit=0;
SET unique_checks=0;
SET foreign_key_checks=0;
alter table item_load disable keys;
//Run LOAD DATA INFILE....
मैं यह नहीं देख सकता कि क्यों यह अच्छी तरह से शुरू हो रहा है और समय के साथ धीमा हो रहा है।
इसके अलावा, उसी सेटिंग का उपयोग करते हुए, मैंने उसी LOAD DATA INFILE कमांड को InnoDB और MyISAM और 5GB परीक्षण डेटासेट का उपयोग करके चलाया, MyISAM 20x तेज था:
InnoDB:
mysql> LOAD DATA CONCURRENT LOCAL INFILE '/tmp/item' REPLACE INTO TABLE item_load;
Query OK, 2630886 rows affected, 6 warnings (21 min 25.38 sec)
Records: 2630886 Deleted: 0 Skipped: 0 Warnings: 6
MyISAM:
mysql> LOAD DATA CONCURRENT LOCAL INFILE '/tmp/item' REPLACE INTO TABLE item_load;
Query OK, 2630886 rows affected, 6 warnings (1 min 2.52 sec)
Records: 2630886 Deleted: 0 Skipped: 0 Warnings: 6
मुझे कोशिश करने पर विचार करना चाहिए? MyISAM इंजन लोड रेट को बेहतर बनाए रखने में सक्षम है।
अतिरिक्त जानकारिया:
मैंने फ़ाइलों को अलग-अलग लोड करने की कोशिश की है, कोई अंतर नहीं।
संयोग से, मेरे पास प्रत्येक 500MB की 150 फाइलें हैं, प्रत्येक फाइल के भीतर कुंजियां छांटी गई हैं।
रात भर में 40GB प्राप्त करने के बाद, 12h बाद में, लोड दर 0.5MB / सेकंड तक नीचे थी, जिसका अर्थ है कि ऑपरेशन, व्यावहारिक रूप से बोलना, असंभव है।
मुझे अन्य मंचों पर इसी तरह के सवालों के कोई अन्य उत्तर नहीं मिले हैं, यह मुझे प्रतीत हो रहा है कि इनोबीडी आकार में बड़ी मात्रा में डेटा को कुछ जीबी में लोड करने का समर्थन नहीं करता है।