আমি লোড ডেটা ইনফিলের মাধ্যমে একটি 100 গিগাবাইট ফাইল লোড করছি। আমি মাইআইএসএএম এর সাথে বেশ কয়েক ঘন্টা ভাল সাফল্য পেয়েছি এবং করেছি।
আমি এখন এটি InnoDB ব্যবহার করে চেষ্টা করছি। লোডটি 10MB / সেকেন্ডের চেয়ে দ্রুত শুরু হয় (টেবিল ফাইলের বিকাশটি দেখানো হয়, file_per_table
চালু করা হয়)।
তবে প্রায় 5 জিবি ডেটার পরে এটি 2-4MB / সেকেন্ড পরিসরে গতি কমে যায়, আমি যখন 20 গিগাবাইটের বেশি পাই তখন এটি 2MB / সেকেন্ডের কাছাকাছি ছিল।
InnoDB বাফার পুলের আকার 8G। এবং লোড ডেটা ইনফিল কমান্ডটি চালানোর আগে আমি নিম্নলিখিতটি সম্পাদন করেছি:
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....
কেন এটি ভাল শুরু এবং সময়ের সাথে ধীর হয়ে যাওয়ার কারণ আমি দেখতে পাচ্ছি না।
এছাড়াও, একই সেটিংস ব্যবহার করে, আমি টেবিলের সাথে ইনোডিবি এবং মাইআইএসএএম এবং একটি 5 গিগাবাইট টেস্ট ডেটাসেট ব্যবহার করে একই লোড ডেটা ইনফিল কমান্ডটি চালিয়েছি, মাইআইএসএএম 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
আমার আর কিছু চেষ্টা করা বিবেচনা করা উচিত? মাইআইএসএএম ইঞ্জিন লোডের হার আরও ভাল রাখতে সক্ষম।
অতিরিক্ত তথ্য:
আমি পৃথকভাবে ফাইলগুলি লোড করার চেষ্টা করেছি, কোনও পার্থক্য নেই।
ঘটনাচক্রে, আমার প্রতিটি 500MB এর 150 টি ফাইল রয়েছে, প্রতিটি ফাইলের মধ্যে কীগুলি বাছাই করা হয়।
রাতারাতি 40 গিগাবাইট পাওয়ার পরে, 12 ঘন্টা পরে, লোডের হারটি 0.5MB / সেকেন্ডে নেমে গেছে, যার অর্থ কার্যকরীভাবে বলা যায়, ব্যবহারিকভাবে বলা অসম্ভব।
অন্যান্য ফোরামে অনুরূপ প্রশ্নের উত্তর আমি অন্য কোনও সন্ধান পাইনি, এটি আমার কাছে মনে হয় যে ইনোডিবি কয়েকটি জিবি আকারে বড় আকারের ডেটা টেবিলগুলিতে লোড করতে সমর্থন করে না।