মাইআইএসএএম থেকে ইনোডবিতে বড় টেবিল রূপান্তর করা


10

আমি মাইআইএসএএম ফর্ম্যাটে প্রায় 300M সারি সহ একটি টেবিল রেখেছি যা আমি ইনোডবিতে রূপান্তর করতে চাই

আমার মূল লক্ষ্যটি হ'ল সহজ সূচীগুলির জন্য টেবিল স্কিমা পরিবর্তন করে ব্যবহার হ্রাস করা। আমি সমস্ত টেবিল ছুঁড়ে ফেলেছি, এটিকে ফেলেছি, এটি কম সূচী দিয়ে পুনরায় তৈরি করেছি এবং এখন আবার নতুন করে বিবেচনা করছি। তবে আমি এটি উল্লেখ করতে ভুলে গেছি যে এটি মাইসামের পরিবর্তে ইনোডাব হওয়া উচিত।

আমি কি কেবলমাত্র স্ট্যান্ডার্ড অল্টার টেবল করতে পারি ... ENGINE = INNODB? এই জাতীয় বিশাল টেবিলটি সম্পর্কে আমার বিশেষ কিছু সচেতন হওয়া উচিত?

ডেটা আমদানি অপারেশনটি প্রায় 12 ঘন্টা সময় নিচ্ছে - আমি আবার এটি করতে ঘৃণা করি। সুতরাং কেন আমি কেবল এটি রূপান্তর করতে চাই।


300M সারি সহ, মাইআইএসএএম সম্ভবত সেই আকারের টেবিলের জন্য সম্ভবত একটি দ্রুত এবং আরও ভাল ফিট!
মার্ক হেন্ডারসন

উত্তর:


14

" হাই পারফরম্যান্স মাইএসকিউএল, দ্বিতীয় সংস্করণ " বইটি থেকে নিম্নলিখিত উত্সাহটি প্রকাশিত হয়েছে ।

এটি একটি দুর্দান্ত বই এবং আমি এটি যে কারও কাছে সুপারিশ করব।

সংক্ষিপ্ত উত্তরটি হ'ল:

আপনার টেবিলের আকার এবং শর্তাদি, আপনি যে পদ্ধতিটি বেছে নিন তা বিবেচনা না করেই আমি মনে করি আপনি দীর্ঘ প্রতীক্ষার জন্য সম্ভাব্য in


সারণী রূপান্তর

এক টেবিলকে এক স্টোরেজ ইঞ্জিন থেকে অন্য স্টোরেজে রূপান্তরিত করার বিভিন্ন উপায় রয়েছে, যার মধ্যে প্রতিটি সুবিধা এবং অসুবিধা রয়েছে।

টেবিল পরিবর্তন করুন

mysql> ALTER TABLE mytable ENGINE = Falcon;

এই সিনট্যাক্সটি সমস্ত স্টোরেজ ইঞ্জিনের জন্য কাজ করে, তবে একটি ধরা আছে: এতে অনেক বেশি সময় লাগতে পারে। মাইএসকিউএল আপনার পুরানো টেবিলের সারি-সারি একটি অনুলিপি একটি নতুন টেবিলের মধ্যে সম্পাদন করবে। এই সময়ের মধ্যে, আপনি সম্ভবত সার্ভারের সমস্ত ডিস্ক I / O ক্ষমতা ব্যবহার করবেন এবং রূপান্তর চলাকালীন মূল টেবিলটি পঠিত হবে।

ডাম্প এবং আমদানি করুন

রূপান্তর প্রক্রিয়াটির উপর আরও নিয়ন্ত্রণ অর্জনের জন্য, আপনি প্রথমে mysqldump ইউটিলিটিটি ব্যবহার করে কোনও টেক্সট ফাইলে টেবিলটি ডাম্প করতে পছন্দ করতে পারেন। একবার আপনি টেবিলটি ছুঁড়ে ফেলেছেন, এটিতে তৈরি টেবিলের বিবৃতিটি সামঞ্জস্য করার জন্য আপনি কেবল ডাম্প ফাইলটি সম্পাদনা করতে পারেন। সারণীর নাম এবং প্রকারের পরিবর্তনের বিষয়টি নিশ্চিত করুন, কারণ একই ডাটাবেসে আপনার একই নামের দুটি টেবিল থাকতে পারে না যদিও সেগুলি বিভিন্ন প্রকারের mys এবং মাইএসকিএলডাম্প ডিফল্ট তৈরি করে টেবিল তৈরির আগে একটি ড্রপ টেবিল লিখতে হবে , যাতে আপনি সাবধান না হলে আপনার ডেটা হারাতে পারে!

তৈরি করুন এবং নির্বাচন করুন

তৃতীয় রূপান্তর কৌশলটি প্রথম পদ্ধতির গতি এবং দ্বিতীয়টির সুরক্ষার মধ্যে একটি সমঝোতা। পুরো টেবিলটি ডাম্প করা বা এটি একবারে সমস্ত রূপান্তরিত করার পরিবর্তে নতুন টেবিলটি তৈরি করুন এবং মাইএসকিউএল এর INSERT ব্যবহার করুন ... এটিকে জনপ্রিয় করার জন্য সিনট্যাক্স নির্বাচন করুন:

mysql> CREATE TABLE innodb_table LIKE myisam_table;
mysql> ALTER TABLE innodb_table ENGINE=InnoDB;
mysql> INSERT INTO innodb_table SELECT * FROM myisam_table;

আপনার যদি খুব বেশি ডেটা না থাকে তবে এটি ভাল কাজ করে তবে আপনি যদি করেন তবে প্রায়শই টেবিলটিকে ক্রমবর্ধমানভাবে গড়ে তোলা আরও দক্ষ, এই আইডিটি প্রাথমিক কী হিসাবে ধরে নিয়েছেন, এই কোয়েরিটি বারবার চালান (প্রতিটি বার x এবং y এর বৃহত্তর মান ব্যবহার করে) যতক্ষণ না আপনি সমস্ত তথ্য নতুন টেবিলটিতে অনুলিপি করেন:

mysql> START TRANSACTION;
mysql> INSERT INTO innodb_table SELECT * FROM myisam_table
-> WHERE id BETWEEN x AND y;
mysql> COMMIT;

এটি করার পরে, আপনি মূল টেবিলটি রেখে যাবেন, এটি সম্পন্ন করার পরে আপনি ফেলে দিতে পারবেন এবং নতুন টেবিল যা এখন পুরোপুরি জনবহুল। ডেটাটির অসামঞ্জস্য অনুলিপি প্রতিরোধের প্রয়োজন হলে মূল টেবিলটি লক করতে সাবধান হন!


2

অল্টার টেবিল বিবৃতিটি মূলত একই কাজ করে: সার্ভার একটি অস্থায়ী টেবিল তৈরি করে যেখানে এটি সমস্ত সারি অনুলিপি করে এবং তারপরে একটি পুনরায় নামকরণ করে। অন্ন ডিস্ক ফর্ম্যাটগুলি ইনোডিবি এবং মাইআইএসএএম এর মধ্যে একেবারেই আলাদা, সুতরাং আপনি এটির কোনও শর্টকাট পাবেন বলে আমি আশা করি না।

আরেকটি মন্তব্য (যা আপনি হয়ত জানেন তবে এটি অন্যকে এটি পড়তে সহায়তা করবে): ইনোডিবি-র জন্য অন ডিস্ক ফর্ম্যাটটি মূল কীটির উপর নির্ভরশীল, কারণ এটি এর ভিত্তিতে রেকর্ডগুলি ক্লাস্টার করে। সুতরাং বড় InnoDB টেবিলের সাথে কাজ করার সময়, প্রাথমিক কীটি বাছাই করার আগে দু'বার চিন্তা করুন, কারণ এটি পরিবর্তন করা পুরো হাতটিকে যেমন পুনরায় তৈরি করে, তেমনি হাতের সমস্যার মতো।

যাইহোক, আমি প্রথমে একটি মাঝারি আকারের টেবিলের উপর কয়েকটি পরীক্ষা করার পরামর্শ দিয়েছি এবং সেগুলি সময় দিয়েছি।


2
মাইএসকিউএল-এ যে কোনও সারণী পরিবর্তন করার অপারেশন (এবং এতে সূচি যোগ করা অন্তর্ভুক্ত) সারণীটি পুনর্নির্মাণ করে।
ডেভিড প্যাশলে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.