株式会社コーソル

KNOWLEDGE

コーソルの技術情報

コーソルでは経験豊かなエンジニアが、Oracle Databaseに関するお役立ち情報を発信しています。
データベースのチューニングや設定にお役立ていただけます。

KNOWLEDGE検索人気のキーワード

Oracle DB Tips

ORA-04031: 共有メモリーの??バイトを割当てできません

01.ORA-04031エラーとはどのようなエラーか?

Oracleは処理を実行するに当たり、共有プールから処理に応じてさまざまなサイズのメモリ領域を取得します。
要求したサイズのメモリを共有プールから獲得することに失敗した場合、ORA-04031エラーが発生します。

02.ORA-04031エラーのエラー出力例

ORA-04031: 共有メモリーの4096バイトを割当てできません("shared pool",
"SELECT * from DUAL","sga heap(2,0)","library cache")

エラーの数値、引数の意味は以下のとおりです。

4096                    割当てを要求したメモリのサイズ(バイト)
"shared pool"           メモリを割り当てようとしたSGAのメモリ領域
"SELECT * from DUAL"    割り当てようとしたオブジェクトの内容
"sga heap(2,0)",        確保を試みたメモリ領域の場所
"library cache"         割当てを要求したメモリのタグ

03.ORA-04031の一般的な発生要因と対処

ORA-04031は一般に以下の要因で発生します。

  • 共有プールの断片化
  • 共有プールサイズが小さい
  • OracleのBug

 

共有プールの断片化

ORA-04031発生時の要求メモリサイズが小さい場合、共有プールの断片化が進展し、割り当て可能なメモリサイズが小さくなっていることが原因である可能性があります。
断片化を抑制するためには、以下のいずれかの対処を行ってください。

  • 定期的な ALTER SYSTEM FLUSH SHARED_POOL;の実行 (システムの負荷が低い時間帯に実行すべき)
  • ラージプールの構成
  • 予約領域 SHARED_POOL_RESERVED_SIZE の拡張

 

また、アプリケーションの修正が可能であれば、SQLをバインド変数化することで断片化をある程度抑制することができる場合がありますが、有効性は状況によります。

共有プールサイズが小さい

共有プールサイズが小さい場合は、共有プールの拡張を検討してください。
適切な共有プールサイズは、Databaseで実行する処理の内容に強く依存するため、一概にお伝えすることができませんが、通常は最低でも512MBを割り当てることが望まれます。可能であれば1GB以上のサイズを割り当ててください。
なお、自動SGA管理、自動メモリ管理を使用すると、共有プールが意図せず小さいサイズになることがあります。このような事態を回避するために、自動SGA管理、自動メモリ管理を使用している場合でも、初期化パラメータ shared_pool_sizeに共有プールの最小値を設定することをお勧めします。

OracleのBug

頻繁に確認される動作ではありませんが、メモリーリークなどのOracleのBugにより、ORA-04031が発生する場合もありえます。
断片化への対処を実行しており、かつ、十分なサイズの共有プールの割り当てている場合でも、ORA-04031が頻発する場合は、アラートログ、トレースファイルをOracle Databaseのサポート窓口に提示して調査を依頼してください。
または、可能であれば新しいPSR(Patchset Release)へのアップグレードも検討して下さい。Bugが修正されている場合もあります。

04.ORA-04031に関するFAQ

ORA-04031発生後に共有プールをflushすれば断片化は解消しますか?

ORA-04031発生の直前に、共有プールのflush(ALTER SYSTEM FLUSH SHARED_POOL;)相当の処理が内部的に実行されています。すなわち、ORA-04031が発生したということは、flush処理を実行しても、断片化が解消しなかったことを示しています。
このため、ORA-04031発生後に共有プールをflushしても断片化は解消しません。
断片化を予防したい場合は、定期的にALTER SYSTEM FLUSH SHARED_POOL;を実行してください。ただし、このコマンドはシステムに与える影響が大きいため、負荷の高い時間帯に実行することは絶対に避けてください。

自動SGA管理、自動メモリ管理を使用すればORA-04031を完全に予防できますか?

自動SGA管理、自動メモリ管理は共有プールサイズなどのSGAコンポーネントのサイズを自動的に調整する機能です。共有プールの使用状況に応じて共有プールのサイズ拡張などを実行することで、ORA-04031の発生を軽減する可能性がありますが、完全に予防はできません。
また、自動SGA管理、自動メモリ管理を使用すると、共有プールが意図せず小さいサイズになる場合があるようです。このような事態を回避するために、自動SGA管理、自動メモリ管理を使用している場合でも、初期化パラメータ shared_pool_sizeに共有プールの最小値を設定することをお勧めします。

05.キーワード

ORA-04031 ORA-4031 共有プール 断片化 ALTER SYSTEM FLUSH SHARED_POOL

この記事の監修者

監修者の写真

舛井 智行 (ますい ともゆき)

営業本部 企画&マーケティング部 次長

《資格》

Oracle Master Gold、Oracle RAC Expert、Linux Expert、LPIC Level1、Dbvisit Standby Certified Associate、基本情報技術者

《略歴》

2004年コーソル入社。2019年まで一貫してOracle Databaseの設計・構築・運用のサービス提供に従事。リモートDBAやリモート監視のサービス化、働き方改革プロジェクトで人事制度改革を手掛ける。2019年からライセンス販売強化のため企画&マーケティング部に異動。DbvisitやToad、DPAの取扱開始、販売促進活動を推し進め、ライセンス販売事業の売上拡大に注力中。

《主な著書》

オラクルマスター教科書 Gold DBA Oracle Database AdministrationⅡ
オラクルマスター教科書 Silver DBA Oracle Database Administration I
オラクルマスター教科書 Silver SQL Oracle Database SQL
Oracleの基本 ~データベース入門から設計/運用の初歩まで
プロとしてのOracle入門
Oracle Database 10g Oracle Enterprise Manager 逆引きクイックリファレンス

《担当者様からの一言》

コーソルはOracle Databaseの技術力において日本有数の知見を有すると自負しています。Oracle Masterの最高峰資格である『Oracle Master Platinum』の取得者数も日本No.1です。Oracle Databaseのことはもちろん、それ以外のDBについてもリモートDBAサービスを始めとした様々なサービス、製品を駆使してお客様のお困りごとを解消いたします。お困りごとがあればコーソルまでご相談ください。

監修者の写真

峯岸 隆一 (みねぎし りゅういち)

インフラソリューション部 市ヶ谷クラウドサービスチーム シニアエキスパート

《資格》

Oracle Master Gold、ORACLE MASTER Platinum、Oracle RAC Expert、
Oracle Database Cloud Service Oracle Infrastructure as a Service Cloud 2017 Implementation Essentials、
Oracle Cloud Infrastructure 2018 Architect Associate、
Oracle Cloud Infrastructure 2019 Architect Professional、
AWS Certified Solutions Architect – Associate、OSS-DB Silver、
MySQL 5.6 Database Administrator、基本情報技術者、テクニカルエンジニア(データベース)

《略歴》

2006年コーソル入社。2021年までOracle Databaseを中心にMySQLやGoldenGateなど、多岐にわたる製品のサポート業務に従事。2021年から企画&マーケティング部に異動し、Nutanix NDBサービス化、Qlik Replicateサービス化、AWS、OCIなど様々な製品のサービス化、クラウド環境上の製品検証、ブログ執筆を手掛ける。2023年からOCI技術に磨きをかけるべくOCI基盤の設計・構築業務を遂行中 。

《主な著書》

オラクルマスター教科書 Gold DBA Oracle Database AdministrationⅡ
オラクルマスター教科書 Silver DBA Oracle Database Administration I
オラクルマスター教科書 Silver SQL Oracle Database SQL  Oracleの基本 ~データベース入門から設計/運用の初歩まで

《担当者様からの一言》

コーソルはOracle Database製品および周辺製品において特化した技術力を有している会社です。また、育成にも力を入れており、新卒などOracle Databaseの知識がないエンジニアでも数年でOracle Master Platinumを取得するほどのエンジニアに育て上げることに成功しています。クラウド分野(AWS、Oracle Cloud)にも積極的に進出しておりますので、Oracle Databaseに関するサービスをご要望であればプラットフォーム問わず対応できるコーソルにご連絡下さい。