Database Support Blog

  • Oracle Database
  • Oracle Cloud
2024.11.05

Oracle Database 23ai新機能!メモリーを有効活用する統合メモリー管理

2024年5月、オンプレミス環境に先行して、Oracle Cloud環境でOracle Database 23aiがリリースされました。

Oracle Databaseを構築する際、SGA、PGAのサイズをそれぞれどう指定するかの検討に時間がかかっていたお客様もいらっしゃるかと思います。

23aiからは、SGA、PGAのサイズを個々に指定せず、SGAとPGAの合計サイズを新規に追加された初期化パラメーターMEMORY_SIZEに指定することでSGAとPGAのメモリー割当てをOracle Databaseが自動調整する「統合メモリー管理」という新機能が追加され、メモリーを有効活用できるようになりました。ユーザーが時間をかけて適切なサイズを算出する工数も削減でき、システムの安定稼働にも寄与する機能として、こんな機能を待っていた方も多いのではないでしょうか。

メモリーを有効活用するこの「統合メモリー管理」機能を、Oracle Base Database Service上のOracle DatabaseDB 23aiで検証してみました。本記事ではその結果をお伝えします。

なお、Oracle Database 23aiバージョンアップ時に押さえておくべき非推奨と廃止機能は、以下の記事ををご覧ください。


Oracle Database 23aiの「統合メモリー管理」を検証!

検証環境

今回は、下記のOracle Base Database Service環境で検証しました。
                                                                       
カテゴリー項目
Hardwareメモリー容量(GB)64
SoftwareGrid Infrastructure23.5.0.24.07
Oracle Database23.5.0.24.07
DBCDB(DB_UNIQUE_NAME)sbenchc_jjk_nrt
PDBSBENCHP

検証のポイント

前述のとおり、Oracle Database 23aiではSGA、PGAのメモリー割当てを自動調整してくれる「統合メモリー管理」が新機能として追加されました。

本記事では、「統合メモリー管理」の設定方法やメモリー割当てにフォーカスして検証しました。

 1.初期化パラメーターMEMORY_SIZEの設定範囲を確認する
 2.初期化パラメーターSGA_TARGET、PGA_AGGREGATE_TARGETの設定を確認する
 3.初期化パラメーターUSE_LARGE_PAGESとの組み合わせを確認する
 4.統合メモリー管理のSGA、PGA間のメモリー調整を確認する

[参考]
Oracle Databaseデータベース・リファレンス 23ai(オラクル社のサイトに移動します)
 MEMORY_SIZE
 MEMORY_MAX_SIZE

初期化パラメーターMEMORY_SIZEの設定範囲確認

MEMORY_SIZE=5g

ここでは初期化パラメーターMEMORY_SIZEに、下記のような比較的小さい値を指定した場合にDBが起動可能か検証しました。

                                                                              
カテゴリーパラメーター
DBの初期化パラメーターMEMORY_SIZE5g
MEMORY_MAX_SIZE0
SGA_TARGET0
PGA_AGGREGATE_TARGET0
USE_LARGE_PAGESONLY
カーネルパラメーターvm.nr_hugepagesvm.nr_hugepages16397

検証の結果、DBの初期化パラメーターMEMORY_SIZEを「5GB」と設定したときはDBが起動しませんでした。これは「5GB」が設定可能な値の範囲より小さいことが原因です。下記のとおり、「ORA-00093: Parameter memory_size outside valid range 6291456000 to 60190075699.」が出力されたことでそれがわかります。

                           
実行コマンド
oracle$ srvctl start database -db sbenchc_jjk_nrt;srvctl status database -db sbenchc_jjk_nrt
実行結果
PRCR-1079 : Failed to start resource ora.sbenchc_jjk_nrt.db
CRS-5017: The resource action "ora.sbenchc_jjk_nrt.db start" encountered the following error:
ORA-01078: failure in processing system parameters
ORA-00093: Parameter memory_size outside valid range 6291456000 to 60190075699.

(略)
  

MEMORY_SIZE=6000m

次に、上記「MEMORY_SIZE=5g」を実行したときに出力された有効な値の範囲の「MEMORY_SIZE=6000m」に設定して、検証を実施しました。

                                                                              
カテゴリーパラメーター
DBの初期化パラメーターMEMORY_SIZE6000m
MEMORY_MAX_SIZE0
SGA_TARGET0
PGA_AGGREGATE_TARGET0
USE_LARGE_PAGESONLY
カーネルパラメーターvm.nr_hugepages16397

DBの初期化パラメーターMEMORY_SIZEを「6000m」とすると、設定可能な範囲の値のため、下記のとおりDBを起動できました。

                           
実行コマンド
oracle$ srvctl start database -db sbenchc_jjk_nrt;srvctl status database -db sbenchc_jjk_nrt
実行結果
Instance sbenchc is running on node <ホスト名>
  

初期化パラメーターSGA_TARGET、PGA_AGGREGATE_TARGETの設定確認

統合メモリー管理機能を有効にしたとき、SGA、PGAにどのような割合でメモリーが割り当てられるかなどを確認してみようと思います。

ここでは下記の設定で検証を実施しました。

                                                                              
カテゴリーパラメーター
DBの初期化パラメーターMEMORY_SIZE6000m
MEMORY_MAX_SIZE0
SGA_TARGET0
PGA_AGGREGATE_TARGET0
USE_LARGE_PAGESONLY
カーネルパラメーターvm.nr_hugepages16397

DBの初期化パラメーターMEMORY_SIZEを「6000m」に設定してDBを起動した後、アラートログを確認しました。

             
アラートログ(/u01/app/oracle/diag/rdbms/sbenchc_jjk_nrt/sbenchc/trace/alert_sbenchc.log)の確認結果(抜粋)
2024-08-31T21:53:29.414037+09:00
WARNING: Since memory_size is set, memory_target is ignored ★1
WARNING: Since memory_size is set, memory_max_target is ignored ★1
WARNING: Since memory_size is set, sga_target set by user is ignored ★1
(略)
  

上記「★1」の箇所では、初期化パラメーターMEMORY_SIZEを設定した場合、「MEMORY_TARGET」「MEMORY_MAX_TARGET」は無視され、ユーザーが設定した「SGA_TARGET」の値は無視されるとの警告メッセージが出力されました。

(検証時には「MEMORY_TARGET」「MEMORY_MAX_TARGET」ともに明示指定せずデフォルト値(0)のまま検証を実施しました)

             
アラートログ(/u01/app/oracle/diag/rdbms/sbenchc_jjk_nrt/sbenchc/trace/alert_sbenchc.log)の確認結果(抜粋)
(略)
Starting ORACLE instance (normal) (OS id: 59291)
(略)
  memory_size              = 6000M
  sga_target               = 4800M ★2
(略)
  pga_aggregate_target     = 0
(略)
  

上記「★2」の箇所では、統合メモリー管理により初期化パラメーターSGA_TARGETの値として、MEMORY_SIZEに設定した値(6000M)の80%のメモリーサイズの「4800M」が自動的に割当てられていることを確認しました。


             
アラートログ(/u01/app/oracle/diag/rdbms/sbenchc_jjk_nrt/sbenchc/trace/alert_sbenchc.log)の確認結果(抜粋)
(略)
2024-08-31T21:53:35.418435+09:00
Enabling UNIFIED MEMORY for PDB 3 
Setting Unified PGA Pool max size 1200MB for PDB 3 ★3
Completed: Pluggable database SBENCHP opened read write 
2024-08-31T21:53:35.557513+09:00
(略)
Completed: ALTER DATABASE OPEN /* db agent *//* {0:0:0} */
  

上記「★3」の箇所では、統合メモリー管理がPDBにも有効になり、統合PGA Poolの最大サイズとして1200MBが設定された後、PDBが起動しました。

MEMORY_SIZEに設定した値(6000M)の20%のメモリーが割り当てられました。


初期化パラメーターUSE_LARGE_PAGESとの組み合わせ確認

これまではHugePagesを設定している状態で自動メモリー管理を利用することはできませんでしたが、統合メモリー管理では利用できるようになりました。

ここでは、HugePagesを設定した場合でも正常に統合メモリー管理が利用できるかを確認しました。

初期化パラメーターUSE_LARGE_PAGEに「AUTO_ONLY」を設定し、OSのカーネルパラメーターvm.nr_hugepagesに設定したページ数を超えるMEMORY_SIZEをDBのパラメーターに設定した場合に、足りないページ数を自動確保してDBが起動可能か、下記の設定で検証を実施しました。

                                                                              
カテゴリーパラメーター
DBの初期化パラメーターMEMORY_SIZE35g
MEMORY_MAX_SIZE0
SGA_TARGET0
PGA_AGGREGATE_TARGET0
USE_LARGE_PAGESAUTO_ONLY
カーネルパラメーターvm.nr_hugepages5120

カーネルパラメーターvm.nr_hugepagesのページ数を超える値を初期化パラメーターMEMORY_SIZEに設定してDBを起動しようとしたところ、 初期化パラメーターUSE_LARGE_PAGES='AUTO_ONLY'を設定していたにも関わらず、Oracle Base Database ServiceではORA-27109エラー等が出力され起動できませんでした。

これにより、Oracle Base Database Serviceでは初期化パラメーターUSE_LARGE_PAGESは「ONLY」を設定して起動する必要があることが分かりました。

                           
実行コマンド
oracle$ srvctl start database -db sbenchc_jjk_nrt;srvctl status database -db sbenchc_jjk_nrt   
実行結果
PRCR-1079 : Failed to start resource ora.sbenchc_jjk_nrt.db
CRS-5017: The resource action "ora.sbenchc_jjk_nrt.db start" encountered the following error: 
ORA-27109: Setting of values for parameters related to SGA creation is not compatible.
Help: https://docs.oracle.com/error-help/db/ora-27109/
. For details refer to "(:CLSN00107:)" in "/u01/app/grid/diag/crs/<ホスト名>/crs/trace/crsd_oraagent_oracle.trc".
CRS-2674: Start of 'ora.sbenchc_jjk_nrt.db' on '<ホスト名>' failed
CRS-2632: There are no more servers to try to place resource 'ora.sbenchc_jjk_nrt.db' on that would satisfy its placement policy
Instance sbenchc is not running on node <ホスト名>
  

統合メモリー管理のSGA、PGA間のメモリー調整確認

ここではSGA、PGA間のメモリー調整を確認するため、下記の設定でOLTPワークロードテストを実施しました。

                                                                                                                     
カテゴリーパラメーター
DBの初期化パラメーターMEMORY_SIZE6000m
MEMORY_MAX_SIZE0
SGA_TARGET0
PGA_AGGREGATE_TARGET0
USE_LARGE_PAGESONLY
カーネルパラメーターvm.nr_hugepages16397
使用するSwingbenchのシナリオ-SOE(Simple Order Entry)
Swingbenchの実行時間-1時間
Swingbenchの同時接続ユーザー数-500

この検証を実施する前に、実行中の各メモリー使用量を確認したところ、500同時ユーザー接続のため、実施前に比べて「total PGA allocated」のメモリー使用量が増加しています。

一方、テスト実施前に比べて「SGA:Shared Pool メモリー使用量」が「32MB」減っています。

SGA内の各使用量のうち「SGA:Buffer Cache」のメモリー使用量が「32MB」減っており、統合メモリー管理機能によるメモリー調整の結果、SGAが使用していた「32MB」がPGAに割当てられたと考えられます。

             
OLTPワークロードテスト実行前、実行中(3:59:07の結果を抜粋)の各メモリー使用量
### OLTPワークロードテスト実行前
        NO NAME                                                                         SUM_BYTES NOW
---------- --------------------------------------------------------------------------- ---------- -------------------
         0 PGA(CDB):total PGA allocated                                               1108039680
         0 PGA(PDB):total PGA allocated                                                   385024
         0 SGAメモリー使用量 TOTAL                                                     5009277824 2024/9/1 3:54:10
         1 SGA:Shared Pool メモリー使用量                                              889192448
         2 SGA:Buffer Cache メモリー使用量                                            3858759680
         3 SGA:Large Poolメモリー使用量                                                 83886080
         4 SGA:Java Poolメモリー使用量                                                         0
         5 SGA:その他メモリー使用量                                                    177439616
         6 PGA(CDB):cache hit percentage                                                       0
         6 PGA(PDB):cache hit percentage                                                       0
         7 PGA(CDB):maximum PGA allocated                                             3863746560
         7 PGA(PDB):maximum PGA allocated                                             2730214400
         8 PGA(CDB):total freeable PGA memory                                                  0
         8 PGA(PDB):total freeable PGA memory                                                  0
14 rows selected.
  
### OLTPワークロードテスト実行中(3:59:07の結果を抜粋)
        NO NAME                                                                         SUM_BYTES NOW
---------- --------------------------------------------------------------------------- ---------- -------------------
         0 PGA(CDB):total PGA allocated                                               3606819840
         0 PGA(PDB):total PGA allocated                                               2299363328
         0 SGAメモリー使用量 TOTAL                                                     4975723392 2024/9/1 3:59:07
         1 SGA:Shared Pool メモリー使用量                                              889192448
         2 SGA:Buffer Cache メモリー使用量                                            3825205248
         3 SGA:Large Poolメモリー使用量                                                 83886080
         4 SGA:Java Poolメモリー使用量                                                         0
         5 SGA:その他メモリー使用量                                                    177439616
         6 PGA(CDB):cache hit percentage                                                       0
         6 PGA(PDB):cache hit percentage                                                       0
         7 PGA(CDB):maximum PGA allocated                                             3863746560
         7 PGA(PDB):maximum PGA allocated                                             3202874368
         8 PGA(CDB):total freeable PGA memory                                                  0
         8 PGA(PDB):total freeable PGA memory                                                  0
  
14 rows selected.

Swingbenchの実行後、v$memory_dynamic_componentsディクショナリービューを確認しました。

unified pga poolが「MIN_SIZE」が「0」、「MAX_SIZE」が「33554432」となっており変動があります。

また、DEFAULT buffer cacheが「CURRENT_SIZE」は「3724541952」、「MIN_SIZE」が少し減って「3623878656」となっています。これは、統合メモリー管理がDEFAULT buffer cacheに割り当てられたメモリーの一部をunified pga poolに割り当てた結果であり、SGAとPGA間でメモリー調整されたといえます。

             
Swingbenchの実行後のv$memory_dynamic_componentsの確認結果
COMPONENT                   CURRENT_SIZE   MIN_SIZE   MAX_SIZE USER_SPECIFIED_SIZE OPER_COUNT LAST_OPER_TYP LAST_OPER LAST_OPER_TIME     GRANULE  CON_ID
--------------------------- ------------ ---------- ---------- ------------------- ---------- ------------- --------- ------------------ -------- ------
shared pool                    889192448  889192448  973078528                   0          3 SHRINK        DEFERRED  2024/8/31 22:13:52 16777216      0
large pool                      83886080   83886080   83886080                   0          0 STATIC                                     16777216      0
java pool                              0          0          0                   0          0 STATIC                                     16777216      0
streams pool                    33554432   33554432   33554432                   0        385 SHRINK        DEFERRED  2024/9/1 3:45:28   16777216      0
unified pga pool                       0          0   33554432                   0        219 SHRINK        DEFERRED  2024/9/1 3:44:28   16777216      0
memoptimize buffer cache               0          0          0                   0          0 STATIC                                     16777216      0
DEFAULT buffer cache          3724541952 3623878656 3724541952                   0        607 GROW          DEFERRED  2024/9/1 3:45:28   16777216      0
KEEP buffer cache                      0          0          0                   0          0 STATIC                                     16777216      0
RECYCLE buffer cache                   0          0          0                   0          0 STATIC                                     16777216      0
DEFAULT 2K buffer cache                0          0          0                   0          0 STATIC                                     16777216      0
DEFAULT 4K buffer cache                0          0          0                   0          0 STATIC                                     16777216      0
DEFAULT 8K buffer cache                0          0          0                   0          0 STATIC                                     16777216      0
DEFAULT 16K buffer cache               0          0          0                   0          0 STATIC                                     16777216      0
DEFAULT 32K buffer cache               0          0          0                   0          0 STATIC                                     16777216      0
Shared IO Pool                 134217728  134217728  134217728           134217728          0 STATIC                                     16777216      0
Data Transfer Cache                    0          0          0                   0          0 STATIC                                     16777216      0
In-Memory Area                         0          0          0                   0          0 STATIC                                     16777216      0
In Memory RW Extension Area            0          0          0                   0          0 STATIC                                     16777216      0
In Memory RO Extension Area            0          0          0                   0          0 STATIC                                     16777216      0
PGA Target                             0          0          0                   0          0 STATIC                                     16777216      0
ASM Buffer Cache                       0          0          0                   0          0 STATIC                                     16777216      0
  
21 rows selected.
  

検証に関するまとめ

Oracle Database 23aiから追加された新機能「統合メモリー管理」の検証結果は以上のとおりです。初期化パラメーター「MEMORY_SIZE」に有効な値を設定することで「統合メモリー管理」機能を活用できることを確認しました。

また、アラートログやディクショナリービューからも負荷状況に応じてSGA、PGA間のメモリー調整を自動的に行っていることも確認できました。

今回の検証でOracle Database 23aiの新機能である「統合メモリー管理」がメモリーリソースを有効活用できる一つの手段であることが確認できました。

SGA、PGAのチューニングについては、Oracle Databaseに任せることができるようになり、ユーザー側の管理の手間を低減できることがわかりました。

もし、リソースが足りない場合は、スケールアップで対応できるようなクラウド環境では積極的に利用を検討しても良いかもしれません。


最新のOracle Database 23aiのリプレースをご検討のお客様、お気軽にアシストまでお問い合わせください。


執筆者情報

2002年入社。 BI、帳票、電子帳票、印刷管理、文字管理、ワークフローなどの情報基盤製品のフィールドエンジニアを経て、2013年からはOracle Databaseのフィールドエンジニアとしてお客様へのプリセールス活動や技術支援を担当。
また、プログラミング等のスキルを活かして業務の自動化や工数削減にも積極的に取り組んでいる。
プライベートでは3児の父。



■本記事の内容について
 本記事に示した定義及び条件は変更される場合があります。あらかじめご了承ください。

■商標に関して
 ・Oracle®、Java、MySQL及びNetSuiteは、Oracle、その子会社及び関連会社の米国及びその他の国における登録商標です。
 ・Amazon Web Services、AWS、Powered by AWS ロゴ、[およびかかる資料で使用されるその他の AWS 商標] は、Amazon.com, Inc. またはその関連会社の商標です。
  文中の社名、商品名等は各社の商標または登録商標である場合があります。

関連している記事

  • Oracle Cloud
  • Oracle Database
2024.12.02

OCIでGPUインスタンスを構築してみた

OCIで提供されている生成AIサービスとGPUインスタンスを前回の記事「生成AIにGPUが適している理由」で紹介しました。本記事では、GPUインスタンスをデプロイして、インスタンス上でLLM(大規模言語モデル)の動作環境を構築する方法をご紹介します。

  • Oracle Cloud
  • Oracle Database
2024.11.15

Oracle Cloud VMware SolutionにおけるVMware HCXとは?

前回の記事でお伝えしたとおり、OCVSを構築するとVMwareの複数の機能が利用可能です。 それらの機能の中で、今回はHCXの概要や具体的な機能、OCVSでHCXを利用するメリットなどをお伝えします!

  • Exadata
  • Oracle Database
2024.10.23

Exadata X10Mの処理性能を徹底検証:X8M-2との比較で明らかに!

Oracle Exadata X10MではAMD社製のCPUが採用されたことで、DB Server、Storage ServerともにCPUの性能自体が向上しています。本記事をご覧の皆さんに、当社で実施したExadata X10Mの処理性能検証結果を共有します。

ページの先頭へ戻る