2

次の問題について、ヒントやガイダンスを提供できるかどうか疑問に思っていました。

環境タイプ: 小規模オフィス、約 20 ユーザー。ネットワーク: すべてのサーバー、ワークステーションは単一のサブネットに属します インフラストラクチャ: 仮想化された Web サーバーと仮想化されたデータベース サーバー。

現在、Apache 2.2.22 (Win32) および PHP 5.3.10 を実行している Web サーバー (Win7SP1 x64) があります。データベース (SQL2k8 Express) に接続してプロシージャを呼び出すいくつかのページを作成しました。プロシージャは基本的に、結合と条件を使用した基本的な選択ステートメントです。結果セットが返されると、PHP は結果セットを 1 行ずつループし、通過する行を表示します。

時々、結果ページの読み込みに非常に時間がかかり、結果セットが表示されず、Web ブラウザーの読み込みバー/アイコンが点滅することがあります。ロードの最後に空白の画面が表示される場合があります。これは通常、クエリ接続がタイムアウトしたことを意味するか、結果セットが返される場合があります。たとえば、通常の動作では、ページの読み込みに約 1 ~ 3 秒かかりますが、奇妙な場合には最大 20 ~ 30 秒かかる場合があります。

SQLSVR Mgmt Studio でクエリを実行すると、結果セットを返すのに約 5 秒かかるクエリが、Web サーバーにロードするのに約 15 秒かかる場合があることに気付きました。

貧弱な PHP コーディングがスローダウンを引き起こす可能性があることは知っていますが、私のコーディングはそれほど悪くないと確信しているので、奇妙なパフォーマンス動作に少し困惑しています。

そのため、問題を診断または特定する方法についてヒントを提供したり、私が調査できる領域をアドバイスしたりできれば、それは素晴らしいことです。Apache ログ、SQL SVR ログ、およびパフォーマンス インジケータがあることは知っていますが、私はまだこの分野にかなり慣れていないため、取るべきアプローチ/方法論に本当に迷っています。

たとえば、Apache などで有効にする必要がある特定の mod または使用する必要がある Apache サーバーの種類、Web サーバーの接続ソケットなどはありますか?

PHP クエリ/プロシージャ コールの例

$queryStatement = "exec myProc @para1='asd'";
$prepare = $dbConnect->prepare($queryStatement);
$result = $prepare->execute();
WHILE($result = $prepare->fetch(PDO::FETCH_ASSOC)){
set_time_limit(180);
echo $result
}

みんな乾杯:)

4

1 に答える 1

0

SQL Server パフォーマンスのトラブルシューティングへのアプローチ方法について、いくつかお読みになることをお勧めします。待機とキューの方法論は良い出発点ですが、まったくの初心者であれば、少し抽象的すぎるかもしれません。ボトルネックを特定するためのより実践的なアプローチである「SQL Server のパフォーマンスの問題のトラブルシューティング」の記事もあります。SQL Server カスタマー アドバイザリ チームは、役立つパフォーマンス トラブルシューティング フローチャートをまとめました。また、 Professional SQL Server 2008 Internals and TroubleshootingTroubleshooting SQL Server - A Guide for the Accidental DBA (他にも多数あります)などの優れた書籍が多数あります。

あなたが説明したものと同様の症状を引き起こすいくつかの考えられる原因:

  • 不適切なクエリ プラン。1 ~ 2 秒で実行される良い計画が得られることもありますが、30 秒かかる悪い計画が得られることもあります。この問題については、アプリケーションでは遅く、SSMS では高速ですか? で詳細に説明されています。パフォーマンスの謎と調査を理解するには、実行計画を取得して比較する必要があります。ただし、症状としては、問題のあるページが応答しているのに、突然 30 秒の読み込み時間で応答しなくなり、しばらく応答しないままになり、不思議なことに再び応答するようになります。
  • 更新時のロック競合。これは、コミットを待っている書き込みの背後で読み取りがブロックされていることを意味します。これにより、散発的な 1 回限りの奇妙なページが応答しなくなります。しかし、30 秒の読み込みは 30 秒の書き込みを意味しますが、これはありそうもありません。
  • データベースの成長イベント、特にログの成長イベント。これは、まさにあなたが説明した症状を引き起こします.30〜40秒のロードに30〜40秒かかる奇妙な、1回限りの応答のないページ。また、これが発生すると、サイトのどのページも読み込みに 30 ~ 40 秒かかり、その後すべてが再び応答するようになります。これは、データベース ファイル (特にログ ファイル) が拡大しなければならないことによって説明されます。30 ~ 40 秒は、ファイルを展開してゼロで初期化するのに必要な時間です。幸いなことに、これは非常に簡単に調査できます。増加イベントはパフォーマンス カウンターで確認できます。SQL Server、データベース、オブジェクト、 ログの増加: データベースのトランザクション ログが展開された合計回数。データベースでこのカウンターがゼロ以外の場合は、原因である可能性があります。残念ながら、データ ファイルの増加はそこではキャプチャされませんが、既定のトレースでキャプチャされます(リンクされた記事に読み取り方法が示されています)。ログの増加は、単純ではない復旧モデル セットがあり、ログ バックアップが発生しないことも明らかにすることに注意してください。ログはディスク全体がいっぱいになるまで増加する可能性があります

これらは、見る必要のあるものの表面をかろうじてすくい取ったいくつかの基本的なアイデアにすぎません... 残念ながら、特効薬はありません。

于 2012-10-30T09:49:30.543 に答える