これは非常に広いことを理解しているので、設定を示し、私の焦点について具体的に説明します。
設定:
MYSQLを使用して既存のPHPアプリケーションを使用しています。ほとんどすべてのテーブルはMYISAMエンジンを使用しており、ほとんどの場合、数百万の行が含まれています。最大のテーブルの1つは、必要ですがパフォーマンスに影響を与えるEAV設計を使用しています。このアプリケーションは、MYSQLキャッシュを最大限に活用するように作成されています。これは、ページの読み込みごとにかなりの量のリクエストを要求し(これが原因の一部です)、ページの読み込みごとにDB全体のほとんどのテーブルを処理する必要があるほど複雑です。
長所:
- それは無料です
- MYISAMテーブルは、アプリケーションにとって重要なフルテキストインデックスをサポートします
短所:
- 設定方法により、MYSQLはアプリケーション全体で1つのCPUに制限されます。1つの非常に要求の厳しいクエリが実行された場合(またはサーバーに大きな負荷がかかっている場合)、他のすべてのクエリがキューに入れられ、サイトが応答しなくなります
- MYSQLキャッシングと「WITH」または「INTERSECT」の欠如は、キャッシュをより有効に使用するためにクエリを分割する必要があることを意味します。したがって、行われたクエリの数を乗算します。たとえば、数百万行の複数のテーブルでサブクエリを使用すると(適切なインデックスが作成されている場合でも)、現在/今後の負荷と上記のポイントで設定された制約(CPU使用率)で大きな問題になることがわかります。
来年にはスケールアップする必要があると感じていますが、必ずしもすぐにライセンス料を支払う準備ができているとは限らないので、アプリケーションの書き直しとDBの切り替えを考えていました。
検討中の3つのオプションは、mysqlを引き続き使用することですが、INNODBエンジンを使用すると、より多くのCPUパワーを活用できます。Oracle XEに適応し、4Gbデータベース、1Gb RAM、または1 CPU制限(これらはすべてまだ達成されていません)を拡張する必要がある場合にライセンスを取得します。またはPostgreSQLに適応する
したがって、質問は次のとおりです。
- フルテキストインデックスを失うと、3つのケースでパフォーマンスにどのような影響がありますか(oracleまたはpostgreSQLに同等のものがありますか?)
- oracleおよびpostgreSQLは、サブクエリ、WITH、およびUNION/INTERSECTステートメントでキャッシュをどのように活用しますか
- OracleとPostgreSQLはマルチコア/CPUパワーをどのように活用しますか(Oracleライセンスを取得した場合)
答えるのはもうたくさんあると思うので、ここでやめます。褒め言葉へのリンクがあれば、単純な/不完全な答えを気にしません。
さらに情報が必要な場合はお知らせください
よろしくお願いします。助けていただければ幸いです。