0

私は、PHP Web アプリケーションで発生していたいくつかのパフォーマンスの問題の解決策を見つけることを任されています (基本的に、大量のユーザーをピーク トラフィック/負荷時間と組み合わせるときに、「失敗」ポイントに達しています)。これまでにわかったことは、MS SQL Server データベースにアクセスしようとするとボトルネックが発生するということです。システム管理者は、コードがデータベースにクエリを実行する量が多いため、おそらく SQL Server がコンテキストの切り替えを頻繁に行う必要があるためだと示唆しました。

ただし、コンテキストの切り替えとそれを減らす方法を詳しく調べたところ、アプリケーションコードレベルで実際にそうする方法についての漠然とした言及しか見つけることができませんでした。ほとんどの場合、「コードをリファクタリングして、非常に多くの呼び出しを行う」、または .Net 固有のヒント。

私たちは大規模で複雑なコードベースを扱っているため、システムを完全に書き直すことはできません。また、個々のクエリを可能な限り最適化しています。コードがデータベース サーバーをひっくり返さないようにするにはどうすればよいでしょうか。

現在、データベース サーバーの完全な統計情報はわかりませんが、MS SQL Server 2008 を実行するには十分な性能を備えており、最近まで問題なく動作していました。

ETA: 私は単なる開発者であり、権限を持っていないため、コンサルタントを雇うようなことはできません。上司に提案するつもりはありますが、根本的な問題の解決に向けてさらに取り組むために社内でできることを主に探しています.

コメントで説明したように、コンテキストの切り替えは他の何かの症状であり、それが実際に見られる問題を引き起こしていることを理解しています (データベースからの応答が遅い; OS のように、多くのスワッピングを行う)アプリケーションからの応答が遅くなりますが、それ自体が他のものが RAM を大量に消費している兆候です)。コンテキスト切り替えの原因は何ですか? アプリケーション コードからの大量のデータベース アクセス。問題は、個々のクエリは、監視ソフトウェアが示すように、現在取得できるのと同じくらい優れているため、この問題を解決するために他に何ができるでしょうか?

その後、管理者によるコンテキスト切り替えの使用が明確になりました。彼の説明によると、問題は、比較的小規模な呼び出しが多数行われていることであり、データベース サーバーが各呼び出しを順番に処理する際にそれらをキューに入れる必要があり、スクリプトが待機するため応答時間が長くなることが問題のようです。要求されたデータ。では、これらのデータベース呼び出しを組み合わせたり、MVC 構造の PHP アプリケーションがデータベースを呼び出す方法を調整して、スクリプトが常にデータベースを待機しないようにするための戦略はありますか?

4

1 に答える 1

2

SQL Server のパフォーマンスに問題がある場合は、SQL Server のパフォーマンスのトラブルシューティングとして対処してください。Waits や Queuesなどのよく知られた方法論がいくつかあります。SQL Serverパフォーマンス トラブルシューティング フローチャートは、ボトルネックを特定するために自由に使用できるさまざまな記事、ツール、方法論、および指標をまとめたものです。

問題が「コンテキストの切り替え」であると言うことは、有益ではなく、役に立たず、行動に移せません。記録として、 SQL Server のスケジューリング アーキテクチャが非常に特殊な方法で動作するため、SQL Server のトラブルシューティングには「コンテキストの切り替え」などの概念さえありません。これは、SQL Server パフォーマンスのトラブルシューティングが行われる方法ではなく、真の根本原因の分析にはほど遠いものです。解決策を試みる前に、問題を特定する必要があります。管理者が支援できない場合は、資格のあるコンサルタントに専門的な支援を求めてください。

はい、クライアントに何かをキャッシュし、サーバーへのクエリを回避できる場合は、定義上、常に良いことです。クライアントとプロキシがページをキャッシュし、HTTP サーバーにアクセスすることさえ回避できる場合は、さらに優れています。これらは、どのテクノロジー スタックにも当てはまります。

比較的小規模な呼び出しが多数行われているため、データベース サーバーがそれぞれを順番に処理する際にそれらをキューに入れる必要があり、スクリプトが要求されたデータを待機するため、応答時間が長くなります。それでは、これらのデータベース呼び出しを組み合わせるための戦略はありますか?

銀の弾丸はありません。ただし、適切に調整されたデータベースは、1 秒あたり多数の小さなリクエスト (1 秒あたり数千件) を問題なく処理できることを考慮してください。次の指標を測定しましたか:

これらは、どこに力を注ぐべきかを教えてくれる興味深い指標です。

于 2012-09-07T13:24:51.407 に答える