none
SQL Server 2005 Express Edition 秒間のアイドル状態の後、サーバーの実行が再開されました。理由: タイマ イベント。 RRS feed

  • 質問

  • いつもお世話になっております。エステック伊藤です。

    SQL Server 2005 Express Edition について質問がございます。

    データベースに接続していない時間帯にイベントログ アプリケーションログに以下のようなログが1日に3回記録されています。

    --------------------------------------------------------------------------------
    イベントの種類: 情報
    イベント ソース: MSSQLSERVER
    イベント カテゴリ: (2)
    イベント ID: 17403

    中略

    説明:
    1791 秒間のアイドル状態の後、サーバーの実行が再開されました。理由: タイマ イベント。

    以下省略
    --------------------------------------------------------------------------------

    SQL Server で何が起きているのでしょうか?

    宜しくお願い致します。


    2012年12月11日 8:55

回答

  • Express Edition では、接続が無くなってから一定時間が経過すると、
    リソースの開放などの目的のために、自動的にインスタンスがスタンバイ状態 ( イベントログでいうアイドル状態 ) になります。
    アイドル状態に入るのは、15 分経過後だったと思います。( ドキュメントで見たことが無いので、「私の経験では」という話になります )

    そして、次に何らかの操作をしようとした際にインスタンスがスタンバイ状態から回復し、今回のようなイベントが出力されます。

    このメッセージ自体は障害などによって発生しているものではありません。

    アイドル状態になってしまうことについては、回避策はありません。( 設定変更できません )
    ただ、これは Express Edition 専用の仕様なので、Workgroup 以上を利用すれば発生しません。

    • 回答としてマーク Quiroz0428 2012年12月14日 7:11
    2012年12月11日 14:19
  • いや、このイベントが発生することと、ユーザー インスタンスの話とは関係が無いと思いますね。

    実際のところ、SQL Server Express のインストール時に「ユーザー インスタンスを有効にする」のチェックを外すか、
    チェックを付けてインストール後に sp_configure 'user instances enabled', 0 で無効にするかをしたとしても、
    このイベントは発生します。

    また、ユーザー インスタンスが無効になっていても発生するとの事例も報告されています。
    SQL Server goes idle

    ですので、sp_configure 'user instance timeout', 5 などでタイムアウト時間を変更したとしても、
    ユーザー インスタンスがシャットダウンされるまでの時間が変わるだけで、
    SQL Server Express 本体がアイドル状態になるまでの時間が 5 分になるわけではありません。

    先に示されたスレッドでいう NOBTA さんの投稿で説明されているように、
    ユーザーの動作による アイドル状態からの復帰の場合は 17401 のイベントが、
    SQL Server 内部のタイマーによって復帰した場合は 17403 のイベントが出力されます。

    • 回答としてマーク Quiroz0428 2012年12月14日 7:12
    2012年12月13日 9:05

すべての返信

  • Express Edition では、接続が無くなってから一定時間が経過すると、
    リソースの開放などの目的のために、自動的にインスタンスがスタンバイ状態 ( イベントログでいうアイドル状態 ) になります。
    アイドル状態に入るのは、15 分経過後だったと思います。( ドキュメントで見たことが無いので、「私の経験では」という話になります )

    そして、次に何らかの操作をしようとした際にインスタンスがスタンバイ状態から回復し、今回のようなイベントが出力されます。

    このメッセージ自体は障害などによって発生しているものではありません。

    アイドル状態になってしまうことについては、回避策はありません。( 設定変更できません )
    ただ、これは Express Edition 専用の仕様なので、Workgroup 以上を利用すれば発生しません。

    • 回答としてマーク Quiroz0428 2012年12月14日 7:11
    2012年12月11日 14:19
  • これと同じ現象ですね。
    http://social.msdn.microsoft.com/Forums/ja-JP/sqlserverja/thread/f0fa16ba-a7c3-426f-b799-41a3dd2b9a8e

    SQL ServerのExpress Editionの場合、一定時間(60分)接続がないとインスタンスが停止し、再び接続するとインスタンスが開始される仕様となっています。

    • 編集済み CatTail 2012年12月12日 0:47
    2012年12月12日 0:46
  • yottun8 様 ご回答頂きありがとうございます。

    スタンバイ状態 について理解を深めるためネットで検索しましたが未だ見つかっておりません。

    データベースのプロパティ 自動終了 がデフォルトで有効になっていることについては知っており無効にしているのですが、こちらとは異なりますでしょうか?


    2012年12月12日 2:20
  • CatTail 様 ご回答頂きありがとうございます。

    スタンバイ状態 についてマイクロソフトのドキュメントを読みたいのですが、サイトや SQL Server のヘルプなどお心当たりはございませんでしょうか?

    2012年12月12日 2:57
  • SQL Server 2005 Expressで、しかも英語の資料ですが、このあたりが参考になるかも。

    http://msdn.microsoft.com/en-US/library/bb264564(v=SQL.90).aspx

    The sqlservr.exe process that is started is kept running for a while after the last connection to the instance is closed. Therefore, it doesn't need to be restarted if another connection is opened. The length of time it stays around is set by the sp_configure option "user instance timeout". By default, this is set to 60 minutes but you can use the sp_configure command to change this.

    2012年12月12日 14:05
  • いや、このイベントが発生することと、ユーザー インスタンスの話とは関係が無いと思いますね。

    実際のところ、SQL Server Express のインストール時に「ユーザー インスタンスを有効にする」のチェックを外すか、
    チェックを付けてインストール後に sp_configure 'user instances enabled', 0 で無効にするかをしたとしても、
    このイベントは発生します。

    また、ユーザー インスタンスが無効になっていても発生するとの事例も報告されています。
    SQL Server goes idle

    ですので、sp_configure 'user instance timeout', 5 などでタイムアウト時間を変更したとしても、
    ユーザー インスタンスがシャットダウンされるまでの時間が変わるだけで、
    SQL Server Express 本体がアイドル状態になるまでの時間が 5 分になるわけではありません。

    先に示されたスレッドでいう NOBTA さんの投稿で説明されているように、
    ユーザーの動作による アイドル状態からの復帰の場合は 17401 のイベントが、
    SQL Server 内部のタイマーによって復帰した場合は 17403 のイベントが出力されます。

    • 回答としてマーク Quiroz0428 2012年12月14日 7:12
    2012年12月13日 9:05
  • これは、SQL Server Express インスタンス自体の動作であるため、サーバー レベルでの話になります。
    ですので、個々のデータベースの自動終了プロパティが 有効/無効 になっていることとは直接関係ありません。

    ですが、インスタンスが アイドル/復帰 をすることで招いてしまうパフォーマンスの低下を防ぐために、
    一定間隔でポーリングを行うような仕組み ( ping みたいなもの ) を用意して実行することで
    アイドル状態にさせないというテクニックのようなものはあります。
    その際に自動終了プロパティを無効にしておくということが有効な手段ということになります。
    ( そうしないと、コネクションの Open と Close が頻繁に発生し、かえってパフォーマンスが落ちる可能性があるため )

    Is there a way to stop SQL Express 2008 from Idling?

    2012年12月13日 9:48
  • SQL Server Express チームのブログにアイドル状態について説明された記事がありました。

    Understanding SQL Express behavior: Idle time resource usage, AUTO_CLOSE and User Instances

    自分の中でもあやふやだったので、試してみたところ以下のような感じでした。

    1. 19:00:00 に接続してクエリ実行、そのまま放置。
    2. 19:20:00 (20 分後 ) に再度クエリ実行。イベント 17401 発生「300 秒間のアイドル状態の後、・・・」
    3. そのまま放置して、19:36:30 (16 分 30 秒後 ) に再度クエリ実行。イベント 17401 発生「90 秒間のアイドル状態の後・・・」
    4. 19:51:00 (14 分 30 秒後 ) に再度クエリ実行。イベント発生せず。

    試した感じでは 15 分を超えるとイベントが発生することから、これがアイドル状態への移行時間なのかなと思います。
    ( クエリ実行によるアイドル状態からの復帰なので、17403 ではなく 17401 のイベントが出ます。)
    あくまで「私が試した環境では」という話ですが、参考になれば。


    2012年12月13日 12:12
  • CatTail 様 ご回答頂きありがとうございます。

    グローバル構成を確認したところ、このようになっておりました。

    user instance timeout = 60

    user instances enabled = 1

    ユーザーインスタンスは 有効 になっておりました。

    2012年12月14日 6:55
  • yottun8 様 ご回答頂きありがとうございます。

    SQL Server で何が起きているのか理解できました。

    実はデータベースへ定期的にアクセスしているプログラムがあり、深夜は停止しているのですがスケジュールが来てアクセスが再開されると、サーバーのメモリ使用量が増えて、ディスク読み込みも増えて一時的にビジー状態になり、プログラムにてエラーが発生することがあります。

    これを回避したいので、アイドル状態にならないよう一定間隔でポーリングを行うことを検討します。

    例えばデータベースの読み込みを行うSQLファイルを用意し、タスクスケジューラーから自動実行させるというのはどうでしょうか?恐れ入りますが、評価をお願いいたします。

    2012年12月14日 7:08