Javaおよびc#の複数のクライアントで構成される会社のソフトウェアスイートの適度な量のトラフィックを処理するMicrosoft SqlServerがあります。
'Suspended'クエリで過負荷になっています。それらは最終的には通過しますが、一部はタイムアウトしています(特に書き込み)。クエリは主に読み取りです。
これをスピードアップする方法、または他の方法で修正する方法はありますか?
これが a picture です。私のアクティビティモニターで、私が話していることを示しています。
補足:しばらくの間、MySQLへの移行を計画しています。それはまったく役に立ちますか? MS SQLが強力であることは知っていますが、デフォルトのRead-Committedの場合、何か害を及ぼす可能性がありますか?
わかりました、問題を理解しました。
MS Sqlのデフォルト設定では、サーバーのすべてのコアを使用して大規模なクエリを実行します。読み取りが大きいため、処理されるのを待っているクエリの長い行が積み重なっていた。
これを修正するために、並列処理の最大度を無制限ではなく2コア(サーバーでは8)に設定し、並列処理のコストしきい値を5から10(秒)に設定しました。これは、並列処理が開始される時間です。クエリ用。
どちらも、サーバーを右クリックして[プロパティ]を選択し、[詳細設定]タブをクリックすると、SQL Server ManagementStudioに表示されます。
私は問題を説明して解決したこの記事を見つけました:
http://www.brentozar.com/archive/2013/08/what-is-the-cxpacket-wait-type-and-how-do-you-reduce-it/
スクリーンショットに表示されている待機タイプは次のとおりです。
(これらは両方とも [〜#〜] msdn [〜#〜] からC&Pされました。)
MSDNでは、クエリの調整や上記のインデックスの追加を推奨しています。これは、SQLServerをジャンクして別のものに切り替えるよりもおそらく良い最初のステップです。 (問題がクエリである場合は、MySql、IMHOではまだ非効率的です。)したがって、 Brent Ozarの待機統計リソース とを確認することをお勧めします。 トップ10の高額なクエリ のようなものを探しています。うまくいけば、それはあなたを正しい方向に向けるでしょう。