مقدمه
Huge Pages ویژگیای است که به مدیریت حافظه در سطح سیستمعامل کمک میکند و برای پایگاهدادههایی مانند Oracle Database بسیار مفید است. استفاده از Huge Pages باعث بهینهسازی عملکرد و کاهش سربار حافظه میشود.
از چه میزان رم به بالا توصیه میشود؟
استفاده از Huge Pages معمولاً برای سیستمهایی که دارای 16 گیگابایت رم و بالاتر هستند، توصیه میشود. دلیل این امر این است که در سیستمهایی با حافظه زیاد، مدیریت حافظه با صفحات بزرگتر (مثلاً 2 مگابایت به جای 4 کیلوبایت) کارایی بالاتری دارد و منجر به کاهش تعداد ورودیهای Page Table میشود.
توضیح مختصر در مورد Page Table
Page Table یک ساختار دادهای است که توسط سیستمعامل و سختافزار پردازنده برای مدیریت فضای حافظه مجازی استفاده میشود. وظیفه اصلی آن نگاشت آدرسهای حافظه مجازی (که توسط برنامهها استفاده میشود) به آدرسهای فیزیکی (در حافظه RAM) است.
هر ورودی در این جدول نشاندهنده یک صفحه (Page) در حافظه مجازی است و شامل اطلاعاتی مانند آدرس فیزیکی صفحه و مجوزهای دسترسی به آن است.
نقش Page Table و تأثیر Huge Pages
در سیستمهایی که از صفحات معمولی کوچک (مثلاً 4 کیلوبایت) استفاده میکنند، Page Table میتواند بسیار بزرگ شود، زیرا تعداد زیادی ورودی برای نگاشت آدرسها نیاز دارد. استفاده از Huge Pages (مثلاً 2 مگابایت به جای 4 کیلوبایت) باعث میشود که تعداد ورودیهای مورد نیاز در Page Table کاهش یابد، که به نوبه خود باعث کاهش سربار سیستم و افزایش کارایی حافظه میشود.
بهطور خلاصه، با استفاده از Huge Pages، تعداد ورودیهای Page Table کمتر شده و مدیریت حافظه مؤثرتر میشود.
فواید Huge Pages
- کاهش سربار حافظه: با استفاده از صفحات بزرگتر، تعداد ورودیهای Page Table کاهش مییابد و در نتیجه سربار CPU برای مدیریت حافظه کمتر میشود.
- کاهش Fragmentation: استفاده از Huge Pages باعث کاهش تکهتکه شدن حافظه (Fragmentation) میشود.
- ثبات حافظه: حافظه تخصیص دادهشده برای Huge Pages بهصورت دائمی در حافظه نگهداری میشود و در نتیجه برای پایگاهداده ثبات بیشتری فراهم میکند.
- کاهش استفاده از حافظه Swapping: Huge Pages به سیستم کمک میکند تا از حافظه swap کمتر استفاده کند که به نوبه خود به افزایش عملکرد کمک میکند.
عملکرد دقیق Huge Pages در کمک به دیتابیس
Huge Pages به Oracle Database کمک میکند تا حافظه مشترک (Shared Memory) را بهطور موثرتری مدیریت کند. این صفحات بزرگ باعث میشوند که دسترسی به حافظه برای پردازشها سریعتر انجام شود، که منجر به بهبود عملکرد کلی دیتابیس میشود. بهطور خاص، Oracle از Huge Pages برای مدیریت SGA (System Global Area) استفاده میکند.
غیرفعالسازی transparent_huge_page در سیستمعامل
Transparent Huge Pages (THP) بهصورت خودکار صفحات بزرگ را تخصیص میدهد، اما برای دیتابیسهای Oracle این ویژگی میتواند منجر به کاهش کارایی شود. برای غیرفعالسازی THP:
- با استفاده از دستور زیر وضعیت فعلی THP را بررسی کنید:
cat /sys/kernel/mm/transparent_hugepage/enabled
خروجی به شکل زیر خواهد بود:
always madvise [never]
غیرفعالسازی transparent_hugepage با استفاده از Grubby
اگر وضعیت فعلی always
یا madvise
است، از دستورات زیر برای غیرفعالسازی استفاده کنید:
-
هسته پیشفرض را شناسایی کنید:
grubby --default-kernel
مثلاً:
/boot/vmlinuz-4.1.12-61.1.6.el7uek.x86_64
دستور زیر را برای غیرفعالسازی transparent_hugepage اجرا کنید:
grubby --args="transparent_hugepage=never" --update-kernel /boot/vmlinuz-4.1.12-61.1.6.el7uek.x86_64
بررسی کنید که پارامتر به درستی اعمال شده است:
grubby --info /boot/vmlinuz-4.1.12-61.1.6.el7uek.x86_64
روش جایگزین:
میتوانید خطوط زیر را به فایل /etc/rc.local
اضافه کنید و سیستم را ریبوت کنید:
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
بررسی وضعیت فعلی Huge Pages
وضعیت فعلی Huge Pages را با دستور زیر بررسی کنید:
grep Huge /proc/meminfo
خروجی نمونه:
AnonHugePages: 0 kB
ShmemHugePages: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
در این مثال، اندازه صفحات 2 مگابایت است و هنوز Huge Pages پیکربندی نشده است.
بررسی و تنظیم memlock
پارامتر memlock
مقدار حداکثر حافظهای را که میتواند در حافظه قفل شود، مشخص میکند و باید حداقل 90 درصد از مقدار فعلی RAM باشد. برای بررسی تنظیمات فعلی:
cat /etc/security/limits.conf | grep memlock
خروجی:
# - memlock - max locked-in-memory address space (KB)
oracle soft memlock 475423826
oracle hard memlock 475423826
تنظیم tmpfs برای استفاده مناسب از SGA
tmpfs یک سیستم فایل مبتنی بر حافظه است که میتواند برای ذخیره اطلاعاتی که نیاز به دسترسی سریع دارند، مورد استفاده قرار گیرد. نقطه Mount آن، /dev/shm
، باید حداقل به اندازهی SGA_MAX_SIZE
باشد.
برای بررسی اندازه tmpfs:
df -h
خروجی نمونه:
tmpfs 128G 637M 128G 1% /dev/shm
برای تغییر اندازه tmpfs:
تنظیم موقت:
mount -t tmpfs shmfs -o size=4g /dev/shm
تنظیم دائمی: افزودن خط زیر به فایل /etc/fstab
:
shmfs /dev/shm tmpfs size=128g 0 0
و زدن دستور
mount -a remount
نحوه دقیق اجرای Huge Pages
پشتیبانگیری از PFILE و تنظیم SGA (در صورت نیاز):
sqlplus / as sysdba
create pfile='/home/oracle/pfile030202.ora' from spfile;
alter system set sga_max_size=70g scope=spfile;
alter system set sga_target=65g scope=spfile;
alter system set use_large_pages=only scope=spfile;
در سیستمی که در حال اجرا هستیم، میزان رم 128 گیگ است.
خاموش کردن دیتابیس: دیتابیس را خاموش کنید تا بتوانید تغییرات مورد نظر را اعمال کنید.
تنظیم مقدار Huge Pages در sysctl.conf:
روش a: محاسبه مقدار صفحات مورد نیاز
(maximum sga in GB * 1024 /2) + 1%
روش b: استفاده از اسکریپت hugepages_settings.sh
:
chmod +x hugepages_settings.sh
./hugepages_settings.sh
سپس، تنظیمات را به فایل /etc/sysctl.conf
اضافه کنید:
vm.nr_hugepages=<recommended_value>
و تغییرات را اعمال کنید:
sysctl -p
راهاندازی مجدد دیتابیس: دیتابیس را راهاندازی کنید. اگر با خطایی مواجه شدید که به مقدار حافظه مربوط بود، حافظه را آزاد کنید:
echo 3 > /proc/sys/vm/drop_caches
بررسی وضعیت جدید Huge Pages: برای اطمینان از اعمال صحیح تنظیمات، دستور زیر را اجرا کنید:
grep Huge /proc/meminfo
خروجی مثال:
AnonHugePages: 0 kB
ShmemHugePages: 0 kB
HugePages_Total: 38400
HugePages_Free: 34849
HugePages_Rsvd: 32290
HugePages_Surp: 0
Hugepagesize: 2048 kB
اختیاری: آزادسازی فضای Swap: برای آزادسازی فضای Swap:
swapoff -a
swapon -a
توضیحات اضافی در مورد tmpfs و memlock
tmpfs
tmpfs
یک سیستم فایل مبتنی بر حافظه است که برای دادههایی که به دسترسی سریع نیاز دارند، مورد استفاده قرار میگیرد. اندازه tmpfs
باید به اندازهی کافی بزرگ باشد تا بتواند مقدار SGA_MAX_SIZE
را در خود جای دهد، زیرا Oracle از /dev/shm
برای مدیریت حافظه مشترک (SGA) استفاده میکند. اگر اندازه tmpfs
کمتر از SGA_MAX_SIZE
باشد، دیتابیس دچار خطا میشود.
memlock
memlock
تنظیمی است که میزان حافظهای را که میتواند در حافظه فیزیکی قفل شود، مشخص میکند. این تنظیم باید حداقل 90 درصد از RAM باشد وقتی که Huge Pages فعال است، زیرا قفل کردن حافظه برای استفاده از Huge Pages الزامی است. این کار باعث میشود که Oracle حافظه مورد نیاز خود را از طریق Huge Pages بهطور دائمی و بدون دخالت سیستمعامل در اختیار داشته باشد.