منبع اصلی نوشتار زیر در این لینک قرار دارد

فضای Buffer Pool در MySQL InnoDB

InnoDB یکی از موتورهای ذخیره سازی (Storage Engien) در MySQL است که فضایی از حافظه اصلی به نام buffer pool را برای cache کردن داده ها و ایندکس ها استفاده می کند. اندازه این فضا بر روی کارایی پایگاه داده و زمان اجرای کوئری تاثیر گذار است.

مدیریت Buffer Pool و مفهوم صفحه ها

داده ها و ایندکس ها بر روی Data File ها بر روی دیسک ذخیره شده اند و زمانی که کوئری برای دسترسی به آنها صادر می شود در صورتی که داده ها در فضای buffer pool قرار نداشته باشند باید آنها از دیتافایل ها به بافر انتقال داده شوند. MySQL از الگوریتم LRU (مخفف least recently used) برای مدیریت بافر استفاده می کند.

بنابراین buffer pool فضایی درون حافظه است که داده های cache شده برای جداول و ایندکس ها را نگهداری می کند. برای انجام عملیات های خواندن بسیار حجیم، buffer pool به صفحه هایی (Pages) تقسیم می شود که هر صفحه تعدادی سطر را نگهداری می کند. همچنین برای مدیریت Cache بافر به صورت لیست پیوندی از صفحه ها پیاده سازی می شود. الگوریتم LRU داده هایی که اخیرا مورد دسترسی یا استفاده نشده باشند را مشخص می کند. در سیستم هایی که میزان بالایی از حافظه اصلی را دارند می توان buffer pool را به چندین Instance بافر یا Buffer Pool Instances تقسیم کرد.

Page یا صفحه واحدی است که نشان می دهد در هر لحظه چه میزان از داده های InnoDB میان دیسک (دیتا فایل ها) و حافظه اصلی (فضای Buffer Pool) انتقال داده می شوند. یک صفحه می تواند شامل یک یا چند صفحه باشد، که این وابسته به آن است که چه میزان داده در هر سطر وجود دارد. همانطور که گفته شد از ساختار لیست پیوندی و ایجاد اشاره گره ها میان صفحه ها استفاده می شود. در صورتی که یک سطر در یک صفحه قرار نگیرد، ادامه آن در یک صفحه دیگر قرار می گیرد و یک اشاره گر میان آنها برقرار می شود.

الگوریتم LRU یا الگوریتم اخیرا استفاده شده

LRU یکی از الگوریتم های رایج برای مدیریت Cache است. الگوریتم LRU را می توانیم “الگوریتم حداقل به تازگی استفاده شده” نیز بنامیم. این الگوریتم صفحه هایی را که به تازگی استفاده شده باشند را در نظر نمی گیرد بلکه صفحه هایی را که اخیرا یا به تازگی استفاده نشده باشند را انتخاب می کند. زمانی که فضایی برای قرار گیری سطرها در صفحه ها لازم باشد، آن صفحه هایی که اخیرا استفاده نشده اند انتخاب می شوند.

داده ها به صورت دائمی بر روی دیتا فایل ها بر روی دیسک قرار دارند. زمانی که یک کوئری اجرا شود ممکن است لازم باشد داده های جدید (سطرهای جدول) به درون Buffer Pool آورده شوند، اگر فضایی کافی وجود نباشد آن صفحه هایی که اخیرا مورد استفاده قرار نگرفته اند برای جایگزینی انتخاب می شوند.

بنابراین برای اجرای کوئری ابتدا داده ها از دیتا فایل های ذخیره شده بر روی دیسک به فضای buffer pool درون حافظه اصلی آورده می شوند و بلعکس زمانی که لازم باشد تغییرات بر روی سطرها درج شود، ابتدا بر روی فضای buffer pool نوشته می شود.

یک Dirty Page صفحه ای است که تغییرات اعمال شده بر روی آن هنوز بر روی دیتا فایل ها اعمال نشده است. Clean Page مفهوم مقابل با Dirty Page است به طوری که داده های تغییر کرده بر روی دیتا فایل ها نوشته شده اند. عملیات نوشتن Dirty Pages ها از حافظه اصلی به درون دیتا فایل های بر روی دیسک را Flushing می گویند. عملیات Flushing زمانی انجام می شود که درصد صفحه های Dirty درون buffer pool از مقدار متغیر  innodb_max_dirty_pages_pct بیشتر یا مساوی آن باشد. برای اطلاع از مقدار این متغیر دستور زیر را اجرا کنید.

;’ show variables like ‘innodb_innodb_max_dirty_pages_pct

innodb_max_dirty_pages_pct

متغیر Innodb_buffer_pool_pages_dirty تعداد صفحه های Dirty فعلی درون buffer pool را نشان می دهد. متغیر Innodb_buffer_pool_pages_flushed تعداد درخواست ها برای Flush کردن صفحه ها از فضای buffer pool به درون دیتافایل ها را نشان می دهد. برای نمایش دو متغیر بالا از دستور زیر استفاده کنید.

;’show status like ‘%Innodb_buffer_pool_pages

show_status_innodb_buffer_pool_pages

 متغیر innodb_buffer_pool_size اندازه فضای buffer pool را به بایت (Byte) مشخص می کند. مقدار پیشفرض آن 134217728 بایت و حداقل و حداکثر مقدار آن در یک سیستم ۳۲ بیتی به ترتیب 5242880 و 1 – 32**2 بایت و در یک سیستم ۶۴ بیتی به ترتیب 5242880 و 1 – 64**2 بایت است. بنابراین حداکثر مقدار به طور مستقیم وابسته به معماری پردازنده و سیستم عامل خواهد بود. در صورتی که اندازه buffer pool بالا باشد، باعث خواهد شد که درخواست های I/O کمتری لازم باشند.

مقدار پیش فرض 128 مگابایت یا 1024*1024*128 بایت است.



برچسب ها : ,

به سیاره لینوکس امتیاز دهید

به اين صفحه امتياز دهيد