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

ویژگی undo tablespaces در دیتابیس mariadb


تو نسخه‌های قدیمی‌تر mariadb, وقتی داده‌ای تغییر می‌کرد و نیاز به ثبت اون تغییرات داشتیم، این تغییرات به‌صورت undo log در سیستم جداول ذخیره می‌شد. حالا، تو نسخه 10.11 mariadb, داستان یه کم فرق کرده. تو این نسخه، به جای اینکه همه چیز تو یه فضای مشترک (یا همون system tablespace) نوشته بشه، سه تا فایل جداگانه برای ثبت این تغییرات در نظر گرفته شده که هر کدوم تو یه دایرکتوری جداگانه به نام innodb_undo_directory ذخیره می‌شن. اینجوری هم performance بالاتر میره و هم مدیریت راحت‌تر.

تو نسخه‌های قبلی، عدد پیش‌فرض برای innodb_undo_tablespaces صفر بود. یعنی همه تغییرات تو همون فضای اصلی ثبت می‌شد. ولی الان این عدد به 3 رسیده که یعنی سه تا فضای جداگانه برای ثبت این تغییرات در نظر گرفته شده. نکته مهم اینجاست که تو نسخه‌های قدیمی‌تر mariadb، بعد از ساخت دیتابیس، نمی‌شد این مقدار رو تغییر داد. اما تو نسخه‌های جدید این مشکل حل شده.




اول ببینیم undo log چی هست و چیکار میکنه؟

توی دیتابیسی مثل undo log ,mariadb بخشی از فرایند تراکنش‌هاست که نقش خیلی مهمی تو حفظ یکپارچگی داده‌ها داره. وقتی شما یه تراکنش رو اجرا می‌کنید، مثل insert کردن رکورد جدید، یا آپدیت کردن یا حتی حذف ، این تغییرات به‌صورت موقتی ثبت میشن تا زمانی که تراکنش کامل بشه. حالا اینجا undo log وارد میشه.

وظیفه undo log اینه که در صورت بروز خطا، یا اگر به هر دلیلی تراکنش لغو بشه، بتونه تغییرات رو به حالت قبل برگردونه. به زبان ساده‌تر، undo log یه کپی از داده‌های اصلی رو قبل از تغییرات نگه میداره. اگه مثلاً وسط یه عملیات آپدیت یه مشکل پیش بیاد یا شما بخواید تغییرات رو لغو کنید، سیستم با استفاده از این undo log برمی‌گرده به حالت قبلی، انگار که اصلاً هیچ تغییری انجام نشده.

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

توی mariadb، این undo log ها به‌صورت فایل‌هایی در undo tablespaces ذخیره میشن و همونطور که قبلاً گفتم، تو نسخه‌های جدید، شما می‌تونید چندین undo tablespaces داشته باشید که این کار باعث بهبود عملکرد و افزایش امنیت داده‌ها میشه.




حالا ببینیم چرا این تغییر مهمه

وقتی چندین undo log داریم، می‌تونید داده‌های بیشتری رو همزمان پردازش کنید. این کار باعث میشه که سیستم با سرعت بیشتری کار کنه و در عین حال، از تداخل داده‌ها جلوگیری کنه. اگه تو نسخه‌های قدیمی، یکی از undo log ها مشکلی پیدا می‌کرد، کل فرآیند ممکن بود به مشکل بخوره. ولی حالا با داشتن سه تا فایل جداگانه، اگر یکی خراب بشه، دو تای دیگه هنوز سالم هستن و کار رو ادامه میدن.

از نظر فنی، وقتی شما تغییری تو داده‌ها ایجاد می‌کنید، این تغییرات اول تو undo log ثبت می‌شن تا اگه به هر دلیلی لازم شد، بتونید به وضعیت قبلی برگردید. حالا، وقتی این undo log ها تو سه فضای جداگانه ذخیره میشن، سیستم بهتر می‌تونه این تغییرات رو مدیریت کنه و اگر بخوایم برگردیم به حالت قبل، این کار سریع‌تر و مطمئن‌تر انجام میشه.

بنابراین، این تغییرات جدید تو نسخه 10.11 mariadb باعث میشه که هم کارایی بهتر بشه و هم مدیریت undo log ها راحت‌تر و مطمئن‌تر بشه. این یه ویژگی مهمه که باعث میشه دیتابیس شما با اطمینان بیشتری کار کنه و از خطرات احتمالی که ممکن بود تو نسخه‌های قبلی پیش بیاد، جلوگیری بشه.


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