トップ回答者
SQLServer2008R2のセッションの有効期限について

質問
-
いつもお世話になっております。
SQLServer2008R2のセッションの有効期限について質問させてください。
SQLServer2008R2にアプリケーションなどから接続する際に確立される
セッションに有効期限などはありますでしょうか?
(確立されたセッションが自動的に切断されるまでの時間・期間)もしあるようでしたら、その値(時間)はどこで確認できますでしょうか?
また、変更することはできますでしょうか?些細なことでも構いませんので、
何か情報をお持ちの方がいらっしゃいましたらご教授いただけると幸いです。以上、よろしくお願い致します。
回答
-
SQL Server の時間関連の制限ですと、色々あります。
1.接続が確立するまでの時間に関するタイムアウト
コネクションタイムアウトなどと呼ばれます。
クライアント側で制御するものであり、SQL Server 側は関知しません。
接続が成功した後は、SQL Server 側は接続を維持しますが、より厳密には TCP の keep alive などの仕組みを使って接続が維持されます。
TCP のレベルでタイムアウトとなると TDS が切断されることは可能性としてあり得ますが、SQL Server ではなく TCP やネットワークのお話になります。
SQL Server でのお話としては基本的には切断するのはクライアント側の責任になります。2.実行中のクエリが完了するまでの処理時間に関するタイムアウト
コマンドタイムアウトやクエリタイムアウトなどと呼ばれます。
クライアント側で制御するものであり、SQL Server 側は関知しません。
処理時間がどんなにかかろうとも、SQL Server 側の特定の条件に抵触しない限りは SQL Server 自身は処理を続けます。3.一連のトランザクションが完了するまでの処理時間に関するタイムアウト
トランザクションタイムアウトなどと呼ばれます。
クライアント側でトランザクション制御を行っている(例えば .NET で TransactionScope クラスを使用している)場合に、クライアント側で制御するものであり、SQL Server 側は(たぶん)関知しません。その他、処理中に SQL Server 側でデッドロック監視に抵触した場合に強制的に処理がキャンセルされることがあるなど、異常時に復旧するための仕組みがいくつか時間制限の側面を持っていますが、正常な処理では考慮する必要が無いので、割愛します。
このように接続のタイムアウトというのは、基本的にはクライアント側のお話になります。
なお、蛇足ですが、SQL Server の世界では接続を Session と称し、接続情報は sys.dm_exec_sessions で取得できるなど SQL Server 内部の用語として定着しています。
何か予期しない形での切断が起きているのであれば、基本的にはクライアント側の実装や挙動を調査されるのが先ずはよろしいかと思います。
クエリの実行中に SQL Server 側から切断されるようであれば、デッドロックの監視か何かに引っかかっていますので、詳細な状況がわからない事にはお答えしようがありません。
ただし、「セッション」は多義語で文脈依存になりやすく、また日本の SQL Server 界隈では「接続」や「コネクション」と称することが多いので、私は「セッション」という表現を避けることがあります。
Oracle 界隈の方とお話しするときは「セッション」でも通じる印象ですので、方言みたいなものでしょうかね。
海外の方とお話しするときは「Session」でも「Connection」でも通じる印象です。MCITP(Database Developer/Database Administrator)
- 回答の候補に設定 Yoshihiro MATSUMOTOMicrosoft employee 2014年12月27日 12:17
- 回答としてマーク 星 睦美 2015年1月9日 4:56
すべての返信
-
> SQLServer2008R2にアプリケーションなどから接続する際に確立される
> セッションに有効期限などはありますでしょうか?
> (確立されたセッションが自動的に切断されるまでの時間・期間)ひょっとして、質問者さんが言われる「セッション」というのは SQL Server とは直接関係ない ASP.NET のような Web アプリケーションの Session もしくは認証チケットのことですか?
SQL Server にそのようなものがあるとすると、自分はセッション状態モードの SQLServer モード(それも主に ASP.NET 側の機能)ぐらいしか思い浮かびません。(自分が知らないだけという可能性は否定できませんけど)
セッション状態モード
http://msdn.microsoft.com/ja-jp/library/ms178586(v=vs.100).aspx- 編集済み SurferOnWww 2014年12月25日 5:12 一部追加
-
普通にSQL Serverへの接続をセッションといっているイメージだと思います。
※DB接続をセッションというのは、特殊な言葉の使い方ではなく、一般に使われる言葉だと思います。
接続確立後、SQL Serverに対して何の操作も行わなかった場合(あるいは操作を行っている場合でも)、自動切断される(接続セッションが破棄される)ようなタイムアウトがあるのか、あるいはないのか、という感じの話だと思います。
たとえばAzure上のDB接続には、確かタイムアウトがあったはずです。
普通に立てているSQL Serverの場合にどうだったかはちょっと覚えてないのですが。
分散トランザクション(DTC)を使っている場合などは、トランザクション側でのタイムアウトがあったりもしますね。
- 編集済み なちゃ 2014年12月26日 10:43
-
> 一応SQLServer自身への接続時のセッションのことで質問させて頂いておりました。
その「セッション」の意味が分からないのですが、もう少し具体的に定義できませんか?
例えば、呼び出し元がプールから接続を取得してから、その接続をプールに戻すまでが、質問者さんの言われる「セッション」ということで良いのでしょうか? で、質問はそれに制限時間はないかということですか?
理解が違っていたら指摘ください。
理解が合っているとして、自分が調べた限りですが、制限時間があるという文書は見つけられませんでした。少なくとも接続文字列で設定できるようなものではないはずです。
SQL Server の接続プール (ADO.NET)
http://msdn.microsoft.com/ja-jp/library/8xx3tyca(v=vs.110).aspxSqlConnection.ConnectionString プロパティ
http://msdn.microsoft.com/ja-jp/library/system.data.sqlclient.sqlconnection.connectionstring(v=vs.110).aspxこれも、自分が見つけられなかっただけ、知らないだけという可能性は否定できませんので、他の方の回答もお待ちください。
-
SQL Server の時間関連の制限ですと、色々あります。
1.接続が確立するまでの時間に関するタイムアウト
コネクションタイムアウトなどと呼ばれます。
クライアント側で制御するものであり、SQL Server 側は関知しません。
接続が成功した後は、SQL Server 側は接続を維持しますが、より厳密には TCP の keep alive などの仕組みを使って接続が維持されます。
TCP のレベルでタイムアウトとなると TDS が切断されることは可能性としてあり得ますが、SQL Server ではなく TCP やネットワークのお話になります。
SQL Server でのお話としては基本的には切断するのはクライアント側の責任になります。2.実行中のクエリが完了するまでの処理時間に関するタイムアウト
コマンドタイムアウトやクエリタイムアウトなどと呼ばれます。
クライアント側で制御するものであり、SQL Server 側は関知しません。
処理時間がどんなにかかろうとも、SQL Server 側の特定の条件に抵触しない限りは SQL Server 自身は処理を続けます。3.一連のトランザクションが完了するまでの処理時間に関するタイムアウト
トランザクションタイムアウトなどと呼ばれます。
クライアント側でトランザクション制御を行っている(例えば .NET で TransactionScope クラスを使用している)場合に、クライアント側で制御するものであり、SQL Server 側は(たぶん)関知しません。その他、処理中に SQL Server 側でデッドロック監視に抵触した場合に強制的に処理がキャンセルされることがあるなど、異常時に復旧するための仕組みがいくつか時間制限の側面を持っていますが、正常な処理では考慮する必要が無いので、割愛します。
このように接続のタイムアウトというのは、基本的にはクライアント側のお話になります。
なお、蛇足ですが、SQL Server の世界では接続を Session と称し、接続情報は sys.dm_exec_sessions で取得できるなど SQL Server 内部の用語として定着しています。
何か予期しない形での切断が起きているのであれば、基本的にはクライアント側の実装や挙動を調査されるのが先ずはよろしいかと思います。
クエリの実行中に SQL Server 側から切断されるようであれば、デッドロックの監視か何かに引っかかっていますので、詳細な状況がわからない事にはお答えしようがありません。
ただし、「セッション」は多義語で文脈依存になりやすく、また日本の SQL Server 界隈では「接続」や「コネクション」と称することが多いので、私は「セッション」という表現を避けることがあります。
Oracle 界隈の方とお話しするときは「セッション」でも通じる印象ですので、方言みたいなものでしょうかね。
海外の方とお話しするときは「Session」でも「Connection」でも通じる印象です。MCITP(Database Developer/Database Administrator)
- 回答の候補に設定 Yoshihiro MATSUMOTOMicrosoft employee 2014年12月27日 12:17
- 回答としてマーク 星 睦美 2015年1月9日 4:56