Thứ Tư, 19 tháng 8, 2020

THIẾT LẬP THAM SỐ HUGEPAGE CHO ORACLE DATABASE TRÊN LINUX

MỤC ĐÍCH
  • Giảm tải Oracle database trên Linux khi hệ thống sử dụng RAM và SGA lớn.
  • Đảm bảo tối ưu khả năng sử dụng RAM của database Oracle
  • Đảm bảo database hoạt động ổn định
  • Tối ưu khả năng sử dụng SWAP trên server database
Sau đây là các bước thực hiện để cấu hình hugepages trên server database

ớc 1: Thiết lập tham số memlock trong file /etc/security/limits.conf để giới hạn khả năng sử dụng RAM của user (90% của RAM tính theo Kb)
cat
*   soft   memlock    60397977
*   hard   memlock    60397977

ớc 2: Off các tham sMEMORY_TARGET và MEMORY_MAX_TARGET nếu có
ALTER SYSTEM SET MEMORY_TARGET = 0 SCOPE=SPFILE;
ALTER SYSTEM SET MEMORY_MAX_TARGET = 0 SCOPE=SPFILE;

ớc 3: Thiết lập lại giá trị SGA cho Oracle database (nếu muốn thay đổi SGA)
ALTER SYSTEM SET SGA_TARGET = 40G scope=spfile
ALTER SYSTEM SET PGA_AGGREGET_TARGET = 40G scope=spfile
ớc 4: Restart database
Nếu không thay đổi tham số MEMORY_TARGET, MEMORY_MAX_TARGET và SGA_TARGET thì không cần phải làm bước này.
ớc 5: Tính toán và thiết lập giá trị hugepages
Chạy script hugepages_settings.sh để tính toán ra giá trị hugepages cần thiết lập. Giả sử giá trị cần đặt ở đây là 20480 do SGA 40G (=41943040 kB) , hugepagesize là 2048kb

- Check Hugepagesize: grep Hugepagesize /proc/meminfo
Hugepagesize là 2048kb

Sửa file /etc/sysctl.conf và thiết lập tham số vm.nr_hugepages theo giá trị tính toán ở trên
vm.nr_hugepages = 20480

ớc 6: Shutdown tất cả các database instance và reboot server
ớc 7: Kiểm tra lại cấu hình
Sau khi server và database lên, kiểm tra lại cấu hình xem có chuẩn không

# grep ^Huge /proc/meminfo
HugePages_Total:   20480
HugePages_Free:     2056
HugePages_Rsvd:     2016
HugePages_Surp:        0
Hugepagesize:       2048 kB

----------------------------
Script tính toán tham số hugepages
#!/bin/bash
#
# hugepages_settings.sh
#

echo "Press Enter to proceed..."

read

# Check for the kernel version
KERN=`uname -r | awk -F. '{ printf("%d.%d\n",$1,$2); }'`

# Find out the HugePage size
HPG_SZ=`grep Hugepagesize /proc/meminfo | awk '{print $2}'`
if [ -z "$HPG_SZ" ];then
    echo "The hugepages may not be supported in the system where the script is being executed."
    exit 1
fi

# Initialize the counter
NUM_PG=0

# Cumulative number of pages required to handle the running shared memory segments
for SEG_BYTES in `ipcs -m | cut -c44-300 | awk '{print $1}' | grep "[0-9][0-9]*"`
do
    MIN_PG=`echo "$SEG_BYTES/($HPG_SZ*1024)" | bc -q`
    if [ $MIN_PG -gt 0 ]; then
        NUM_PG=`echo "$NUM_PG+$MIN_PG+1" | bc -q`
    fi
done

RES_BYTES=`echo "$NUM_PG * $HPG_SZ * 1024" | bc -q`

# An SGA less than 100MB does not make sense
# Bail out if that is the case
if [ $RES_BYTES -lt 100000000 ]; then
    echo "***********"
    echo "** ERROR **"
    echo "***********"
    echo "Sorry! There are not enough total of shared memory segments allocated for
HugePages configuration. HugePages can only be used for shared memory segments
that you can list by command:

    # ipcs -m

of a size that can match an Oracle Database SGA. Please make sure that:
 * Oracle Database instance is up and running
 * Oracle Database 11g Automatic Memory Management (AMM) is not configured"
    exit 1
fi

# Finish with results
case $KERN in
    '2.4') HUGETLB_POOL=`echo "$NUM_PG*$HPG_SZ/1024" | bc -q`;
           echo "Recommended setting: vm.hugetlb_pool = $HUGETLB_POOL" ;;
    '2.6') echo "Recommended setting: vm.nr_hugepages = $NUM_PG" ;;
     *) echo "Unrecognized kernel version $KERN. Exiting." ;;
esac


# End
@ Trần Văn Bình - Founder of "Oracle DBA Việt Nam" #OracleTutorial #OracleDBA #OracleDatabaseAdministration #học oracle database #oca #ocp #oce #ocm

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master