মাইএসকিউএল কোয়েরি দ্বারা সম্পাদিত আই / ও অপারেশনগুলি কীভাবে অনুমান করা যায়?


13

অ্যামাজনের আরডিএসে, আপনি প্রতি 1 মিলিয়ন আই / ও অনুরোধের জন্য প্রায় $ 0.10 প্রদান করেন। আমি খুব কম ট্র্যাফিক ডাটাবেসের জন্য I / O অনুরোধের একটি খুব বেশি সংখ্যক (কয়েক হাজারে) লক্ষ্য করেছি। এটি দেখে আমি আরও কিছু গবেষণা করেছিলাম এবং এই প্রশ্নটি পেয়েছি যা বর্ণনা করে যে ,000,০০০ ব্যবহারকারীর ওয়েবসাইটের জন্য, তিনি এক মাসে ৮০০ মিলিয়ন আই / ও অনুরোধ উত্পন্ন করছিলেন, যার জন্য তার জন্য প্রায় $ 80 / মাসে ব্যয় হবে।

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

উত্তর:


2

কমিউনিটি উইকি উত্তরটি রায়মন্ড নিজল্যান্ডের প্রশ্নের মন্তব্যে উত্পন্ন হয়েছে

ব্যবহার EXPLAIN। এইভাবে আপনি দেখতে পাচ্ছেন যে কোনও প্রশ্নের জন্য মেয়ের ডিস্ক আইও দরকার কিনা। অতিরিক্ত "অস্থায়ী ব্যবহার" বা "" অস্থায়ী ব্যবহার করে কলামে আপনাকে এড়াতে হবে ; ফাইলসোর্ট ব্যবহার করে (নোট করুন ফাইলসোর্টটি একটি বিভ্রান্তিমূলক নাম: যদি ফলাফল সেটটি মেমরির সাথে ফিট করে তবে কুইকোর্টটি মেমরিতে চালিত হয়) "।

এটি সম্ভবত সাবকিউরিজ / ইউনিয়ন / দ্বারা / গ্রুপ দ্বারা অর্ডার দ্বারা সৃষ্ট ... সম্ভবত যদি আপনার ফলাফলটি বড় হয় এবং মাইআইএসএএম ডিস্ক-ভিত্তিক অস্থায়ী টেবিল তৈরি হয়, এবং আপনাকে ফলাফলটি বাছাই করতে হবে, আপনি ফলাফলটি বাছাই করছেন আইও পড়ার উপর ভিত্তি করে সেট পড়ে এবং আইও কুইকসোর্ট অ্যালগরিদমের সাথে লেখেন।

ইন মাইএসকিউএল মধ্যে অভ্যন্তরীণ অস্থায়ী টেবিল ব্যবহার আপনি পড়তে পারেন যখন মাইএসকিউএল একটি ডিস্ক-ভিত্তিক MyISAM সারণি তৈরি করতে হবে। হতে পারে আপনি ব্যবহার করতে পারেন avg_row_length * সারি (যদিও মনে রাখবেন যে সারি যদি গাদা মধ্যে ফলাফলের তড়কা চেক করতে ব্যাখ্যা থেকে মান InnoDB ইঞ্জিন সঠিক নয়)। দেখুন দেখান টেবিল স্থিতি সিনট্যাক্স

I / O অনুরোধগুলি এড়াতে সাধারণভাবে InnoDB বা মাইআইএসএএম আরও ভাল?

InnoDB সারণী ডেটা এবং সূচী ডেটা বাফার করবে, যেখানে মাইআইএসএএম কেবল সূচি কী বাফার করবে। কলামের অতিরিক্ত ব্যাখ্যা না করে "সূচক ব্যবহার করা" না বললে টেবিলের ডেটাতে I / O প্রয়োজন হয়।

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

ছোট টেবিলগুলির জন্য, আপনি সাধারণত একটি ডিস্ক সন্ধানে একটি সারি খুঁজে পেতে পারেন (কারণ সূচকটি সম্ভবত ক্যাশে হয়েছে)। বড় টেবিলগুলির জন্য, আপনি অনুমান করতে পারেন যে, বি-ট্রি সূচকগুলি ব্যবহার করে আপনার একটি সারি সন্ধান করার জন্য এই অনেক সন্ধান দরকার:

log(rows) / log(index_block_length / 3 * 2 / (index_length + data_pointer_length)) + 1

ইনোডিবি সূচকগুলি আরও বড় কারণ এটি প্রাথমিক / ইউনিক কী থেকে ডেটা কে কে ইনডেক্সে সঞ্চয় করে। এটি দ্রুত এবং এর চেয়েও কম আইও সন্ধান দরকার তবে আপনি ইনোডিবি ডেটা বা সূচিগুলি সংকোচন করতে পারেন।

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