گروه آموزشی مجموعه فاوا
در نوشتههای قبل افزایش سرعت با ممکشد را شرح دادیم. در این نوشته با یکی دیگر از راههای افزایش سرعت پایگاهداده در لینوکس آشنا میشویم.
بعضی از برنامهها و سرویسها بصورت متناوب و به کرات فایلها و دایرکتوریها را میخوانند (مانند سرویس MYSQL و سایر برنامههای مدیریت پایگاه داده). با توجه به اینکه خواندن و نوشتن روی هارد زمانبرترین عمل در سرور است، خواندن، بازنویسی و ویرایش فایلها در برنامههایی مانند پایگاه داده سرعت دسترسی به سایت یا برنامه را به شکل قابل توجهی کاهش خواهد داد.
فایلها و دایرکتوریها در فایل سیستم ext2 دارای خصوصیتی هستند که تاریخ خواندن فایل را نگه میدارد، و هر زمان تغییری در فایل یا دایرکتوری ایجاد شود این تاریخ به زمان جاری تغییر میکند، به این ویژگی atime میگویند. گرچه پروسه بهروزرسانی تاریخ خواندن فایل بسیار کوتاه و در کمتر از هزارم ثانیه است اما چنانچه تعداد دفعات دسترسی به فایلها بسیار بالا باشد (مانند پایگاههای داده) مجموع زمان اجرای این پروسههای کوچک باعث اتلاف منابع سختافزاری (RAM و CPU) افزایش بارِهارد و کاهش چشمگیر سرعت سایت و برنامهها در سرور میشود.
جهت رفع این مشکل باید قابلیت ثبت تاریخ خواندن فایل و دایرکتوری را غیر فعال کنیم.
برای غیر فعال کردن atime یک «فایل» از دستور chattr به شکل زیر استفاده میکنم.
|
1
|
chattr+Afile
|
برای غیر فعال کردن atime یک «دایرکتوری» از دستور chattr به شکل زیر استفاده میکنم.
|
1
|
chattr-R+A/dir/
|
چنانچه نیاز باشد «تمام فایلها و دایرکتوریهای یک درایو خاص» از atime استفاده نکنند باید noatime را به شکل زیر به فایل /etc/fstab اضافه کنیم.
|
1
|
/dev/sda1 / ext2 defaults,noatime 1 2
|
به عنوان مثال با این خط atime در پارتیشن / غیر فعال میشود، در نتیجه سرعت دسترسی به این پارتیشن به شکل قابل قبولی افزایش مییابد.
پس از ویرایش فایل برای اعمال تغییرات پارتیشنها را دوباره Mount (مونت) میکنیم.
|
1
|
mount-a
|
|
1
|
/dev/sda2 /var ext4 defaults,noatime 0 0
|
|
1
|
cat/proc/mounts
|
وجود پارامترهای atime ،noatime و relatime در هر خط نشان دهندهی فعال بودن آن خصوصیت در پارتیشن است.
لینوس توروالدز -هماهنگ کننده هسته لینوکس- استفاده از relatime را نسبت به سایر روشها پیشنهاد کرده، همچنین اعلام کرده بر اساس برنامهریزیها در نسخههای بعدی هسته لینوکس، relatime به صورت پیشفرض در آن -در حال حاظر این امکان دربرنامههای سطح کاربر ماننده mount پیاده سازی شده است- پیاده سازی خواهد شد.
The “relatime” thing that David mentioned might well be very useful, but it’s probably even less used than “noatime” is. And sadly, I don’t really see that changing (unless we were to actually change the defaults inside the kernel).