私は、PHP Web アプリケーションで発生していたいくつかのパフォーマンスの問題の解決策を見つけることを任されています (基本的に、大量のユーザーをピーク トラフィック/負荷時間と組み合わせるときに、「失敗」ポイントに達しています)。これまでにわかったことは、MS SQL Server データベースにアクセスしようとするとボトルネックが発生するということです。システム管理者は、コードがデータベースにクエリを実行する量が多いため、おそらく SQL Server がコンテキストの切り替えを頻繁に行う必要があるためだと示唆しました。
ただし、コンテキストの切り替えとそれを減らす方法を詳しく調べたところ、アプリケーションコードレベルで実際にそうする方法についての漠然とした言及しか見つけることができませんでした。ほとんどの場合、「コードをリファクタリングして、非常に多くの呼び出しを行う」、または .Net 固有のヒント。
私たちは大規模で複雑なコードベースを扱っているため、システムを完全に書き直すことはできません。また、個々のクエリを可能な限り最適化しています。コードがデータベース サーバーをひっくり返さないようにするにはどうすればよいでしょうか。
現在、データベース サーバーの完全な統計情報はわかりませんが、MS SQL Server 2008 を実行するには十分な性能を備えており、最近まで問題なく動作していました。
ETA: 私は単なる開発者であり、権限を持っていないため、コンサルタントを雇うようなことはできません。上司に提案するつもりはありますが、根本的な問題の解決に向けてさらに取り組むために社内でできることを主に探しています.
コメントで説明したように、コンテキストの切り替えは他の何かの症状であり、それが実際に見られる問題を引き起こしていることを理解しています (データベースからの応答が遅い; OS のように、多くのスワッピングを行う)アプリケーションからの応答が遅くなりますが、それ自体が他のものが RAM を大量に消費している兆候です)。コンテキスト切り替えの原因は何ですか? アプリケーション コードからの大量のデータベース アクセス。問題は、個々のクエリは、監視ソフトウェアが示すように、現在取得できるのと同じくらい優れているため、この問題を解決するために他に何ができるでしょうか?
その後、管理者によるコンテキスト切り替えの使用が明確になりました。彼の説明によると、問題は、比較的小規模な呼び出しが多数行われていることであり、データベース サーバーが各呼び出しを順番に処理する際にそれらをキューに入れる必要があり、スクリプトが待機するため応答時間が長くなることが問題のようです。要求されたデータ。では、これらのデータベース呼び出しを組み合わせたり、MVC 構造の PHP アプリケーションがデータベースを呼び出す方法を調整して、スクリプトが常にデータベースを待機しないようにするための戦略はありますか?