شهریار بیات
شهریار بیات
خواندن ۳ دقیقه·۳ ماه پیش

مدیریت IO threads در دیتابیس mariadb

مدیریت IO threads در دیتابیس mariadb
مدیریت IO threads در دیتابیس mariadb


توی نسخه ۱۰.۱۱ دیتابیس mariadb، یه تغییر خیلی مهم و جالب اتفاق افتاده که مربوط به یه سری فرآیندهای پس‌زمینه‌ای (background) هست که توی دیتابیس اتفاق می‌افته. این فرآیندها شامل نوشتن و خوندن داده‌ها از دیسک هستن که با استفاده از یه سری IO threads انجام می‌شن.

حالا ماجرا از این قراره که توی نسخه‌های قبلی mariadb، این تنظیمات مربوط به IO threads ، یعنی همون‌هایی که به نوشتن و خوندن داده‌ها از دیسک کمک می‌کنن، ثابت بودن و اگه می‌خواستی تنظیماتشون رو تغییر بدی، حتماً باید سرویس دیتابیس رو ری‌استارت می‌کردی. این یعنی اگه وسط کار بودی و نیاز داشتی که مثلاً تعداد  IO threads  رو برای بهتر شدن عملکرد تغییر بدی، باید یه وقفه توی کار ایجاد می‌کردی که این خودش می‌تونست دردسرساز بشه.

اما توی نسخه ۱۰.۱۱، این داستان کلاً تغییر کرده. یعنی دیگه نیازی به ری‌استارت نیست! حالا می‌تونی تنظیمات مربوط به این threads ها رو به‌صورت داینامیک تغییر بدی. مثلاً اگه دیدی که سرور خوب کار نمی‌کنه و می‌خوای تعداد  IO threads  رو بیشتر کنی، بدون اینکه نیاز به ری‌استارت باشه، می‌تونی این کار رو انجام بدی. این ویژگی جدید به شدت به بهبود عملکرد و انعطاف‌پذیری سیستم کمک می‌کنه.




اما بزارین ببینیم دقیقاً چی میشه؟

خب، بزار یکم فنی‌تر به قضیه نگاه کنیم. توی mariadb دو تا متغیر مهم داریم به اسم‌های innodb_write_io_threads و innodb_read_io_threads. اینا همون متغیرهایی هستن که تعداد  IO threads ها رو تعیین می‌کنن.  IO threads ها یه سری فرآیندهایی هستن که توی بک گراند، داده‌ها رو از حافظه روی دیسک می‌نویسن یا برعکس از روی دیسک میخونن و به حافظه انتقال میدن. هر چقدر تعداد این threads ها بیشتر باشه، توانایی سرور برای انجام هم‌زمان این کارها بیشتر میشه. اما از اون طرف، اگه تعدادشون خیلی زیاد باشه، ممکنه باعث افزایش مصرف منابع بشه. پس باید تو بهینه ترین حالت ممکن نگهشون داریم.

توی نسخه‌های قبلی، این متغیرها ثابت بودن و اگه می‌خواستی تغییرشون بدی، باید کل سرور رو ری‌استارت می‌کردی. این یعنی هر بار تغییر، یه وقفه توی کارهای سرور ایجاد می‌کرد. اما حالا توی نسخه ۱۰.۱۱، این متغیرها داینامیک شدن. یعنی بدون ری‌استارت، می‌تونی تغییرشون بدی و فوراً تاثیرش رو توی عملکرد سرور ببینی.

مثلاً فرض کن که سرورت داره زیر بار فشار زیادی قرار می‌گیره. تو می‌تونی سریعاً تعداد  IO threads ها رو بیشتر کنی تا سرور بتونه سریع‌تر داده‌ها رو بخونه یا بنویسه و بار سرور کاهش پیدا کنه. اینجاست که می‌بینی چقدر این قابلیت جدید مهمه و به بهبود عملکرد کمک می‌کنه.

یه نکته دیگه هم اینه که این قابلیت جدید باعث میشه مدیریت سرور و تنظیماتش خیلی راحت‌تر بشه. قبلاً شاید دیتابیس ادمین ها یا مسئولین فنی (مثل من) مجبور بودن شب‌ ها از خوابشون بزنن و با کلی استرس ، تغییرات رو اعمال کنن تا ری‌استارت باعث اختلال توی کار کاربران نشه. اما حالا دیگه این مشکل رو نداریم و می‌تونیم هر وقت که نیاز بود بدون استرس و نگرانی ، تنظیمات رو بهینه کنیم.




ویژگی IO threads تو دیتابیس های دیگه در مقایسه با mariadb چه وضعیتی داره؟

تو مقایسه با دیتابیس‌های دیگه تا جایی که من سرچ کردم و دیدم ، تو mysql تا نسخه 8.0 این متغیرها هنوز استاتیک هستن و برای هر تغییری نیاز به ری‌استارت کل سرور هست.

تو PostgreSQL، مدیریت IO کلا با دیتابیس های دیگه متفاوته، و به این شکل که از سیستم‌عامل برای مدیریت IO استفاده میکنه. به همین دلیل، دیتابیس PostgreSQL دیگه اصلا نیازی به این تنظیمات مستقیم IO threads نداره، و بیشتر به بهینه‌سازی‌های سیستم‌عامل و تنظیمات حافظه وابسته است.




در کل، این تغییر به نظر کوچیک، تاثیر خیلی زیادی توی عملکرد و انعطاف‌پذیری mariadb داره و یکی از ویژگی‌های مهم نسخه ۱۰.۱۱ به حساب میاد. اگه از mariadb استفاده می‌کنی یا می‌خوای ازش استفاده کنی، حتمااااا به این ویژگی خیلی مهم توجه ویژه‌ای بکن و سعی کن ازش به بهترین شکل ممکن بهره ببری.

امیدوارم این پست مفید بوده باشه براتون و مرسی که حمایت میکنین


io threadsdatabasemysqlmariadbdatabase tunning
شهریار بیات هستم برنامه نویس مهندس نرم افزار و مدیر فنی پلتفرم هومسا علاقه مند به تکنولوزی های روز و مباحث مرتبط به SRE و devops اینجا تجربیاتمو باهاتون به اشتراک میزارم
شاید از این پست‌ها خوشتان بیاید