web-dev-qa-db-ja.com

SQL Serverを再起動するとスピードアップしますか?

一部のDBAがSQL Serverを非常に頻繁に、場合によっては毎晩再起動することに気づきました。私は彼らがメモリを解放するために、あるいはおそらくクエリもスピードアップするためにそれを行うと信じています。再起動後にクエリプランを再コンパイルする必要があることは知っていますが、それを含めても、この方法には実質的なメリットがあるのでしょうか。

SQL Serverを毎日再起動すると、SQLサーバーの実行が速くなるのは本当ですか?

22
MAK

サーバーを再起動することは、おそらくパフォーマンスに最も影響を与えるものの1つです。これは、データのコールドキャッシュ、クエリプランのコールドキャッシュを強制し、すべてのSQL Server内部キャッシュもプロセス内で無効化されることを意味します。運用統計DMVで収集されたすべての統計を破棄することで、何かがうまく調査される可能性が減ることは言うまでもありません。

この慣行を裏付ける公式のガイダンスはありません。これが評判の良い優れた実践例で言及されたことは一度もありません。しないでください。

37
Remus Rusanu

他の答えは良いですが、重要な部分、Windowsのファイルキャッシュがありません。

64ビットのWindowsでは、Windowsがファイルをキャッシュするために使用するメモリの量に上限はありません。 Windowsはシステムのメモリを完全に枯渇させる可能性があり、その時点でディスクへのスワップを開始します。それはいくつかの場所で文書化されています:

SQL Serverを再起動することにより、SQLにメモリを強制的に割り当て、Windowsにメモリを提供させ、ページングが一時的に停止します。 SQLはメモリ使用量がゼロに近づくと再び開始され、徐々に増加します。また、ボックスが再びメモリ不足になると、一時的に再起動が役立ちます。 OS全体を再起動すると、Windowsのファイルキャッシュの使用も強制的に停止されます。

実際の修正:Windowsサーバーからのファイルのコピーを停止するか、上記のブログ投稿に記載されているように、Dynamic File Cache Serviceで使用中のファイルキャッシュの量を制限します。

28
Brent Ozar

クエリを高速化する場合は、 パラメータスニッフィング が関係している可能性があります。がらくた計画がキャッシュされ、その後の不適切な呼び出しに適用された場合、再起動の奇跡により、共通/正しい計画がキャッシュされます。それが事実である場合、他の人が指摘したように、振る舞いを修正するための無限に良い方法があります。ただし、ボックスの再起動を停止するまで、根本原因分析を実行する方法はありません。

11
billinkc

サービスのプロパティを変更したり、すぐに有効にする起動トレースを設定したりしない限り、SQL Serverを再起動しないでください。

@RemusRusanuは多くのポイントを述べてきたので、多くのキャッシュをクリアし、SQL Serverに多くの不要な起動作業を実行させます。

このサーバーは専用のSQL Server /データベースサーバーではないようです。運用データベースサーバーの目的は1つだけにすることをお勧めします...データベースサーバーになることです。その場合、OSに十分なメモリとリソースを確保し、その他すべてをSQL Serverに割り当てます。これにより、他のアプリケーションやサーバーの役割が不足することがなくなります。

11
Thomas Stringer

すべてが正しく行われている場合は、MSSQLサーバーを再起動/再起動する必要がない場合があるという意見に同意します。
私にとってこれは、誰もが有能であり、何でも修正できるシナリオに適用されます。

私はDBAではありません。私はソフトウェアアーキテクトであり、その一部にはデータベーススキーマ全体をゼロから構築すること、および残念ながら完全にサードパーティのデータベースを使用すること[〜#〜]いいえ[〜#〜]制御。
当社の主要なサードパーティデータベースの1つを作成して維持している人々は、それをほとんど機能させませんでした。

私もセキュリティの専門家でもネットワークエンジニアでもないことを言いましたか?

  • 少なくとも1つはメジャーウィンドウのOSアップデート、セキュリティアップデート、BIOSアップデート、OS/MSSQLサービスパック、またはMSSQL累積アップデートが毎月または2か月にリリースされる予定です。
  • これらを適時に適用することは、四半期ごとにサーバーを再起動/再起動することを意味します。
  • イントラネット内で操作している場合でも、セキュリティ更新プログラムを適用しないのはなぜですか?
  • 私たちのPHIイントラネットWebサイトでSSLを使用することが許可されている場合は、絶対的なネットワークがないため、SSLを使用します。私は妄想だと思います。


私にとっての質問は次のようになります:SQL Serverを3か月ごとより頻繁に再起動する必要がありますか?

パフォーマンスの向上を約束するためのリスタートのスケジューリングは、雨のために踊るようなものです。
たぶん来るかもしれないし、そうでないかもしれないが、何が雨を降らせたのかはっきりとはわからない。

  • 定期的なメンテナンスが原因でサーバーを再起動した後にパフォーマンスが大幅に向上した場合は、その原因を調査する必要があります。
  • 問題があり、何が原因かわからない場合は、サービスとジョブを停止して変数を減らし、メモリリークのようなもの(このような極端な場合)を見つけて、一部のサービスを有効にしてサーバーを再起動/再起動しますオフ(またはトレースがオン)は、他のサービスを原因として除外するのに役立ちます。

私はあなたに言いたくない[〜#〜]決して[〜#〜]トラブルシューティングするために再起動する必要があるフェイルオーバーを発行または確認しますが、不明なパフォーマンスの問題がランダムに発生しないように、再起動のスケジュールに問題がありますdo

Onlyの例外は、不正なサードパーティデータベースを管理していて、1週間または2週間に1度再起動することだけが動作を維持する唯一の方法であり、修正または触れることさえできない場合です。
それでも、修正を探し、それを所有者と共有し、解決されるまで地獄を築く必要があります。

2
MikeTeeVee