none
SQLSERVER サービスの起動時間について RRS feed

  • 質問

  • いつも、大変参考にさせていただいています。たばひでと申します。
    SQLServerのサービスの起動時間について、お教えください。
    OS起動後のSQLServerサービス起動時間は、どのような状況により変化するものですか?
    OS起動後にSQLServerに対して実施したい処理(SQL)があるのですが、スタートアップスクリプトにてSQMCMD.EXEを起動し実施使用としています。
    スクリプト内で1分ほど待ちして起動することで稼動後5ヶ月は週1回正常に実施できていたのですが、先週SQLServerへの接続タイムアウトが発生し異常終了しました。
    1分待っているところを2分、3分と待つよう変更すればよいのかもしれませんが、今後異常終了するたびに伸ばせばよいのかどのように考えれば良いか、どなたかお教えください。
    SQLServerは、2012R2Standerd SP1を使用しており、CPUは64ビットです。
    OSの再起動は週1回実施しており、その間サービスの再起動も実施していません。

    以上、よろしくお願いします。

    2014年4月3日 1:16

回答

  • サービス起動時間は、終了状況により変化すると考えれば十分かと思います。
    起動時に DB の復旧処理が走りますので、復旧処理の量次第、つまり終了状況次第です。

    ちなみに蛇足ながら参考までに、接続できるかどうかという点では、ログインの接続先(既定のデータベース)が master かそれ以外かによって接続できるようになるタイミングが変わりますので、注意してください。
    概ね接続先が master の場合はサービスが RUNNING になった時点、それ以外の場合は接続先の DB が ONLINE になった時点で接続できるようになると考えれば十分かと思います。

    1点確認ですが、何らかの要件で SQLCMD.EXE を使わないといけないということですよね?
    単純に起動後すみやかに処理を実行、というだけであればスタートアッププロシージャや Agent ジョブといった起動時に実行するための機能が元々用意されていますので、それらが選択肢にならないので起動時間を問題にしているということですよね。
    この場合は接続先 DB が ONLINE かどうかチェックし ONLINE になったら所定の処理を実施するですとか、もしくはエラーになったら一定時間待って再実行するようにするですとか、そういった対応をスクリプトに追加することを考えることになるかな、と思います。


    MCITP(Database Developer/Database Administrator)

    • 回答の候補に設定 星 睦美 2014年4月4日 7:00
    • 回答としてマーク 星 睦美 2014年4月10日 8:11
    2014年4月3日 4:43

すべての返信

  • サービス起動時間は、終了状況により変化すると考えれば十分かと思います。
    起動時に DB の復旧処理が走りますので、復旧処理の量次第、つまり終了状況次第です。

    ちなみに蛇足ながら参考までに、接続できるかどうかという点では、ログインの接続先(既定のデータベース)が master かそれ以外かによって接続できるようになるタイミングが変わりますので、注意してください。
    概ね接続先が master の場合はサービスが RUNNING になった時点、それ以外の場合は接続先の DB が ONLINE になった時点で接続できるようになると考えれば十分かと思います。

    1点確認ですが、何らかの要件で SQLCMD.EXE を使わないといけないということですよね?
    単純に起動後すみやかに処理を実行、というだけであればスタートアッププロシージャや Agent ジョブといった起動時に実行するための機能が元々用意されていますので、それらが選択肢にならないので起動時間を問題にしているということですよね。
    この場合は接続先 DB が ONLINE かどうかチェックし ONLINE になったら所定の処理を実施するですとか、もしくはエラーになったら一定時間待って再実行するようにするですとか、そういった対応をスクリプトに追加することを考えることになるかな、と思います。


    MCITP(Database Developer/Database Administrator)

    • 回答の候補に設定 星 睦美 2014年4月4日 7:00
    • 回答としてマーク 星 睦美 2014年4月10日 8:11
    2014年4月3日 4:43
  • nagino - 引退エンジニア さま

    早速、ご記入いただきありがとうございます。
    自分の担当しているシステムのDBは単純復旧モデルでファイルをインポートして検索することに使用しています。
    インポート処理中にサーバダウンなどが発生すると復旧に時間を要すため、結果的に接続できる状況になるのが遅延するという認識でよろしいでしょうか?

    SQLCMD.EXE を使用している理由はこの処理の前後でコマンドを起動する処理が必要だったからです。AgentからSQL以外のコマンド処理を実施することも可能と認識はしていたのですが、一旦はこのような感じです。

    イベントログを見た結果、前回も10秒くらいしか余裕がない状態だったので、3分位にしようと思います。(この3分になにか説得力があるといいのになぁ)

    せっかく、MASTERにアクセスしてDBがONLINEかどうかをチェックしてといったご意見いただいたのですが、すみません。

    また、今後もよろしくお願いします。

    2014年4月3日 7:56
  • >インポート処理中にサーバダウンなどが発生すると復旧に時間を要すため、結果的に接続できる状況になるのが遅延するという認識でよろしいでしょうか?
    単純復旧モデルということであれば、最後のチェックポイント以降の処理を再現することになるので、そのトランザクションの量次第ということです。(このトランザクション量に SELECT のみのトランザクションが含まれるかどうかは寡聞にして知りません。。。)
    別の良い方をすると、recovery interval サーバー構成オプションの設定値や CHECKPOINT コマンドの実行頻度次第になるかと思います。
    処理の内容がインポート処理かどうか、という話ではありません。


    MCITP(Database Developer/Database Administrator)

    2014年4月4日 4:49
  • nagino - 引退エンジニア さま

    ご指摘ありがとうございます。
    recovery interval サーバー構成オプションの設定値やCHECKPOINTコマンドなど有益な情報ありがとうございます。
    すぐに検討したいと思います。

    今後ともよろしくお願いします。

    2014年4月4日 5:56