ذخیره و بارگذاری محتوای Buffer Pool در MySQL

 از MySQL 5.6 به بعد InnoDB به عنوان Storage Engine پیشفرض انتخاب شده است. InnoDB دارای یک فضای درون حافظه به نام Buffer Pool است که برای Cache کردن داده ها و ایندکس ها استفاده می شود.

 

فضای Buffer Pool در MySQL InnoDB

فضای Buffer Pool در MySQL InnoDB – بخش دوم

زمانی که سرور MySQL را Restart کنید این اطلاعات Cache شده (و احتمالا تغییر کرده توسط کوئری ها) از دست خواهند رفت. از MySQL 5.6 به بعد یک ویژگی برای ذخیره محتوای فضای Buffer Pool از درون حافظه بر روی یک فایل و بارگذاری مجدد آن درون حافظه از روی فایل معرفی شده است. بنابراین اگر سرور را Shutdown یا Restart کنید بازهم به آخرین محتوای درون فضای Buffer Pool دسترسی خواهید داشت. این ویژگی اجازه می دهد تا قبل از shutdown کردن سرور ، محتوای Buffer Pool را ذخیره و در زمان Start شدن سرور، مجدد محتوا را بارگذاری کنید.

نمایش اطلاعاتی در مورد Buffer Pool

از درون محیط Mysql با دستور زیر می توانید اطلاعاتی در مورد Buffer Pool بدست آورید.

خروجی زیر بخشی از خروجی ایجاد شده از اجرای دستور بالا است. همانطور که مشخص است تعداد ۲۶۵ صفحه دیتابیس (Database Pages) وجود دارند که از درون حافظه (فضای Buffer Pool) به درون فایلی بر روی دیسک باید ذخیره شوند.

----------------------
BUFFER POOL AND MEMORY
----------------------
Total large memory allocated 137428992
Dictionary memory allocated 303272
Buffer pool size   8191
Free buffers       7926
Database pages     265
Old database pages 0
Modified db pages  0
Pending reads      0

بنابراین تنها صفحه های پایگاه داده یا Database Pages باید از درون فضای Buffer Pool به درون دیسک ذخیره شوند و تنها همین صفحه ها لازم است تا به درون فضای Buffer Pool بارگذاری شوند. با دستور زیر می توان فضای Buffer Pool را به فایلی بر روی دیسک مننقل کرد.

با اجرای دستور بالا یک فایل به نام ib_buffer_pool در محل پیشفرض فایل های پایگاه داده MySQL/Maria DB ایجاد می شود. این یک فایل متنی ساده است و می توان آنرا با ویرایشگرهایی مانند vi و nano نیز مشاهده کرد.

buffer_pool_dump_load1

دستور زیر وضعیت این فایل را توسط متغیر  نشان می دهد.

buffer_pool_dump_load2

همچنین اگر می خواهید در زمان shutdown بودن MySQL از دستور زیر برای ذخیره کردن استفاده کنید.

رای آنکه محتوای فایل dump در زمان راه اندازی مجدد بارگذاری شود، عبارت زیر به دستور mysqld اضافه می شود.

و یا از دستور زیر برای بارگذاری زمانی که سرور mysql در حال اجرا است، استفاده می شود.