web-dev-qa-db-ja.com

サーバーでログを表示するのに時間がかかるのはなぜですか?

失敗したメンテナンスプランタスクの詳細情報を検索しようとしています。ログファイルビューアを開き、チェックボックスをオンにして、メンテナンスプランのログを表示します。この例では、それ以外にアクティブなフィルターはありません。それから私は待っているゲームをする.....

ログが表示されるまでに約20分かかりました。そのため、このサーバーの最初からすべてのログをロードするのに時間がかかるのではないかと思いました。とにかく必要だったので、フィルターを約3日に減らしました。それはより速く現れましたが、それでも表示するのに4分かかりました。私のコンピューターでこれらのログを表示しようとしたのはこれが初めてであることに注意してください。また、サーバーで直接ログを確認しようとしましたが、同様の時間結果が得られていました。

これはコースの標準ですか?ログの表示はこのような体験になると思いますか?やるべきことやチェックすべきことはありますか?ログの経過時間をチェックして、それをパージできるかどうかを確認する予定はありますが、それでも、X日間の短い期間のみログの表示に影響しますか?

7
Matt

はい、ログファイルビューアでログを読み取るには時間がかかります。それを修正するためのいくつかのこと:

フィルターされたパラメーターで xp_readerrorlog を使用して、必要なデータのみを取得してみます。

  • @ p1は、確認するログファイルです(0は現在、1は最初のアーカイブ、2は2番目など)。
  • エラーログの場合、@ p2はnull、エージェントの場合は2
  • @ p3と@ p4は出力で検索する文字列です

そうすれば、必要な行を取得できます。

この種のことを頻繁に実行している場合は、ジョブを実行してエラーログを定期的に(私は毎週)循環させ、それほど多くのものをふるいにかける必要がないようにします。さらに、成功したバックアップや成功したログインをエラーログに記録していないことを確認してください。

8
Brent Ozar

デフォルトでは、SQL Serverはインスタンスの再起動時にのみエラーログをロールオーバーします。優れたサーバー稼働時間がある場合(おそらく、年に数回パッチを当てて再起動するだけです)、エラーログは非常に大きくなる可能性があります(特定の状況では、多くのGBに達することがわかりました)。

エラーログはテキストファイルとして保存されるため、ログビューアで開くには、SQL Serverでテキストファイル全体を開いて解析する必要があります。これまでに10 GBのテキストファイルを開いたことがあれば、時間がかかることがあります。

私は通常、SQL Serverエラーログを週に1回ロールオーバーするジョブを持っているので、ログは十分に小さく、すばやく開くことができます。また、1つのファイルに十分なだけ戻って、必要なものを取得できます。

ログをロールオーバーするには、 このストアドプロシージャ を実行するだけです(そして、毎週実行するようにエージェントジョブをスケジュールします:

EXEC sp_cycle_errorlog;

オブジェクトエクスプローラーに古いアーカイブログが引き続き表示されます: ObjectExplorerLogs

そして、ログビューアで複数のログを表示できます: LogViewer

サーバーに保持するアーカイブログファイルの数を制限することもできます。これを行うには、オブジェクトエクスプローラーの[SQL Server Logs]フォルダーを右クリックし、[構成]を選択します。次に、チェックボックスをマークし、ログファイルの最大数を設定します。 Log Retention

一般に、必要だと思うよりも高く設定する必要があります。サーバーが突然複数回再起動したり、SQL Serverサービスが繰り返しリサイクルされたりする問題が発生した場合、エラーログは再起動のたびに反転し、ログは必要なだけ何週間も前に戻りません。

xp_instance_regwriteを使用してログ保持を設定することもできます。以下の例では、10個のエラーログを保持するようにこの値を設定しています。

USE [master]
GO
EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', 
    N'Software\Microsoft\MSSQLServer\MSSQLServer', 
    N'NumErrorLogs', 
    REG_DWORD, 
    10
GO
6
AMtwo

このオプションを選択すると、メンテナンスプランは独自のログファイルを生成します。 MP履歴を見ると、テキストファイルではなく、[msdb]。[dbo]。[sysmaintplan_log]および[msdb]。[dbo]。[sysmaintplan_logdetail]]から読み取っています。これをパージしてくださいこれはテーブルとファイルをクリーンアップするため、履歴クリーンアップタスクを使用します。

SQL Server ERRORLogおよびAgentlogは適切に維持する必要がありますが、MPは別の会話/作業です

偉大なMSの伝統では... [msdb]。[dbo]。[sysmaintplan_log]でクラスター化される以外、これらのテーブルにはインデックスがありません。

2
Kevin3NF

上記のコメントで推奨されている@AMtwoのように、SQLエラーログとSQLエージェントエラーログをロールする必要があります。

質問は保守計画ログの読み取りに関するものだったので、サイズを管理しやすく、すばやく開く方法を説明します。

メンテナンスプランのロギングでは、メンテナンスプランが実行されるたびに新しいファイルを作成する必要があります。

enter image description here

そのアイコンをクリックすると、次のウィンドウが表示されます。 「新規ファイルの作成」がデフォルトであり、それを確認する必要があります。 「ファイルに追加」をチェックしないでください。すべての実行に対して単一のファイルが作成されます。

enter image description here

ディスクがいっぱいになるのを避けるために、xx日より古いログファイルをクリーンアップする別のメンテナンスタスクを実行できます。

2
SqlWorldWide