auto_only Large Page در اوراکل 19c

در مطلب پیکربندی Huge Page برای دیتابیس اوراکل در مورد مقادیری که برای پارامتر USE_LARGE_PAGES قابل تنظیم است، نکاتی را مطرح کردیم و توضیح دادیم که برای این پارامتر می توان یکی از مقادیر FALSE, ONLY, TRUE را تنظیم کرد(مقدار AUTO در نسخه های جدید قابل تنظیم نیست.)

Connected to Oracle Database 18c Enterprise Edition Release 18.0.0.0.0

SQL> select value from v$parameter_valid_values p where upper(name)= ‘USE_LARGE_PAGES’;

VALUE

————–

TRUE

AUTO

ONLY

FALSE

در اوراکل نسخه 19c، مقدار AUTO_ONLY هم به این مجموعه مقادیر اضافه شده است که در این متن به بررسی این مقدار خواهیم پرداخت.

Connected to Oracle Database 19c Enterprise Edition Release 19.0.0.0.0

SQL> select value from v$parameter_valid_values p where upper(name)= ‘USE_LARGE_PAGES’;

VALUE

————–

TRUE

AUTO

ONLY

FALSE

AUTO_ONLY

زمانی که پارامتر USE_LARGE_PAGES را به مقدار AUTO_ONLY تنظیم می کنیم، محاسبه و تنظیم تعداد large pageها بر عهده دیتابیس اوراکل خواهد بود. مثال زیر را ببینید.

در محیط تستی که در آن قرار داریم، Huge Page قبلا پیکربندی نشده است:

[root@RAC2 ~]# grep ^Huge /proc/meminfo

HugePages_Total:       0

HugePages_Free:        0

HugePages_Rsvd:        0

HugePages_Surp:        0

Hugepagesize:       2048 kB

همچنین مقدار در نظر گرفته شده برای instanceای که در حال اجرا است، برابر با 37GB می باشد:

SQL> show parameter sga

NAME                                 TYPE        VALUE

———————————— ———– ——————————

sga_max_size                         big integer 37G

sga_target                           big integer 37G

در این شرایط تصمیم داریم تا با کمک new feature اوراکل 19c، قابلیت Huge Page را پیکربندی کنیم:

SQL> alter system set use_large_pages=AUTO_ONLY scope=spfile sid=‘instance2’ ;

بعد از تنظیم پارامتر use_large_pages به مقدار AUTO_ONLYء، instance را restart می کنیم:

SQL> startup nomount force;

ORACLE instance started.

Total System Global Area 3.9728E+10 bytes

Fixed Size                 30383136 bytes

Variable Size            6039797760 bytes

Database Buffers         3.3554E+10 bytes

Redo Buffers              103833600 bytes

بعد از restart کردن instance، خواهیم دید که تعداد Huage Pageها از 0 به 18946 رسیده است:

 [root@RAC2 ~]# grep ^Huge /proc/meminfo

HugePages_Total:   18946

HugePages_Free:      111

HugePages_Rsvd:      111

HugePages_Surp:        0

Hugepagesize:       2048 kB

همچنین در پیامهای Alert Log می بینیم که اوراکل برای shared memory از Huge Page استفاده کرده است:

Dump of system resources acquired for SHARED GLOBAL AREA (SGA)

2021-03-30T13:54:12.777120+04:30

 Per process system memlock (soft) limit = 40G

 Expected per process system memlock (soft) limit to lock

 instance MAX SHARED GLOBAL AREA (SGA) into memory: 37G

PAGESIZE  AVAILABLE_PAGES  EXPECTED_PAGES  ALLOCATED_PAGES  ERROR(s)

2021-03-30T13:54:12.777662+04:30

     2048K            18946           18946           18946        NONE

**********************************************************************

البته اگر به اندازه مقدار محاسبه شده، large page قابل تخصیص موجود نباشد، دستور startup با خطا متوقف خواهد شد عدم قابلیت تخصیص large page می تواند به تنظیمات محیطی، نظیر memlock (soft) limit برگردد به عنوان یک نمونه از این محدودیتها، large page هیچگاه نمی تواند بیشتر از اندازه در نظر گرفته شده برای memlock (soft) limit باشد:

SQL> alter system set sga_max_size=50g scope=spfile  sid=‘instance2’ ;

System altered.

SQL> alter system set sga_target=50g scope=spfile  sid=‘instance2’ ;

System altered.

SQL> startup nomount force;

ORA-27125: unable to create shared memory segment

Linux-x86_64 Error: 1: Operation not permitted

Additional information: 4549

Additional information: 134217728

SQL>

در alert log هم می بینیم که memlock (soft) limit برابر با 40G می باشد بنابرین نمی توان 50G از حافظه را برای large page کنار گذاشت:

Per process system memlock (soft) limit = 40G

2021-03-30T13:56:37.061802+04:30

 Expected per process system memlock (soft) limit to lock

 instance MAX SHARED GLOBAL AREA (SGA) into memory: 50G

  PAGESIZE  AVAILABLE_PAGES  EXPECTED_PAGES  ALLOCATED_PAGES  ERROR(s)

2021-03-30T13:56:37.062428+04:30

     2048K            25551           25602           20559   ORA-27125

 Reason for not supporting certain system pagesizes:

RECOMMENDATION:

2021-03-30T13:56:37.062744+04:30

  1. Configure system with expected number of pages for every

 supported system pagesize prior to the next instance restart operation.

2021-03-30T13:56:37.065750+04:30

  1. Increase per process memlock (soft) limit to at least 50GB

 to lock 100% of SHARED GLOBAL AREA (SGA) pages into physical memory

**********************************************************************

Oradism deallocated 6605 large pages of size 2097152 bytes.

SGA: Realm creation failed

بنابرین با افزایش مقدار memlock (soft) limit، از خطای فوق جلوگیری خواهد شد:

[root@RAC2 ~]# vi /etc/security/limits.conf

oracle soft memlock 52214400

oracle hard memlock 52214400

SQL>  startup nomount force;

ORACLE instance started.

Total System Global Area 5.3687E+10 bytes

Fixed Size                 30388144 bytes

Variable Size            6308233216 bytes

Database Buffers         4.7245E+10 bytes

Redo Buffers              103829504 bytes

SQL>

–alert log:

**********************************************************************

Per process system memlock (soft) limit = 53G

 Expected per process system memlock (soft) limit to lock

 instance MAX SHARED GLOBAL AREA (SGA) into memory: 50G

 Supported system pagesize(s):

2021-03-30T14:35:24.158541+04:30

  PAGESIZE  AVAILABLE_PAGES  EXPECTED_PAGES  ALLOCATED_PAGES  ERROR(s)

2021-03-30T14:35:24.158688+04:30

     2048K            25602           25602           25602        NONE

**********************************************************************

همچنین اگر مقدار memlock (soft) limit  و SGA را بیشتر از فضای ram در نظر بگیریم، instance استارت نخواهد شد:

[root@RAC2 ~]# free -g

              total        used        free      shared  buff/cache   available

Mem:             62          52           8           0           2           9

Swap:            17           0          17

[root@RAC2 ~]# vi /etc/security/limits.conf

oracle soft memlock 75214400

oracle hard memlock 75214400

SQL> alter system set sga_max_size=70g scope=spfile  sid=‘instance2’ ;

System altered.

SQL> alter system set sga_target=70g scope=spfile  sid=‘instance2’ ;

System altered.

SQL> startup nomount force;

ORA-27104: system-defined limits for shared memory was misconfigured

–alert log:

2021-03-30T14:40:10.354881+04:30

Starting ORACLE instance (normal) (OS id: 17671)

System cannot support SGA size of 70 GB.

Total system memory configured is 63 GB.

2021-03-30T14:40:10.551027+04:30

Instance maximum shared memory size should be less than 57 GB.

توجه: در صورت عدم تنظیم memlock (soft) limit، مقدار 64K برای آن در نظر گرفته خواهد شد:

Per process system memlock (soft) limit = 64K

ارتباط با نویسنده مطلب:vahidusefzadeh@ کانال تخصصی اوراکل و لینوکس: OracleDB@

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.