কেন ইনডোডবি_ফাইলে_ ট্যাপেল ব্যবহার করছেন?
কারণ এটি ফাইল-স্তরে করা যায় বলে স্বতন্ত্র পরিচালনা করা সহজ। এর অর্থ সার্ভারটি ডাউন থাকলেও আপনি টেবিলের ফাইলগুলি অনুলিপি করে এখনও অনুলিপি করতে পারেন যেখানে ভাগ করা টেবিল-স্পেস ব্যবহার করার অর্থ হ'ল অযৌক্তিকভাবে বিশাল হতে পারে এমন সমস্ত কিছু অনুলিপি করা , বা সার্ভারকে ডেটা উত্তোলনের জন্য চালানোর কোনও উপায় খুঁজে পাওয়া ( আপনি সত্যই কোনও হেক্স-সম্পাদকের সাহায্যে ম্যানুয়ালি ডেটা বের করতে চান না)।
কেউ সতর্ক করে দিয়েছিল যে আপনি কেবল .ibd
একটি সার্ভার থেকে অন্য সার্ভারে ফাইলগুলি অনুলিপি এবং আটকানোতে পারবেন না । এই সত্য হতে পারে, কিন্তু এটা একই সার্ভারে ব্যাকআপ ক্ষেত্রে প্রযোজ্য নয় উচিত (আমি শব্দ ব্যবহার করছি ব্যাকআপ এখানে একটি কপি তৈরীর প্রথাগত অর্থে; অর্থাত, আয়তন বহুলাংশে না পুরো জিনিস পরিবর্তন)। তদ্ব্যতীত, ibdata1
স্বয়ংক্রিয়ভাবে শুরুতে পুনরায় তৈরি করা হয় (যেমন বেশিরভাগ "ফাইল-প্রতি টেবিলে ফাইল রূপান্তর" গাইডের মোছারibdata1
পদক্ষেপে দেখা যায় )। যেমন, আপনি কি না কপি করা আবশ্যক ibdata1
আপনার ছাড়াও .ibd
ফাইল (এবং তাদের সংশ্লিষ্ট .frm
ইত্যাদি ফাইল)।
যদি কোনও হারিয়ে যাওয়া টেবিলটি পুনরুদ্ধার করার চেষ্টা করা হয়, তবে এটির .ibd
এবং .frm
ফাইলটি অনুলিপি করার জন্য যথেষ্ট হবে information_schema
(যা এর চেয়ে অনেক ছোট ibdata1
)। এইভাবে, আপনি এগুলিকে একটি ডামি সার্ভারে রাখতে পারেন এবং পুরো, বিশাল জিনিসটি অনুলিপি না করেই আপনার টেবিলটি বের করতে পারেন।
তবে আরও ভাল পারফরম্যান্সের দাবিটি প্রশ্নবিদ্ধ। … ইনোডাব_ফিল_পিটার_সামগ্রী সহ, আরও ডিস্ক আই / ও অপারেশন প্রয়োজন; এবং এটি জটিল JOINs এবং বিদেশী কী বাধাগুলির মধ্যে উল্লেখযোগ্য।
আশ্চর্যের বিষয় নয় যে, পারফরম্যান্সটি ব্যবহারের ক্ষেত্রে নির্দিষ্ট ডেটাবেসগুলির উপর নির্ভর করবে। একজনের কাছ থেকে অন্যের (এমনকি ব্যাপকভাবে) পৃথক ফলাফল হবে।
এটি সত্য যে ফাইল-প্রতি-সারণীতে আরও বেশি ডিস্ক I / O অপারেশন থাকবে তবে কেবল কিছুটা বেশি। সিস্টেমটি কীভাবে কাজ করে তা ভেবে দেখুন।
আপনি লক্ষ্য করবেন যে সার্ভারটি চলমান থাকাকালীন আপনি ডেটা ফাইলগুলি সরাতে পারবেন না কারণ সার্ভারের তাদের কাছে খোলা হ্যান্ডলগুলি রয়েছে। এটি কারণ যখন এটি শুরু হয়, এটি এগুলিকে খোলে এবং এগুলিকে খোলা ছেড়ে দেয়। এটি প্রতিটি পৃথক প্রশ্নের জন্য এগুলি খোলার এবং বন্ধ করে দেয় না does
যেমন, সার্ভারটি শুরু হওয়ার পরে শুরুতে আরও কয়েকটি আই / ও ক্রিয়াকলাপ রয়েছে; এটি চলমান যখন না। তদাতিরিক্ত, প্রতিটি পৃথক .ibd
ফাইলের নিজস্ব পৃথক ওভারহেড (ফাইল স্বাক্ষর, কাঠামো ইত্যাদি) থাকা অবস্থায় এগুলি মেমোরিতে ক্যাশে থাকে এবং প্রতিটি ক্যোয়ারির জন্য পুনরায় পড়া হয় না। তদুপরি, একই কাঠামোগুলি একটি ভাগ করা টেবিল-স্পেস সহ এমনকি পড়া হয়, সুতরাং সেখানে সবেমাত্র কোনও (যদি কোনও হয় তবে) আরও মেমরি প্রয়োজন।
ইনেসোডবি_ফিল_পিটার_সত্তার কি মাইএসকিএল-এর আরও ভাল পারফরম্যান্সে প্রভাব ফেলে?
আসলে, যদি কিছু হয় তবে পারফরম্যান্সটি আরও খারাপ হতে পারে ।
একটি ভাগ করা টেবিল-স্পেস ব্যবহার করার সময়, পড়ুন এবং লেখার ক্রিয়াকলাপগুলি মাঝে মাঝে / প্রায়শই একত্রিত করা যায় যাতে সার্ভার একাধিক টেবিল থেকে ডেটা একটি স্যাচ একবারে পড়তে পারে ibdata
।
তবে, যদি ডেটা একাধিক ফাইলের মধ্যে ছড়িয়ে যায় তবে তার জন্য পৃথকভাবে প্রতিটিের জন্য আলাদা আই / ও অপারেশন করতে হবে।
অবশ্যই এটি আবার সম্পূর্ণভাবে প্রশ্নে থাকা ডাটাবেসের উপর নির্ভরশীল; বাস্তব-বিশ্বের পারফরম্যান্স প্রভাবটি আকার, ক্যোয়ারী ফ্রিকোয়েন্সি এবং ভাগ করা টেবিল-স্পেসের অভ্যন্তরীণ খণ্ডের উপর নির্ভর করবে। কিছু লোক একটি বৃহত পার্থক্য লক্ষ্য করতে পারে আবার অন্যরা কোনও প্রভাব দেখতে নাও পারে।
টেবিলস্পেস একক ইবদাটাতে ভাগ করা হয়; আলাদা টেবিলের জন্য উত্সর্গীকৃত টেবিল স্পেসগুলি কীভাবে ডিস্কের স্থান বাঁচাতে পারে?
এটা না. যদি কিছু হয় তবে এটি কিছুটা ডিস্ক ব্যবহার বাড়িয়ে তোলে।
পরীক্ষার জন্য আমার কাছে একটি 60 জিবি ডাটাবেস নেই, তবে আমার "পল্ট্রি" ব্যক্তিগত ডেটাবেস যা আমার ওয়ার্ডপ্রেস ইনস্টলেশন এবং ব্যক্তিগত ব্যবহার এবং বিকাশের পরীক্ষার জন্য কয়েকটি ছোট টেবিলের শেয়ারের টেবিল-স্পেস ব্যবহার করার সময় ~ 30MB এ ওজন করেছে। এটিকে ফাইল-প্রতি-সারণিতে রূপান্তরিত করার পরে, এটি ফুল B 85 এমবিতে পরিণত হয়েছে। এমনকি সমস্ত কিছু বাদ দিয়ে এবং পুনরায় আমদানি করেও এটি> 60 এমবি ছিল।
এই বৃদ্ধি দুটি কারণের কারণে:
এর জন্য নিখুঁত ন্যূনতম আকার ibdata1
হ'ল কোনও কারণে 10MB, এমনকি যদি আপনার information_schema
এটিতে সঞ্চয় না করে থাকে তবে।
একটি ভাগ করা টেবিল-স্পেস সহ কেবল ibdata1
ফাইলের স্বাক্ষর, মেটা-ডেটা ইত্যাদির মতো ওভারহেড থাকে তবে প্রতি টেবিলের সাথে প্রতিটি স্বতন্ত্র .ibd
ফাইলে সমস্ত থাকে। এর অর্থ হ'ল মোট (এমনকি একটি কাল্পনিক <10MB সহ ibdata1
) কমপক্ষে কিছুটা বড় হবে:
GetTotalSizeofOverhead() * GetNumTables()
স্পষ্টতই এগুলি বড় পরিমাণে বৃদ্ধি পাবে না (যদি না আপনি কোনও হোস্ট ব্যবহার করেন যা আপনার ডাটাবেসের আকারকে সীমাবদ্ধ করে না বা ফ্ল্যাশ ড্রাইভ ইত্যাদিতে এগুলি সঞ্চয় করে) তবে তা তবুও বৃদ্ধি পাবে এবং ( প্রতিটি ) টেবিলটি ফাইলটিতে স্যুইচ করার মাধ্যমে -per-টেবিল আপনি সঙ্কুচিত করতে পারেন ibdata1
10MB নিচে সামগ্রিক মোট অপরিবর্তনীয়ভাবে হতে হবে আরো তুলনায় এটি ছিল।