sql >> データベース >  >> RDS >> Sqlserver

ASYNC NETWORK IO待機タイプをどうするか?

    この待機タイプは以前に見たことがありますね。まあ、それは確かに多くの混乱を引き起こしている待機タイプです。すぐに焦点を当てるのは一般的に「ネットワーク」という言葉ですが、多くの場合、それはネットワークとは何の関係もありません。
    ASYNC_NETWORK_IO待機タイプは通常2種類の症状を引き起こします。最初の症状は、対応するクライアントアプリケーションが特定のデータセットを確認/処理するのを待機し、SQLServerにさらにデータを処理/確認する準備ができていることを通知します。 2番目の症状は、アプリケーションとデータベースインスタンス間のネットワークにパフォーマンスの問題がある可能性があることです。バックグラウンドでは、SQL Serverは、データの消費が完了。 ASYNC_NETWORK_IOは、アプリケーションがバックエンドデータベースから必要なデータを読み取る効率が低いことを示す兆候です。基盤となるネットワークにも問題があり、データが処理され、信号がクライアントからサーバーに返送されている間、待機時間が長くなる可能性があります。

    この待機の考えられる原因は次のとおりです。

    • アプリケーションコードがデータを正しく取得しない
    • クライアントから要求されている大規模なデータセット
    • クライアント側またはアプリケーション側で発生するデータの過剰なフィルタリング
    • カード、スイッチなどの不適切に構成されたネットワークデバイス

    大まかに言えば、DBAは次のことを確認する必要があります。

    • アプリケーションコードを確認し、アプリケーションがデータを正しく/効率的に読み取っていることを確認します。たとえば、アプリケーションは一度に1つの行を処理するためだけに、多数の行をプルバックしていますか?
    • クライアント/アプリケーション側での不要なデータフィルタリング?行を制限します。

    上記の項目をチェックアウトしても、ASYNC_NETWORK_IOの問題が残っている場合は、ネットワークが原因である可能性があります。調べることができるものは次のとおりです。

    • アプリケーションとバックエンドデータベースインスタンス間のネットワーク通信リンクを調べて、帯域幅を確認します。
    • sys.dm_io_virtual_file_statsを使用して、負荷または距離による一般的な遅延についてネットワークをテストします
    • データベースサーバーのNIC構成を調べて、障害や設定が欠落していないことを確認します。

    ASYNC_NETWORK_IO WAIT TYPEは確かにネットワーク関連の問題である可能性がありますが、多くの場合、データを効率的に処理していないクライアントアプリケーションが原因である可能性があります。後者が実際に当てはまる場合、これはDBASと開発者が協力して、バックエンドデータベースのパフォーマンスの最大の利益のためにアプリケーションが本当に必要とするものを理解する機会です。ほとんどのデータフィルタリングがSQLServer内で実行されるようにすることは、ビューを介して、またはトランザクション構文のより具体的なwhere条件を介して達成できるベストプラクティスです。

    SQL Serverでカタログ化されたDMVと拡張イベントを使用してASYNC_NETWORK_IO待機を監視および測定する方法は多数ありますが、SQL Server DBAのコミュニティでは、待機タイプの根本原因を効率的に特定できるQuestのSpotlightCloudを確認することをお勧めします。過去の期間にわたる消費。


    1. Entity Framework + PostgreSqlでARRAYを使用する方法はありますか?

    2. 結果を表示せずにSQLクエリを実行する方法

    3. 主キーを変更する

    4. n分ごとに関数を呼び出すようにタイマーを設定するにはどうすればよいですか?