3

私はすでに、JavaベースのゲームサーバーとしてUnion Platformを使用してJOOQを実装し、UnionPlatformのOrbiterMicro(Union JS Client)を使用してブラウザーで実行しています。

ただし、ゲーム内に30〜40人のアクティブなプレーヤーがいるイベントでは、ユニオンプラットフォームは速度の点で遅れています。

ゲームインスタンスごと(つまり、部屋ごと)に、すべてのクエリを実行する1つのファクトリ接続を構成しました。それがすることは、

各プレイヤーのターンについて、

  • プレーヤーは整数を入力でき、一連の条件チェック(4クエリ)の後、JOOQを介してデータベースを挿入/更新します。
  • 次に、整数のステータスを取得するために、ゲームのステータスを更新するための3つのリンクされたハッシュマップに効果的に変換される3つのクエリを再度実行します。

現在、応答に非常に時間がかかっているため、プレーヤーはパフォーマンスの問題を抱えています。ユニオンプラットフォームは実際には、インスタンスで1000人を超えるアクティブなプレーヤーを簡単に処理できると主張しています。つまり、これは事実上、JOOQクエリにいくつかの間違いがあることを意味します(私は多くのLEFT OUTER JOINを使用しました)。

したがって、スループットを改善し、各クエリのプロファイルを作成するための提案は大歓迎です。

4

1 に答える 1

4

それは私には通常のSQLチューニングの質問(またはおそらくいくつかの異なる質問)のように聞こえます。jOOQを使用すると実際のSQLを実行でき、OUTER JOIN正しいインデックス付けと制約なしで使用すると問題が発生する可能性があることを考えると、問題はSQL自体にある可能性があります。デバッグ/トレースログをオンにすると、jOOQは次のようないくつかの情報をログ出力に出力します。

デバッグレベル

  • SQLステートメント
  • 結果の最初の5つのレコード
  • ステートメントの実行時間

トレースレベル

  • DEBUGレベルと同じ
  • ステートメントの準備時間
  • バインド値
  • ステートメントバインド時間

これは、log4jまたはslf4jをjOOQとともにクラスパスに配置した場合に機能します。詳細については、このブログ投稿に記載されています

それが始まりです。YourkitProfilerJProfilerなどのツールを使用することもできます。そして明らかに、Postgresの実行計画を検討する必要があります。これについては、 Postgresのドキュメントにいくつかの兆候があります。

于 2011-12-19T12:57:39.377 に答える