সমস্ত ডাটাবেস না ফেলে আমি কীভাবে ইনোডাব ফাইল আইবডটা 1 সঙ্কুচিত করব?


24

InnoDB একটি বড় ফাইলে সমস্ত টেবিল সঞ্চয় করে ibdata1

একটি বড় টেবিল ফেলে দেওয়ার পরে, ফাইলটি তার আকারটি রাখছে টেবিলটি যত বড় হোক না কেন। পুরো ডাটাবেসটি (যার মধ্যে বেশ কয়েকটি হ্যান্ড্রেড জিবি রয়েছে) ডাম্প এবং পুনরায় আমদানি না করেই আমি কীভাবে ফাইলটি সঙ্কুচিত করতে পারি?

আমি মনে করি এর কারণ কারণ আপনি এখনও ড্রপিংয়ের রোলব্যাক করতে সক্ষম। আমার ক্ষেত্রে আমার দরকার নেই।

উত্তর:


30

এটি মাইএসকিউএল ডিবিএ এবং ডিবিএ স্ট্যাকএক্সচেঞ্জের ক্ষেত্রে আমি বছরের পর বছর ধরে যে বিতর্কিত বিষয়গুলির মধ্যে পড়েছি তার মধ্যে একটি।

এটিকে হালকাভাবে বলতে গেলে, ইবদাটা সঙ্কুচিত করার উপায় ছাড়া আর কোনও উপায় নেই । সঙ্গে innodb_file_per_table অক্ষম, প্রত্যেক সময় আপনি চালাতে OPTIMIZE TABLEএকটি InnoDB টেবিলের উপর, ibdata1 দ্রুত বৃদ্ধি। যে ডেটা ব্যবহার করে ফেলে দেওয়া হয় DROP TABLEএবং DROP DATABASEএগুলি আবার ঘোরানো যায় না কারণ তারা ডিডিএল, ডিএমএল নয়। আমি বিশ্বাস করি ওরাকল এবং এমএসএসকিউএল ডিডিএল রোলব্যাক করতে পারে। মাইএসকিউএল এটি করতে পারে না।

বিভিন্ন ধরণের তথ্য রয়েছে যা ইবদাটা 1 তে থাকে

  • সারণী ডেটা
  • সারণী সূচি
  • টেবিল মেটাডেটা
  • এমভিসিসি নিয়ন্ত্রণ ডেটা
  • ডাবল রাইট বাফার (ওএস ক্যাশে নির্ভরতা রোধ করতে পটভূমি রচনা)
  • বাফার Inোকান (অ-অনন্য মাধ্যমিক সূচকগুলিতে পরিবর্তনগুলি পরিচালনা করা)

ব্যবহারের innodb_file_per_table=1সাহায্যে আপনি টেবিল ডেটা এবং টেবিল সূচীগুলি আইবডাটা 1 এর বাইরে তৈরি হতে নতুন টেবিল তৈরি করতে পারবেন। আপনি এখনও ইবদাটা 1 এর সাহায্যে কোনও সারণী নিষ্কাশন করতে পারেন ALTER TABLE ... ENGINE=InnoDB;বা OPTIMIZE TABLEএটি ব্যবহার করতে পারেন তবে এটি সেই বড় ফাঁক দিয়ে অব্যবহৃত স্থানটি ইবদাটা 1 এ ছেড়ে যাবে।

তবুও, আপনাকে অবশ্যই InnoDB অবকাঠামো পরিষ্কার করতে হবে। কীভাবে এবং কীভাবে করা যায় সে সম্পর্কে আমি ইতিমধ্যে স্ট্যাক এক্সচেঞ্জ পোস্টগুলি লিখেছি:

ভাল খবর

আপনাকে কেবল ডেটা ডাম্প করতে হবে, আরও একবার পুনরায় লোড করুন এবং এই সমস্যাটি আবার কখনও ঘুরে দেখবেন না । এর OPTIMIZE TABLEপরে চালানো .ibdকোনও InnoDB টেবিলের জন্য টেবিল স্পেস ফাইলটি সঙ্কুচিত করবে ।


1
গৌণ সংশোধন: এমএসএসকিউএল এবং পোস্টগ্রিএসকিউএল ডিডিএল ফিরে আসতে পারে। ওরাকল পারে না। প্রকৃতপক্ষে ওরাকল একটি নিষ্ক্রিয় প্রতিশ্রুতি জারি করে যখন এটি ডিডিএল দেখে!
ক্রিস ট্র্যাভারস

1
@ রোল্যান্ডোমাইএসকিউএলডিবিএ মাইএসকিউএলের কোন সংস্করণ থেকে স্বয়ংক্রিয়ভাবে সঙ্কুচিত হওয়ার এই "সুসংবাদ"?
গ্যাভ্রিল

@ গ্যাভ্রিয়েল - আমার মনে হয় আপনি ভুল লিখেছেন। তবুও তোমাকে ফেলে দিতে হবে; ibdata1 সরান; আবার শুরু; এবং পুনরায় লোড করুন। ইবদাটা 1-এর নন-অটোশ্রিংক। (ইব্লগ * পরিবর্তন করা এখন সহজ))
রিক জেমস

2

আপনি যদি আমার মাই সিএনএফ ডিফল্ট ফাইলে নিম্নোক্ত সেটিংসটি ব্যবহার না করেন তবেই আইএনডিডিবি আপনার সমস্ত ইনোডিবি টেবিলগুলি কেবল আইবডটা 1 এ সঞ্চয় করে:

innodb_file_per_table = 1

ড্রপ টেবিল (এবং ড্রপ ডেটাবেস) পিছনে রোল করা যাবে না।

আপনি ইবদাটা 1 সঙ্কুচিত করতে পারবেন না এই কারণ নয়।

এটি সংক্ষিপ্ত বিবরণ, তবে আইবডাটা 1 এ আপনার টেবিলের ডেটা ছাড়াও ইনোডিবি ইন্টার্ন রয়েছে। আমার বোঝার থেকে সঙ্কুচিত হওয়ার জন্য এটির ডিফ্র্যাগমেন্টিংয়ের প্রয়োজন হবে, এটি কোনও সমর্থিত ক্রিয়াকলাপ নয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.