• 1 رای - 5 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
مقایسه فنی دو انجین مشهور MyISAM و InnoDB از علم تا عمل
#1
مقاله ای از وب سایت شرکت اوراکل ضمیمه این پست شده که حاوی یک مقایسه تکنیکی و بنچ مارک علمی این دو انجین.
دلیل اینکه این مقاله را براتون گذاشتم این بود که می خواستم عنوان این پست را براتون پر رنگ تر کنم.
در مقاله بین دو این انجین بنچ مارکهای کاملا فنی اجرا شده نکته مهمی که ممکن هست نادیده گرفته بشه توان سخت افزاری این بنچ مارک است.


توجه: اگر در پروژه ای خاص بر روی توان سخت افزاری پائین پروژه تون رو هاست کردین یا پروسه سنگینی روی سرور قرار اجرا بشه هرگز از innodb استفاده نکنین!!!

موتور innodb با بهره گیری از سخت افزار خصوصاً RAM و CPU باعث بهبود عملکرد در اجرای کوئری ها و نان کوئری ها بر روی MySQL می شه و در عمل این بهبود عملکرد اونقدر بهتر از Myisam هست که به هیچ وجه جای شکی برای شما باقی نمی ذاره که گزینه درست innodb هست مگر در مورادی که که امکان خاصی مورد نیاز شما باشه.
اما این نکته را فراموش نکنید که اگر توان پردازشی محدودی در اختیار دارید یا به طور کلی پردازنده شما مشغول انجام پروسه دیگری است به هیچ وجه innodb را حتی بر روی سرور خود فعال هم نکنید! تا شاهد کاهش بار صف پردازش های CPU باشد


فایل‌های پیوست
.pdf   Wp_MySQL-5.5_InnoDB-MyISAM.en.pdf (اندازه 785.76 KB / تعداد دانلود: 39)
  پاسخ
#2
البته رامین جان همونطور که خودت هم گفتی این توان محدودی که در اختیار هست. اونقدرها هم نیاز نیست. innodb با داشتن حداقل ۲۵۶ مگابایت برای innodb_buffer_pool_size خیلی کارایی بهتری نسبت به myisam خواهد داشت. هر چقدر این عدد بزرگتر باشه mysql رم بیشتری رو در اختیار خودش می گیره و حتی اگر درخواستی هم نباشه این رم رو آزاد نمی کنه. من تا ۶ گیگ رو کانفیگ کردم براش. به شدت بار روی سی پی یو رو کاهش میده و به درخواستها سریعتر پاسخ میده (روی این سرور ۶ هزار درخواست در ثانیه رو تونست جواب بده. البته روی XtraDB)
البته من پیشنهادم اینه اگر دسترسی دارین بر روی سرورها به جای innodb از XtraDB استفاده کنین. بسیار بهینه تر عمل می کنه.
  پاسخ
تشکر شده توسط : molana hosseintdk775 ali786
#3
بله امیدوارم مطلب رو دوستان اشتباه متوجه نشده باشن لازم نیست 36 پردازنده و ده ها گیگ رم داشته باشین منظور در این است که مدتی قبل برای یک پروژه خاص که قرار بود پردازشهای سنگینی برروی سرور انجام بشه. (ری اینکد و رَر کردن) توان پردازشگر و رم به شدت مورد نیاز بود و علی رغم توان سخت افزاری بالا با مشکلات زیادی مواجه شدیم با سوئیچ کردن به MyISAM مشکلات به شکلی معجزه آسا رفع شد.
دوستان توجه به این نکته داشته باشند اگر برای شما استفاده کمتر از حافظه و پردازشگر مد نظر است و NonQuery های اجرایی تعدادشان خیلی خیلی بیشتر از Query ها نیست بهتر است از انجین Innodb استفاده نکنید

در محیط پروداکشن ترجیح بر این هست که اگر پروژه خاص منظوره نیست از انجین های متدوال تر استفاده بشه. خودت دلایلش رو می دونی Wink
  پاسخ
تشکر شده توسط :
#4
رامین جان در innodb ممکنه به مشکلاتی بر خورد بکنید که آپشنهای بسیار زیادی برای بهینه کردن وجود داره. به نظرم آپشن سوئیچ بهMyISAM بدون تحلیل دلیل کندی کار اشتباهی هست. مگر اینکه تحلیل بشه و مشکل پیدا بشه. در innodb مخصوصا نخسه 5.5 و حتی نسخه 5.4 آپشنهای مدیریتی زیادی وجود داره که کمک می کنه انجین خیلی سریعتر جواب بده.
در مورد بند آخرت منظورت رو نفهمیدم منظورت اینه به جای innodb از myisam استفاده کنیم. که من پیشنهادم innodb هست که الان هم انجین پیشفرض innodb هست.
اگر هم منظورت اینه به جای XtraDB از innodb استفاده کنیم چون متداول تره اینجا پیشنهاد من XtraDB هست. که برای این هم دلایل زیادی دارم
۱- XtraDB همون InnoDB هست (از InnoDB گرفته شده) با آپشن های مدیریت زیاد . اصلا وقتی که نصب می کنیم دیگه InnoDB نداریم. XtraDB داریم با اسم InnoDB. توسعه دهنده اصلا براش مهم نیست که الان XtraDb هست یا InnoDb
۲- در XtraDB آپشن buffer_pool خیلی بهینه تر شده و I/O و سی پی یو کمتری مصرف می کنه
۳- در XtraDB از Fast recovery پشتیبانی می کنه
۴- IO Path در XtraDB بهینه شده
http://www.mysqlperformanceblog.com/2010...t-storage/
و آپشن های دیگه

من روی هر هاستینگ و سروری که دارم percona نصب می کنم که انجینش به جای InnoDB از XtraDB هست و همیشه بهبودی در کارایی و مصرف رم کمتر و پردازش کمتر رو درش دیدم.
الان همین سرور هم و حتی mybb هم روی این انجین اومده بالا
  پاسخ
تشکر شده توسط :
#5
وقتی insert و update ها تعدادشون زیاد باشه لزوماً innodb بهتره به خاطر همون مسئله تیبل لاک که خودت می دونی اما اگه حجم ورود/ویرایش اطلاعات کم باشه و حجم قرائت اطلاعات زیاد و همون مفروضاتی که شرحش شد وجود داشته باشه اونجا بهتره از Innodb استفاده نشه.
آپشن های مدیریتی innodb زیاد هستن اما خودت خوب می دونی که کانفیگ دقیق و مطابق نیاز نه فقط در این مورد که به طور کلی در مدیریت سرور نیاز به تجربه زیادی داره و غالبا متخصصین خوب در دسترس نیستن برای همین نیاز رو اونطوری رفع کردیم و جواب گرفتیم
  پاسخ
تشکر شده توسط : admin
#6
نقل قول:وقتی insert و update ها تعدادشون زیاد باشه لزوماً innodb بهتره به خاطر همون مسئله تیبل لاک که خودت می دونی اما اگه حجم ورود/ویرایش اطلاعات کم باشه و حجم قرائت اطلاعات زیاد و همون مفروضاتی که شرحش شد وجود داشته باشه اونجا بهتره از Innodb استفاده نشه.

با تنظیمات پیشفرض بله myisam می تونه سریعتر جواب بده (البته بحث امنیت اطلاعات و crash safe نبودن myisam هم هست. و همنطور پشتیبانی نکردن از کلید خارجی و موارد دیگخ) اما اگر tuning بشه قطعا سریعتر جواب میده.

در مورد بند آخرت کاملا باهات موافقم. متاسفانه در ایران متخصصانی که کامل به این آپشنها تسلط داشته باشن وجود نداره و این اپشن ها هم همینطور در حال زیادتر شدن هستن. البته دلایل دیگه مثل نبود ابزارهایی جهت آنالیز کوئری ها و لاگها (البته به جز نسخه انترپرایز) هم یکی از دلایلش هست.
خوشبختانه percona در این زمینه کارهای مفیدی رو انجام داده. مثل محصول
http://www.percona.com/software/percona-...g-plugins/
http://www.percona.com/software/percona-toolkit/
http://www.percona.com/software/mysql-in...ery-tools/

که پیشهاد می کنم دوستان یه مطاله ای روی این محصولات داشته باشن
  پاسخ
تشکر شده توسط : zoghal voltan
#7
Innodb خداست. اما بدون کانفیگ جهنم می تونه به پا کنه. وحید کاملا درست میگه وقتی کانفیگ کنیش هیچ از myisam کم نمیاره.


راستی full text از چه ورژنی به Innodb اضافه شده؟؟
  پاسخ
تشکر شده توسط :
#8
تو آخرین نسخه دارن اضافه می کنن اما من ترجیح می دم کلا از فول تکست مای اسکیول رو هیچ انجینی استفاده نکنم خاطرات بدی ازش دارم.
رو کارهای کم ترافیک Lucene خوب جواب می ده رو پرترافیک هم وحید sphinx رو پیشنهاد کرد خودم try نکردم ببینم چی از کار در میاد ولی رو پروژه جدیدم احتمالا بزودی نیاز پیدا کنم. گرچه کار وحید سنگین بوده اما نمی دونم ترافیک بالا هم بوده یا نه بعید می دونم رو ترافیک بالا تست کرده باشه
  پاسخ
تشکر شده توسط : zoghal
#9
(۱۳۹۱ تير ۲۹, ۱۰:۳۳ ب.ظ)ramram نوشته: تو آخرین نسخه دارن اضافه می کنن اما من ترجیح می دم کلا از فول تکست مای اسکیول رو هیچ انجینی استفاده نکنم خاطرات بدی ازش دارم.
رو کارهای کم ترافیک Lucene خوب جواب می ده رو پرترافیک هم وحید sphinx رو پیشنهاد کرد خودم try نکردم ببینم چی از کار در میاد ولی رو پروژه جدیدم احتمالا بزودی نیاز پیدا کنم. گرچه کار وحید سنگین بوده اما نمی دونم ترافیک بالا هم بوده یا نه بعید می دونم رو ترافیک بالا تست کرده باشه

منم پیشنهاد نمی کنم از full text استفاده بشه. البته innodb که روی نسخه ۵.۶ هم اومده گرچه از نظر بهینه بودن بهتر از myisam هست ولی از نظر امکانات هنوز خیلی کار داره.

من sphinx رو روی ترافیک بالا تست کردم. به شدت سرعت بالایی رو داره.
  پاسخ
تشکر شده توسط :
#10
(۱۳۹۱ تير ۳۰, ۰۱:۲۸ ق.ظ)admin نوشته:
(۱۳۹۱ تير ۲۹, ۱۰:۳۳ ب.ظ)ramram نوشته: تو آخرین نسخه دارن اضافه می کنن اما من ترجیح می دم کلا از فول تکست مای اسکیول رو هیچ انجینی استفاده نکنم خاطرات بدی ازش دارم.
رو کارهای کم ترافیک Lucene خوب جواب می ده رو پرترافیک هم وحید sphinx رو پیشنهاد کرد خودم try نکردم ببینم چی از کار در میاد ولی رو پروژه جدیدم احتمالا بزودی نیاز پیدا کنم. گرچه کار وحید سنگین بوده اما نمی دونم ترافیک بالا هم بوده یا نه بعید می دونم رو ترافیک بالا تست کرده باشه

منم پیشنهاد نمی کنم از full text استفاده بشه. البته innodb که روی نسخه ۵.۶ هم اومده گرچه از نظر بهینه بودن بهتر از myisam هست ولی از نظر امکانات هنوز خیلی کار داره.

من sphinx رو روی ترافیک بالا تست کردم. به شدت سرعت بالایی رو داره.


سلام

وحید جان میشه آموزش کانفیگ کردن innodb رو واسم بگی؟ اینکه چه کار باید کرد چه پارامتر هایی رو برای چی باید تغییر داد و.......................
  پاسخ
تشکر شده توسط :


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان