複数のOracleインスタンス—これは良い方法ですか?


9

私のクライアントの1つが、Oracleのインスタンスが3つあるSolarisマシンに製品のdbを配備しました。したがって、現在、同じマシン上でOracleのインスタンスが4つ実行されています。そして今、パフォーマンスの問題が発生しています。

私は他のインスタンスやマシンにアクセスできず、私が持っているすべてのツールはalert.log、AWR、ADDMです。複数のインスタンスに関連するものがあることはわかっていますが、それを証明することはできません。

それで、私の質問は、あなたは同じような状況を経験しましたか?どのように対処すればよいですか?複数のインスタンスに関連するパフォーマンスの問題の原因を特定するにはどうすればよいですか?

回答:


8

Isaac、できれば1つのサーバーで1つのインスタンスを実行し、さまざまなアプリケーションをスキーマとサービスとしてその単一のデータベースに実装します。サーバーに十分なメモリがあれば、アプリケーションがすべてOracleの良き市民のように動作するのであれば問題はありません。バインド変数を使用しないアプリケーションがあるとすぐに、ホストにますます苦痛が生じます。既存の接続を再利用する代わりに、数秒ごとに新しい接続を作成し続けるアプリケーションについても同じです。自動コミットなども状況の改善には役立ちません。アプリケーションの通常の動作は何ですか?大規模な更新を行いますか?いつコミットしますか?1時間に生成されるREDOの量は?アプリはバインド変数を使用していますか?多くの場合、オンラインREDOログファイルの場所は重要です。アプリが大量のやり直しを生成する場合(またはこれを行う他のアプリと競合する場合)、セッションはログファイルの書き込みが完了するのを待機しているため、ログライターの速度が低下し、パフォーマンスが大幅に低下します。REDOが専用のRAID-10ディスク上にあるディスクレイアウトをお客様に提供し、これがどれだけ役立つかを確認してください。また、メモリ割り当て状況も確認してください。利用可能なメモリを公平に再配分する必要があるかもしれません。

これが役に立てば幸い


あなたは正しいです。インスタンスを監視し、可能な限り最適化を実行します。しかし、パフォーマンスは安定しておらず、理由が説明されずに低下することがあります(私たちの側から)
Isaac A. Nugroho

アイザック、データベースはどのくらいの頻度で再起動されますか?それはどのバージョンですか?自動統計プロセスによって生成された列のヒストグラムはありますか?バインド変数とオプティマイザの事前プレビューを使用していますか?
ik_zelf 2011年

2

同じサーバー上で複数のインスタンスを実行することは可能であり、場合によっては必要です。oratabは、複数のインスタンスの管理を処理するように特別に設計されています。複数の独立したアプリケーションがある場合は、アプリケーションごとにインスタンスを用意することをお勧めします。

十分なメモリがあることが重要です。OracleはSGAを共有メモリに構築します。十分なメモリがない場合、SGAまたはプロセスはスワップインおよびスワップアウトを開始します。これはスラッシングと呼ばれ、パフォーマンスが大幅に低下します。

小さいSGAで実行するようにインスタンスを調整できる場合があります。Oracleは、SGAサイズの調整に役立つツールを提供しています。インスタンスのSGAが過度に大きい場合、すべてのインスタンスにペナルティが科されます。

重要なメモリのもう1つの用途は、バッファスペースです。これは二次キャッシュとして機能し、重要な読み取りI / Oを排除できます。

実行sar(UnixベースのO / Sを想定)すると、問題の場所を適切に診断できます。おそらく問題は、スワッピングまたはディスクI / Oの飽和です。RAMを追加することで、これらの問題のいずれかが解決される可能性があります。

ディスクI / Oの飽和は、一部のテーブルスペースを他のディスクに移動することでも処理できます。通常、I / Oができるだけ多くのディスクに分散されるようにOracleを構成します。

編集:これらは、個別のインスタンスを必要とする場合があるいくつかのケースです。

  • 同じサーバーで異なるバージョンのOracleを実行する場合は、常に必要です。アプリケーションは常に認定されているわけではなく、最新バージョンで動作するわけではありません。
  • ある時点に自動的にロールバックできるインスタンスが必要になる場合があります。(私はお勧めしませんが、これを自動テスト環境に使用しました。)
  • アプリケーションにハードコードされたスキーマ参照がある場合、名前空間の衝突に対処するために異なるインスタンスが必要になる場合があります。
  • セキュリティ要件は、個別のインスタンスを使用する方が扱いやすい場合があります。この場合、別のサーバーを使用するのが適切な場合があります。
  • 同じサーバー上で同じデータベースの異なるバージョン(開発、テスト、ユーザー承認、トレーニング、および本稼働)を実行することは、別々のインスタンスを使用する方が安全です。これらの環境のすべてを同じサーバーで実行するのではなく、同じサーバーで2つ以上の環境を実行することがよくあります。

複数のインスタンスを実行するために必要な例を提供できますか?
ScottCher

1
@ScottCherいくつかのケースを提供するために返信を編集しました。
BillThor 2011年

1

最も重要なリソースはRAMです。

実行中の各Oracleインスタンスは、起動直後で負荷がかかっていないときに、独自のRAMを独自に割り当てます。

10gの10gと8つのインスタンスの11gを実行していますが、これらは開発サーバーです。OSの再起動後、一部のOracleサービスは自動的に開始されず、手動で開始する必要があります。Oradim-startup -sid xxx。

自動メモリ管理を使用し始めたばかりですが、状況はSQL Serverとは異なります。SQLServerでは、ディスク容量が許す限りデータベースを追加できます。

私の場合、1台のマシンにインスタンスが増えると、各インスタンスのSGAが小さくなり、プリコンパイルされたSQLをキャッシュできなくなり、マシンはSQLコンパイルを多く実行する必要があり、パフォーマンスが低下します。

RAMを追加すると、状況に役立つ場合があります。


2
SQLサーバーが異なると言う理由は、より専門的なことです。プロセスのグループとその専用メモリはインスタンスです。SQL Serverデータベースを追加しても新しいプロセスが追加されない場合、それはインスタンスではありません。その場合は、スキーマを追加するほうがはるかに簡単です。
ステファニーページ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.