web-dev-qa-db-ja.com

MS Sql Serverが「一時停止」クエリで過負荷になり、ほとんどが読み取りになります。これを修正する方法はありますか?

Javaおよびc#の複数のクライアントで構成される会社のソフトウェアスイートの適度な量のトラフィックを処理するMicrosoft SqlServerがあります。

'Suspended'クエリで過負荷になっています。それらは最終的には通過しますが、一部はタイムアウトしています(特に書き込み)。クエリは主に読み取りです。

これをスピードアップする方法、または他の方法で修正する方法はありますか?

これが a picture です。私のアクティビティモニターで、私が話していることを示しています。

http://i.imgur.com/9ADDASf.png

補足:しばらくの間、MySQLへの移行を計画しています。それはまったく役に立ちますか? MS SQLが強力であることは知っていますが、デフォルトのRead-Committedの場合、何か害を及ぼす可能性がありますか?

4
AAA

わかりました、問題を理解しました。

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/

0
AAA

スクリーンショットに表示されている待機タイプは次のとおりです。

  • LCK_M_X-タスクが排他ロックの取得を待機しているときに発生します。
  • CXPACKET-クエリプロセッサ交換イテレータを同期しようとすると、並列クエリプランで発生します。待機時間が長く、クエリのチューニング(インデックスの追加など)で削減できない場合は、並列処理のコストしきい値を調整するか、並列処理の度合いを下げることを検討してください。

(これらは両方とも [〜#〜] msdn [〜#〜] からC&Pされました。)

MSDNでは、クエリの調整や上記のインデックスの追加を推奨しています。これは、SQLServerをジャンクして別のものに切り替えるよりもおそらく良い最初のステップです。 (問題がクエリである場合は、MySql、IMHOではまだ非効率的です。)したがって、 Brent Ozarの待機統計リソース とを確認することをお勧めします。 トップ10の高額なクエリ のようなものを探しています。うまくいけば、それはあなたを正しい方向に向けるでしょう。

2