লোড ডেটা ইনফাইলে এবং বর্ধিত ইনসার্টগুলির প্রত্যেকের স্বতন্ত্র সুবিধা রয়েছে।
লড ডেটা ইনফাইলটি একক ক্রিয়ায় টেবিলের ডেটা ভর করে লোড করার জন্য ডিজাইন করা হয়েছে সাথে বেলস এবং শিসিসের মতো টিংগুলি সম্পাদন করতে:
- প্রাথমিক লাইনগুলি এড়িয়ে চলেছে
- নির্দিষ্ট কলামগুলি এড়ানো হচ্ছে
- রূপান্তরকারী নির্দিষ্ট কলামগুলি
- নির্দিষ্ট কলাম লোড হচ্ছে
- সদৃশ কী ইস্যু পরিচালনা করছে
বিশ্লেষণের জন্য কম ওভারহেডের প্রয়োজন
ফ্লিপ দিকে, আপনি যদি 1,000,000 সারিগুলির পরিবর্তে 100 টি সারি আমদানি করে থাকেন তবে বর্ধিত INSERT বুদ্ধিমান।
খেয়াল করুন যে মাইএসকিএলডাম ডেটা সহ টেবিল ডিজাইনের বহন করার জন্য বর্ধিত INSERT এর আশেপাশে নকশা করা হয়েছিল কারণ এটি প্রতি INSERT- এ কয়েকশো বা কয়েক হাজার সারি ইনজেকশন সঞ্চালন করে। লোড ডেটা ইনফাইল সর্বদা স্কিমা এবং ডেটার মধ্যে একটি শারীরিক দ্বিচক্রোটি তৈরি করে।
অ্যাপ্লিকেশন পয়েন্ট অফ ভিউ থেকে, লড ডেটা ইনফিল বর্ধিত INSERTs এর চেয়ে স্কিমা পরিবর্তনের ক্ষেত্রে আরও সংবেদনশীল।
লোড ডেটা ইনফিল ব্যবহার করার জন্য কেউ ভাল, খারাপ এবং কুরুচিপূর্ণ দিকে পিছনে যেতে পারে। আপনি কোন কৌশলটি ব্যবহার করেন তা বিবেচনা না করেই আপনাকে সর্বদা বাল্ক_ইনটার্ট_বাফলার_সাইজ সেট করতে হবে । কেন?
বাল্ক_ইনটার্ট_বাফার_সাইজে মাইএসকিউএল ডকুমেন্টেশন অনুসারে:
মাইআইএসএএম সংক্ষিপ্তসারের জন্য বাল্ক সন্নিবেশগুলি দ্রুততর করার জন্য একটি বিশেষ গাছের মতো ক্যাশে ব্যবহার করে ... অমানবিকতায় ডেটা যুক্ত করার সময় নির্বাচন করুন, নির্বাচন করুন ... ভ্যালু (...), (...), ... এবং লোড ডেটা ইনফিল করুন টেবিল। এই পরিবর্তনশীলটি থ্রেড প্রতি বাইটে ক্যাশে গাছের আকার সীমাবদ্ধ করে। এটিকে 0 এ সেট করা এই অপ্টিমাইজেশনটিকে অক্ষম করে। ডিফল্ট মান 8MB।
কয়েক বছর ধরে, আমি ক্লায়েন্টকে এটি সেট না করার পরে দেখেছি এবং এটি 8MB এ রেখে দেয়। তারপরে, যখন তারা লোড ডেটা ইনফিল ব্যবহার করার বা মাইএসকিল্ডাম্পস আমদানির সিদ্ধান্ত নেয়, তখন তারা কিছু ভুল বুঝতে পারে। আমি সাধারণত এটি মাঝারি 256 এম এ সেট করার পরামর্শ দিই। কিছু ক্ষেত্রে, 512 এম।
একবার আপনার কাছে যথেষ্ট পরিমাণে বাল্ক ইনসার্ট বাফার হয়ে গেলে কৌশলটি ব্যবহার করে একাডেমিক রেন্ডার করা হয় এবং ব্যক্তিগত পছন্দ হিসাবে সেদ্ধ হয়। অ্যাপ্লিকেশনগুলির জন্য যেখানে আপনি চাহিদার ভিত্তিতে মাত্র 100 টি সারি সন্নিবেশ করান সেখানে বর্ধিত INSERT গুলি আটকে দিন।
সমস্ত ন্যায়সঙ্গতভাবে, লোড ডেটা ইনফিল বলা দ্রুত হয় যে সাধারণ INSERT স্টেটমেন্টগুলি বোঝা স্টেটমেন্টের এক ধরণের কারণ মূলত কনফিগারেশনটিকে বিবেচনায় নেওয়া হয় না। এমনকি যদি আপনি সঠিকভাবে বাল্ক_ইনটার্ট_ফুফার_সাইজ সহ লোড ডেটা ইনফিল এবং প্রসারিত INSERT এর মধ্যে একটি বেঞ্চমার্ক সেটআপ করেন তবে প্রতিটি সারি পার্স করার সময় সংরক্ষিত ন্যানোসেকেন্ডগুলি কেবলমাত্র লোড ডেটা ইনফিলের পক্ষে সর্বাধিক নামমাত্র ফলাফল দিতে পারে।
এগিয়ে যান এবং এটি my.cnf এ যুক্ত করুন
[mysqld]
bulk_inset_buffer_size=256M
আপনি বর্ধিত INSERT গুলি চালু করার আগে এটি কেবল আপনার সেশনের জন্য সেট করতে পারেন
SET bulk_insert_buffer_size= 1024 * 1024 * 256;
আপডেট 2012-07-19 14:58 ইডিটি
জিনিসগুলিকে দৃষ্টিকোণে রাখতে, বাল্ক ইনসার্ট বাফার কেবল মাইআইএসএএম টেবিলগুলি লোড করার জন্য দরকারী, ইনোডিবি নয়। আমি বাল্ক লোডিং সম্পর্কে আরও একটি সাম্প্রতিক পোস্ট লিখেছিলাম ইনোডিবি: হার্ড ড্রাইভের জন্য অপেক্ষা করে আটকা পড়া থেকে মাইএসকিএল লোড
LOAD DATA INFILE
: মাইএসকিউএল সহ উচ্চ-গতির সন্নিবেশগুলি । নীচের লাইন: আপনিLOAD DATA INFILE
বর্ধিত সন্নিবেশ ব্যবহারের পারফরম্যান্সের 65% অর্জন করতে পারেন । আমি আধুনিক হার্ডওয়্যারে 240,000 সন্নিবেশ / সেকেন্ড পেয়েছি।