دیتابیس اوراکل

HugePage

سه شنبه, ۳۰ آذر ۱۳۹۵، ۱۰:۰۱ ق.ظ

وقتی که یک پروسس میخواهد از memory استفاده کند ، CPU  یک تکه از RAM را به آن اختصاص میدهد. در واقع CPU به اندازه یک  4k bytes ) chunk ) حافظه را به CPU اختصاص میدهد. هر یک از اون chunkها یک page نامیده میشوند.

از اونجایی که آدرس فضایی که به یک پروسس اختصاص داده میشود ( همان pageها )  به صورت virtual است ، CPU و OS مجبور هستند که به خاطر بسپارند که هر page به چه process اختصاص دارد و  در کجا ذخیره شده است.

اگر تعداد pageها زیاد باشد ، این موضوع زمان زیادی میبرد و همچنین فضای زیادی اشغال میشود.

فرض کنید یک پروسس به 1G از ram نیاز دارد. اگر این 1G را بر اون 4K تقسیم کنیم ، باید در page table به اندازه  262144  ، entry وارد شود (1GB/4K) . اگر فرض کنید هر entry در Page Table  حدود 8bytes فضا مصرف میکند کل فضایی که فقط برایی ذخیره آدرس فیزیکی مصرف شده است  (2MB(262144*8 است. که وقتی تعداد پروسس ها زیاد شود هم فضای زیادی اشغال میشود هم جستجو در این page table سخت تر میشود.

 

در حال حاضر در معماری CPUهای جدید ، Pageها میتوانند اندازه بزرگتری داشته باشند.

نکته 1 ) اگر hardware شما پشتیبانی کند سایز Huge Page حداکثر میتواند 1G باشد.

 

اگر شما یک سیستم دارید که ram آن بیشتر از 16G است و کل فضایی که به SGA اختصاص یافته است بیشتر از 8G است، برای رسیدن به performance بالاتر، بهتر است که از HugePages استفاده کنید.

نکته 2 ) اگر شما ویژگی Automatic Memory Management را که از اوراکل 11g به بعد آمده است enable کرده اید، نمیتوانید از HugePages استفاده کنید.

 

مزایای استفاده از HugePageها :

-          تعداد کل pageهایی قرار است توسط kernel مدیریت شوند ، کاهش می یابد.

-          فضای کمتری در memory به page table اختصاص می یابد.

 

پیکربندی HugePages برای دیتابیس های اوراکل

 

1-      مطمئن باشید که مقدار متغیرهای زیر در  etc/security/limits.conf/  به کمتر از ram ست شده باشد. مثلا اگر RAM  ماشین شما 64G است بهتر است مقدار این متغیرها به صورت زیر باشد.

*        soft   memlock    60397977

*        hard   memlock   60397977

2-      به oracle user وصل شوید و با استفاده از command زیر مقدار متغیر memlock را چک کنید ، تا مطمئن شوید تغییر بالا اعمال شده است.

$ ulimit -l

60397977


3-      پارامترهای memory_target و memory_max_target را به 0 ست کنید.

SQL> alter system set memory_target=0;

System altered.

SQL> alter system set memory_max_target=0;

System altered.

 

4-      مطمئن شوید که همه db instance , asm instanceها up باشند.

5-      اسکریپتی با نام hugepages_settings.sh  با محتوای زیر ایجاد کنید.

hugepages_settings.sh

 

6-      Permission مربوط به این فایل را تغییر دهید.

$ chmod  u+x  hugepages_settings.sh

 

7-       اسکریپتی را که در بالا ایجاد کرده بودید اجرا کنید.

$ ./hugepages_settings.sh

.

.

Recommended setting: vm.nr_hugepages = 22960

 

8-      با root وصل شوید و در فایل etc/sysctl.conf/ مقدار پارامتر vm.nr_hugepages را به مقدار پیشنهاد شده در بالا ست کنید.

vm.nr_hugepages = 22960


نکته 3 ) برای oracle linux 6.5 بهتر است که پارامتر زیر را هم به این فایل (etc/sysctl.conf/) اضافه کنید.

get the ID of the dba group :  # fgrep dba /etc/group

vm.hugetlb_shm_group = 54322

 

9-      در oracle_base یه جایی نوشته شده که از ورژن 11.2.0.2 به بعد ، اگر میخواهید force کنید که instance از hugepage استفاده کند ، پارامتر زیر را تنظیم کنید . ( این پارامتر داینامیک نیست )  

ALTER SYSTEM SET use_large_pages=only SCOPE=SPFILE sid='*';

 

10-   همه نودها را ریبوت کنید.

11-   بعد از بالا آمدن سیستم ها چک کنید که تغییرات اعمال شده باشد.

# grep ^Huge /proc/meminfo

HugePages_Total:   22960

HugePages_Free:     2056

HugePages_Rsvd:     2016

HugePages_Surp:        0

Hugepagesize:       2048 kB


نکته 4 ) در oracle_base به یک feature به نام Transparent HugePage اشاره شده . این feature به صورت پیش فرض enable  است و گفته شده که باعث میشه memory_management بهتر انجام شود. ولی گفته که این feature در دیتابیس های اوراکل و RAC کارایی خوبی نداره و باعث میشه که performance پایین بیاد و بهتره که این featue را disable کنید.

برای disable کردن این پارامتر در Oracle Linux6 باید به فایل "/boot/grub/grub.conf/"  مقدار زیر را اضافه کنید.

transparent_hugepage=never

 


n       منابع

1- https://docs.oracle.com/cd/E37670_01/E37355/html/ol_about_hugepages.html

2- http://docs.oracle.com/cd/E11882_01/server.112/e10839/appi_vlm.htm#UNXAR396

3- https://wiki.debian.org/Hugepages

4- https://oracle-base.com/articles/linux/configuring-huge-pages-for-oracle-on-linux-64

  • راهله شاکری

HugePage

نظرات (۰)

هیچ نظری هنوز ثبت نشده است
ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
تجدید کد امنیتی