EnterpriseZine(エンタープライズジン)

EnterpriseZine(エンタープライズジン)

テーマ別に探す

第7回 How it works: SQL Serverの接続編

edited by DB Online   2013/02/26 00:00

Error 18056

 SQL Serverの興味深いエラーのひとつに、”エラー18056、状態 29”というコネクションプール関連のエラーがあります。このエラーは、SQL Serverがsp_reset_connetionを処理しているときに、なんらかのエラーが発生した場合に出力されます。 ”エラー18056、状態 29”に関しては、以下のブログで詳細に説明されています。説明では.NET FrameworkではなくODBCのSQLExecDirectを例にとりあげていますが、コネクションプールのしくみとしてはこれまでに説明してきたことと差異はないので、難しい内容ではないと思います。

How It Works: Error 18056 - The client was unable to reuse a session with SPID ##, which had been reset for connection pooling 

How It Works: Error 18056 - The client was unable to reuse a session - Part 2

 少し話が脱線しますが、このブログを読み進めていくと、クエリのキャンセルのことをattentionと呼んでいることに気が付くと思います。たとえば、以下の文章です。

…
4.Client explicitly cancels (SQLCancel) or query timeout is detected by client drivers and an attention is submitted to the SQL Server.
…

 “クライアントが明示的にキャンセルするか、クライアントドライバによってクエリタイムアウトが検知されると、attentionがSQL Serverに対して発行される。”とあります。Attentionってなんだ?と思いませんか?

 実は、ここでいうattentionは、これまでに説明してきたTDSプロトコルで定義されているattentionメッセージのことを指しています。TDSプロトコルでは、クライアントがサーバーに対して明示的な処理のキャンセルを依頼する場合、attentionというタイプのメッセージを送るように定義されているのです。

 たとえば、アプリケーションでクエリタイムアウトが発生したり、SQL Server Management Studioからクエリをキャンセルしたりした場合、内部ではattentionメッセージがSQL Serverに対して発行されています。このattentionメッセージは、SQL Server ProfilerのAttentionイベントや、拡張イベントのattentionイベントで監視することができます。

 【参考】
 2.2.1.6 Attention

 ***

 いかがだったでしょうか?単純にSQL Serverへ接続するといってもなかなか奥の深い話であることをご理解いただけたのではないかと思います。しばらく期間をおいて「How it works: SQL Serverのリクエスト処理編」に続きます。おたのしみに!



著者プロフィール

バックナンバー

連載:SQL Server 2012 Deep Dive

もっと読む

All contents copyright © 2007-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5