web-dev-qa-db-ja.com

Oracleのメモリ使用量を制限するにはどうすればよいですか?

Oracleの自動メモリ管理を使用したいと思います。制限は約4GBです。 (これまでの経験から、これは私の開発用PCにとって十分であり、それよりも少ないパフォーマンスの問題については、簡単に理解できることがわかっています。)

私はこれらが従うべき指示であると信じています:

Oracle 12自動メモリ管理

つまり、自動メモリ管理を有効にするには、memory_targetと(オプションで)memory_max_targetを設定します。前者のパラメータは動的な値である必要があり、後者はより厳しい制限である必要があります。これは、データベースを停止/開始するときにのみ変更できます。

これらをsysdbaとして次のように設定しました。

SQL> alter system set memory_target = 4G scope = spfile;

System altered.

SQL> alter system set memory_max_target = 8G scope = spfile;

System altered.

値を確認してください

SQL> show parameter target;

スコープは、現在の稼働時間の「メモリ」、「spfile」または「両方」にできます。再起動するので、spfileを選択します。

SQL> shutdown immediate
Database closed.
Database dismounted.
Oracle instance shut down.
SQL> startup

ただし、これは単純すぎました。

ORA-00838: Specified value of MEMORY_TARGET is too small, needs to be at least 13104M

元に戻すのは難しくありませんが、私の意見では、メモリの調整方法をすぐに明らかにすることもできないため、以下に投稿した内容を投稿し、上級者のポスターで修正/細断できるようにします。どちらの場合でも、ここの1か所に配置できるのは良いことだと思います。

8
nsandersen

問題は、データベースのインストール時に、競合する他のパラメーターが設定されたことでした。そのため、これらを「spfile」から「pfile」にエクスポートし、バックアップして編集し、テストして、pfileからspfileにインポートする必要がありました。

SQL> create pfile='some/file/path' from spfile;

File created.

次に、競合するパラメーターをゼロに設定します。

...
--*.pga_aggregate_target=3270m
*.pga_aggregate_target=0m
...
--*.sga_target=9811m
*.sga_target=0m
...

次に、もう一度起動してみます。

SQL> startup pfile='some/file/path';

Oracle instance started.
...

上記のように、memory_targetパラメータとmemory_max_targetパラメータを確認します。物事に満足したら、私が行った設定を維持するために:

SQL> create spfile from pfile='some/file/path';

File created.
5
nsandersen

タイトルにある元の質問に答えるには:

12c以降、SGAとPGAの両方を簡単に制限できます。以前のリリースでは、SGAはsga_max_sizeまたはデータベースがsga_max_sizeを計算した他のパラメーターによっても制限されていました。

問題のある部分は通常PGAであり、単純な制限値はいくつかの回避策だけではありませんでしたが、pga_aggregate_limitパラメーターを使用して簡単に制限できます。

5
Balazs Papp