PDA

View Full Version : MySQL Storage Engines



mehdiangal
جمعه 02 شهریور 1386, 22:54 عصر
سلام دوستان.:لبخندساده:
میخواستم درباره ی تفاوت های storage engine های MySQL بدونم . یعنی با هر کدوم چه کارایی رو میشه انجام داد که با بقیه نمیشه و برای چه کارهایی از کدوم استفاده کنیم . storage engin های مورد نظر من که میخوام دربارشون بدونم اینا هستن : MyISAM , InnoDB , MEMORY . لطفا توضیحات جزیی نباشه . InnoDB از همه مهمتره

تشکر . به امید دیدار !

oxygenws
جمعه 02 شهریور 1386, 22:59 عصر
مهم ترین خاصیت innodb پشتیبانی از transaction است.
مهم ترین خاصیت memory هم سرعت است (اما این جداول موقتی هستند و با خاموش شدن سرور از بین می رن)
مهم ترین خاصیت myisam هم سرعتش و دم دستی بودنش است (مخصوصا نسبت به innodb)

mehdiangal
جمعه 02 شهریور 1386, 23:16 عصر
مهم ترین خاصیت innodb پشتیبانی از transaction است.
مهم ترین خاصیت memory هم سرعت است (اما این جداول موقتی هستند و با خاموش شدن سرور از بین می رن)
مهم ترین خاصیت myisam هم سرعتش و دم دستی بودنش است (مخصوصا نسبت به innodb)

سلام . ممنون از جواب سریعتون . من بالا نوشته بودم لطفا توضیحات جزیی نباشه منظورم این بود که مختصر نباشه !! :دی اشباه نشه .
خط اول و دوم رو میدونستم .
منظور شما از خط سوم حرفتون اینه که MyISAM از InnoDB سریعتره ؟
منظورتون از دستی بودن MyISAM چیه ؟
ممنون.

oxygenws
جمعه 02 شهریور 1386, 23:20 عصر
آره، سریع تره، توی کار های small و شاید medium. دم دستی هم تقریبا به همین مورد اشاره داره :)

برای توضیخات تکمیلی هم اینو بخون:
http://dev.mysql.com/doc/refman/5.0/en/storage-engines.html

oxygenws
جمعه 02 شهریور 1386, 23:25 عصر
ضمنا innodb از row-locking پشتیبانی می کنه که حداقل می دونم myisam فقط table-lock داره (نمی دونم memory چی داره!! ولی به هر حال اون زیاد مهم نیست، چون سرعتش خیلی خیلی زیاده!)

mehdiangal
جمعه 02 شهریور 1386, 23:52 عصر
ممنون . ولی من انگلیسیم در حدی نیست که بخوام اینهمه صفحه رو بخونم . یه خلاصه فارسی اگه از این صفحه بدید ممنون میشم : http://en.wikipedia.org/wiki/InnoDB زیاد نیست 10 خطه حدودا .
بعد در مورد Lock شدن جدول و سطر هم یکم توضیح بدید . یعنی اینکه به چه دردی میخوره ! ( اصلا کلا چیه !)

حالا برای مثال . اگه یه جدول داشته باشیم به اسم ! Users که یک میلیون یوزر توش هست و طبیعتاً SELECT هاش بیشتر از UPDATE ها هست (چون معمولا لوگین کردن یوزر ها از ثبت نام بیشتره) . از کدوم بهتره استفاده بشه . توضیح بدید لطفا .
تشکر

oxygenws
شنبه 03 شهریور 1386, 00:57 صبح
بعد در مورد Lock شدن جدول و سطر هم یکم توضیح بدید . یعنی اینکه به چه دردی میخوره ! ( اصلا کلا چیه !)
وقتی یه داده ای توی جدول به روز میشه یا ... بقیه باید پشت صف بمونند تا کار اون کوئری تموم بشه تا اجرا بشن.
حالا این لاک شدن توی myisam در سطح کل جدوله و در innodb در سطح فقط همون سطر هایی که داره به روز میشن یا ...

در این موردی که گفتی، زیاد فرقی بین myisam و innodb نمی بینم.

mehdiangal
شنبه 03 شهریور 1386, 11:42 صبح
مرسی . اینجوری که من تا اینجا فهمیدم InnoDB بهتره (transaction & row lock) . با innodb میشه insert های همزمان انجام داد و چیزی هم از myisam کمتر نداره . درسته ؟
ولی اینی که قبلا گفتی myisam سرعتش بیشتره بدجوری گزاشتتم تو کف ! سرعت چیش بیشتره ؟ تو چه کاری سریع تره ؟

یه سوال دیگه : تو phpMyAdmin ی رو کامپیوترم نصب هست وقتی که وارد یه جدول MyISAM میشم که هیچی ! ولی وقتی وارد یه جدول InnoDB میشم , بالا , کنار اسم جدول نوشته : "InnoDB free:8192 kB" . این یعنی چی ؟

oxygenws
شنبه 03 شهریور 1386, 12:37 عصر
نگاه کن، همونطور که خودت هم اول گفتی، هر چیزی رو برای کاری ساختند... مسلما شخم زدن زمین با یک ماشین مدل بالا احمقانه است!

همینطور، مثلا استفاده کردن از پایگاه دادهء oracle برای طراحی یک سایت ساده برای یک فروشگاه کوچیک و حتی متوسط احمقانه است!

به نظر می رسه جایی که تراکنش نداری، نیازی به استفاده از innodb نیست. چون myisam هم memory footprint کمتری داره و در کل سرعت پردازشش سریع تره (فارغ از بدی های table-locking)

البته اینها نظرات منه، در این طور مسایل هر کس نظر خودش رو داره چون مرز مشخصی بین این مسایل نیست :)

در مورد سوال دومت هم نمی دونم.

mehdiangal
شنبه 03 شهریور 1386, 14:11 عصر
1-اگه من بخوام از تراکنش استفاده کنم مثلا یه جدول برای یوزرها داریم که اطلاعات لوگین و .... توشه. این جدول رو بزارم MyISAM و یه جدول دیگه بسازم برای مثلا پولی که تو حساب یوزر ها هست و موتورشو InnoDB بزارم و به جدول یوزرها ربطش بدم . این فکر خوبیه یا نه ؟؟!!

2-در مورد INSERT و ,UPDATE های همزمان . MyISAM که پشتیبانی نمیکنه .. ؟
memory footprint -3 چیه ؟؟


مثلا استفاده کردن از پایگاه دادهء oracle برای طراحی یک سایت ساده برای یک فروشگاه کوچیک و حتی متوسط احمقانه است!
4 - استفاده از MySQL برای یه سایت خیلی بزرگ چی ؟ احمقانست ؟ (اگه اره از چه نظر؟)

oxygenws
شنبه 03 شهریور 1386, 14:21 عصر
۱- آره... البته فکر کنم باید هر دو طرف رابطه رو innodb بذاری.
۲- نه، اما سرعت خیلی بالا است :)
۳- مصرف حافظه
۴- در مورد سایت ها یا سیستم های خیلی خیلی بزرگ، شاید مشابه اطلاعات مردم ایران که شاید روزی چند میلیارد تراکنش داشته باشه، یا اطلاعات بانکی یا ... به نظرم تنها انتخاب مناسب اوراکل باشه :)

mehdiangal
یک شنبه 04 شهریور 1386, 00:12 صبح
ممنون . نتیجه ی جدید !! : InnoDB فضای دیسک و مموری زیادی میخواد و همونطور که گفتی برای کارهای حتی متوسط هم لازم نیست (البته اگه احتیاجی به تراکنش نباشه) . تنظیماتشم نصبت به myisam پیچیده تره و ... . من تصمیم گرفتم فعلا فقط یکی از جدولامو innodb بزارم و بقیه رو myisam .

یه سوالم دارم : در هرکدوم از مورد های زیر چه اتفاقی میفته (در حد شک داشتنه!)(MyISAM)
1. چند درخواست INSERT یا UPDATE همزمان.
2.چند SELECT همزمان !
3.SELECT همزمان با INSERT یا UPDATE .

یه چشمه ! از InnoDB در سایت MySQL (برای رفع خستگی :d)


InnoDB is used in production at numerous large database sites requiring high performance.
The famous Internet news site Slashdot.org runs on InnoDB. Mytrix, Inc. stores over 1TB of data in
InnoDB, and another site handles an average load of 800 inserts/updates per second in InnoDB

oxygenws
یک شنبه 04 شهریور 1386, 00:50 صبح
با اطلاعاتی که من دارم و به طور پیشفرض:

۱- هر کوئری insert و update جدول رو قفل می کنه.
۲- مشکلی نیست.
۳- select انجام نمی شه تا کار اونها تموم بشن.

ضمن اینکه میشه اولویت insert و update رو پایین آورد... راهنمای mysql رو در مورد این دستورات می تونی مطالعه کنی.

parsajax
چهارشنبه 22 اردیبهشت 1389, 10:13 صبح
طبق تجربه من وقتی جدول ها از نوع innodb باشه وقتی سرور ریسیت میشه مقدار auto_increment 0 میشه. و باید حتما جداول optimize بشن حالا نمیدونم این از مشکل سرور هست یا واقعا همینطوریه