ডেটা পড়ার জন্য মাইআইএসএএম


10

আমার প্রায় 1 বিলিয়ন সারি সহ একটি টেবিল রয়েছে এবং এর 98% নিবিড় পাঠ রয়েছে।

আমি বিভিন্ন স্টোরেজ ইঞ্জিন (মাইআইএসএএম এবং ইনোডিবি) সহ ডাটাবেস টিউন করার চেষ্টা করেছি

তারপরে পারফরম্যান্সটি দেখতে কয়েকটি পরীক্ষা চালিয়েছে

যে ধারাটিতে আমার কাছে একটি প্রাথমিক কী আইডি ছিল এবং এটি মনে হয়েছিল যে মাইআইএসএএম কী ক্যাশে স্টোরগুলি তার বাফারে সমস্ত সূচক লোড করে, মাইআইএসএএম ব্যবহার করে ইনোডিবি-র চেয়ে প্রায় 2 গুণ বেশি দ্রুত বলে মনে হয়েছিল

তবে InnoDB এর কাছে মনে হচ্ছে ধীর !! ইন্ডিডিবি সূচকগুলি প্রাক লোড করতে কোনও বাফার ব্যবহার করে না?


প্রশ্নটি বন্ধ করতে ভোট দেওয়ার মতো কোনও ট্রিগার হ্যাপি মডারেটর তাদের প্রেরণাগুলি বিস্তারিতভাবে বর্ণনা করতে পারে?
পিকিউডি

আপনি কি প্রশ্নে থাকা ডাটাবেস এবং টেবিলের আকার সম্পর্কে কিছু ধারণা দিতে পারেন? ডিস্কে মোট আকার কার্যকর হবে। এছাড়াও, আপনি যে মেশিনটি চালাচ্ছেন তা কী?
ডেভ রিক্স

উত্তর:


6

মাইআইএসএএম বা ইনোডিবি-র বিষয়ে সিদ্ধান্ত নেওয়ার আগে আপনাকে উভয় স্টোরেজ ইঞ্জিনের উপর নজর রাখতে হবে প্রতিটি ক্যাশে কীভাবে হয় তার দিক থেকে

MyISAM

যখন পড়া হয়, একটি মাইআইএসএএম টেবিলের সূচকগুলি .MYI ফাইল থেকে একবারে পড়তে পারে এবং মাইআইএসএএম কী ক্যাশে ( কী_বফার_ আকারের আকার হিসাবে ) লোড করা যায় । আপনি কীভাবে মাইআইএসএএম টেবিল তৈরি করতে পারেন? এমআইডি দ্রুত পড়তে পারেন? এর সাথে:

ALTER TABLE mytable ROW_FORMAT=Fixed;

আমি আমার আগের পোস্টগুলিতে এ সম্পর্কে লিখেছিলাম

InnoDB

ঠিক আছে, ইনোডিবি সম্পর্কে কী? InnoDB কি অনুসন্ধানের জন্য কোনও ডিস্ক I / O করে? আশ্চর্যের বিষয় হ্যাঁ এটা করে !! আপনি সম্ভবত ভাবছেন যে আমি এটি বলার জন্য পাগল, তবে এটি একেবারে সত্য, এমনকি নির্বাচনী প্রশ্নের জন্যও । এই মুহুর্তে, আপনি সম্ভবত ভাবছেন "বিশ্বে ইনোডিবি কীভাবে অনুসন্ধানের জন্য ডিস্ক I / O করছে?"

এটি সবই এসিআইডি- অভিযোগ অভিযোগে ট্রানজেকশনাল স্টোরেজ ইঞ্জিন হয়ে ইনোডিবিতে ফিরে যায় । InnoDB জন্য অর্ডার লেনদেনগত হতে, এটা সমর্থন করেছেন Iমধ্যে ACID, যা বিচ্ছিন্নতা নয়। লেনদেনের জন্য বিচ্ছিন্নতা বজায় রাখার কৌশলটি এমভিসিসি, মাল্টিভেরিশন কনকুরিঞ্জি নিয়ন্ত্রণের মাধ্যমে করা হয় । সহজ কথায়, লেনদেনগুলি পরিবর্তনের চেষ্টা করার আগে ইনোডিবি কী ডেটা দেখতে দেখতে রেকর্ড করে। কোথায় রেকর্ড করা যায়? সিস্টেম টেবিল স্পেস ফাইলে, আইবডাটা 1 হিসাবে বেশি পরিচিত। এর জন্য ডিস্ক I / O প্রয়োজন

তুলনা

যেহেতু ইনোডিবি এবং মাইআইএসএএম উভয়ই ডিস্ক আই / ও করেন, তাই এলোমেলো কারণগুলি কোনটি দ্রুত নির্দেশ করে?

  • কলামের আকার
  • কলাম ফর্ম্যাট
  • চরিত্রের সেট
  • সংখ্যার মানগুলির ব্যাপ্তি (যথেষ্ট পরিমাণে বড় আইএনটি প্রয়োজন)
  • ব্লকগুলি জুড়ে বিভক্ত হওয়া সারিগুলি (সারি চেইন)
  • ডেটা ফ্র্যাগমেন্টেশন DELETEsএবং এর ফলে ঘটেUPDATEs
  • প্রাইমারি কী এর আকার (InnoDB এর একটি ক্লাস্টারড ইনডেক্স রয়েছে, যার জন্য দুটি মূল অনুসন্ধান প্রয়োজন)
  • সূচকের এন্ট্রিগুলির আকার
  • তালিকাটি চলছে ...

উপসংহার

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

যাইহোক, আমি 5 দিন আগে এই জাতীয় কিছু লিখেছিলাম: আমি কীভাবে মাইএসকিউএল এর জন্য একটি মেমরি সীমা নির্ধারণ করব?


ইতিমধ্যে সমস্ত ডেটা বাফার পুলে থাকা এবং কোনও সমকালীন ডেটা সংশোধন করার অনুরোধ নেই, তখন কি কেবল ইনডোডবে কোনও ডিস্ক রিড উত্পন্ন করে?
pQd

এটি আমার অনুমান যে প্রশ্নকারীর তার ডিবিতে 1 বিলিয়ন সারি রয়েছে, তাই তার পক্ষে এটি বাফার পুলের সমস্ত র‌্যামে ক্যাশ হওয়ার সম্ভাবনা নেই - তাই বাফার পুলের বাইরে এবং ডিস্কে ডেটা পেতে প্রয়োজনীয় পাঠক থাকবে?
ডেভ রিক্স

3

মাইআইএসএএম সর্বদা ইনডোডাবের চেয়ে অনেক বেশি দ্রুত চলবে যখন ডেটার বিষয়ে কোনও বিরোধ নেই। একই ট্যাবলেটটি আপডেট করার চেষ্টা করে একাধিক সেশন যুক্ত করা শুরু করুন, এবং খুব তাড়াতাড়ি ইনডোডব পারফরম্যান্সের সুবিধা পেয়ে যায়।

আপনি কীভাবে 2 ইঞ্জিনের জন্য সিস্টেম টিউন করছেন তা খুব আলাদা।

বিভিন্ন ইঞ্জিনের অস্তিত্বের কারণ হ'ল বিভিন্ন কাজের চাপ / অ্যাক্সেসের ধরণগুলি বিদ্যমান।


2

আপনাকে 'ওয়ার্ম আপ' ইনোডাব করতে হবে। উদাহরণস্বরূপ অ্যাক্সেস লগগুলি খেলানো বা কিছু স্মার্ট ক্যোয়ারী চালানো যা সূচক থেকে প্রতিটি মান স্পর্শ করবে।

কটাক্ষপাত এখানে বা এখানে

আমি আশা করি আপনি ইনোডাবের জন্য ডিফল্ট মাইএসকিএল সেটিংস ব্যবহার করবেন না - এগুলি 2000 ডলার থেকে হার্ডওয়ারের জন্য উপযুক্ত ছিল।


আমি ডিফল্ট কনফিগারেশনে পরিবর্তন করেছি, প্রায় 30 বার প্রায় এক বার ক্যোয়ারী চালিয়েছি, তবে প্রায় একই ফলাফল তৈরি করেছি। কয়েকটি চেষ্টা করার পরে এটি দ্রুত ছিল, তবে মাইআইএসএএম এর চেয়ে ধীর ছিল, মারিয়াডিবিও ব্যবহার করেছে (সর্বশেষ সংস্করণ)
আকাশ

1

এই সাইটটি দেখুন, এটিতে খুব দরকারী তথ্য রয়েছে:

http://www.mysqlperformanceblog.com/2007/11/01/innodb-performance-optimization-basics/

http://www.mysqlperformanceblog.com/2007/11/03/choosing-innodb_buffer_pool_size/

আপনি নিজের ফাইল সিস্টেমে টিউনও করতে পারেন। সর্বোত্তম রৌদ্র এবং সুইডথ মান সহ এক্সএফএসে আমার একটি ভাল পারফরম্যান্সের ফলাফল রয়েছে (অবশ্যই আপনি যদি রেড ব্যবহার করেন)


0

মারিয়াডিবিতে আরও ইনোডিবি টিউন করার পরে, আমি innodb_buffer_pool_sizeআমার ইনোডিবি ডাটাবেস আকারে বাড়িয়েছি , যেহেতু ইনোডিবি সারিগুলি দ্রুত আনতে শুরু করেছে

আমি মনে করি আপনার ডাটাবেসের প্রয়োজন অনুসারে InnoDB টিউন করা বেশ গুরুত্বপূর্ণ

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