SQL Serverを再起動すると速度が上がりますか?


22

一部のDBAがSQL Serverを非常に頻繁に、時には夜間でも再起動することに気付きました。メモリを解放するために、またはクエリを高速化するために、彼らがそれを行うと信じています。再起動後にクエリプランを再コンパイルする必要があることは知っていますが、それを含めて、このプラクティスに最終的なメリットがあるのではないかと考えています。

SQL Serverを毎日再起動すると、実行速度が向上するのは本当ですか?

回答:


37

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

このプラクティスを裏付ける公式のガイダンスはありません。良いプラクティスの評判の良い仕事で言及されたのを見たことがありません。しないでください。


同意しません。SQL Serverは、セキュリティパッチとMSアップグレードを定期的に再起動する必要があるWindowsサーバーでホストされます。パフォーマンスの問題を解決し、サーバーの再起動に依存しないためには、SQLの設計を改善することが重要だと思いますが、時にはそれは必要なステップです。
Fandango68

27

他の答えは良いが、重要な部分が欠けている:Windowsのファイルキャッシュ。

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

SQL Serverを再起動すると、SQLがメモリを強制的に放棄し、それによりWindowsがより多くのメモリを使用できるようになり、ページングが一時的に停止します。SQLは、ほぼゼロのメモリ使用量で再び起動し、徐々に上昇します。また、ボックスのメモリが再びなくなると、再起動が一時的に役立ちます。OS全体を再起動することにより、Windowsのファイルキャッシュの使用を強制的に停止します。

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


3
+1問題を認識していましたが、動的キャッシュサービスを使用してキャッシュを制限できることを認識していませんでした。
マークストーリースミス

メモリをMINとMAXに「固定」することで(同じKB量である必要がありますが)、SQL Serverが他のWindowsサービス/アプリケーション/機能し続けるためのネットワーク要求。これは私の習慣であり、うまく機能しています。他に考えはありますか?
SnapJag

@SnapJag-必ずしもではありません。SQLはすぐに最小量を消費しないためです。SQLはゼロから始まり、必要に応じて徐々に増加します。
ブレントオザー

11

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


これは受け入れられた答えであるべきでした。適切なSQLの設計と計画の設計は、サーバーの再起動の必要性を回避するために重要ですが、サーバーのポリシー(セキュリティパッチなど)により、サーバーの再起動が必要になる場合があります
Fandango68

11

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

@RemusRusanuが多くのポイントを述べているように、それは多くのキャッシュをクリアし、SQL Serverに多くの不必要な起動作業をさせます。

このサーバーは専用のSQL Server /データベースサーバーではないようです。実稼働データベースサーバーには、データベースサーバーという目的が1つだけあることがベストプラクティスです。その場合、OS用に十分なメモリとリソースを確保し、他のすべてをSQL Serverに提供します。これにより、他のアプリケーションやサーバーの役割が不足することはありません。


2

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

私はDBAではありません。私は、ソフトウェアアーキテクト、最初から全体のデータベーススキーマを構築し、関与していることの一部だ、残念ながら、私は絶対にしていることを第三者のデータベースで作業していないNOをコントロール。
主要なサードパーティデータベースの1つを作成および保守する人々は、ほとんど機能させませんでした。

私もセキュリティエキスパートでもネットワークエンジニアでもないことを述べましたか?

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


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

余分なパフォーマンスを約束するための再起動のスケジューリングは、雨のために踊るようなものです。
多分それは来るでしょう、多分そうはならないでしょうが、あなたはそれが雨を引き起こした原因を確実に知りません。

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

私はあなたが言って好きではない決してそれが問題のトラブルシューティングやフェイルオーバーを確認するために再起動する必要はありませんが、私はやるランダムに発生するから、未知のパフォーマンス上の問題を保つためにスケジューリング再起動に問題があります。

のみあなたは毎週、それを再起動するか、2はそれが動作して維持するための唯一の方法であると思わ不正なサードパーティのデータベースを管理し、あなたが修正を許可されていない、あるいはそれに触れた場合は例外です。
それでも、修正を探し、所有者と共有し、解決するまで地獄を上げる必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.