C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

sql実行中における強制終了時の挙動

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■85230 / inTopicNo.1)  sql実行中における強制終了時の挙動
  
□投稿者/ クッキー (1回)-(2017/09/22(Fri) 15:02:04)

分類:[.NET 全般] 

2017/09/25(Mon) 11:05:27 編集(投稿者)

開発環境:vs2013
言語:vb
サーバdb:mysql5.5

windowsフォームでサーバに接続し
データを抽出するツール製造しています。

現在、クライアントで投げたクエリが
サーバ側で30分以上も残り続けてしまった理由を調査していますが、そもそもアプリを強制終了した場合、
発行されたクエリはサーバ側で自動的にkillされるのでしょうか。
(サーバ側の設定や状態は考慮しない)


finally区ではcloseを行っています。


以下、コードです。
参照:MySql.Data.dll Ver6.9.6.0

=======接続設定============
Dim bulider As MySqlConnectionStringBuilder = New MySqlConnectionStringBuilder()
bulider.Server = "127.0.0.1"
bulider.Port = 3306
bulider.UserID = "mysqlTest"
bulider.Password = "mysqlTest"
bulider.Database = "mysqlTest"
bulider.AllowZeroDateTime = True
bulider.ConvertZeroDateTime = True
bulider.ConnectionTimeout = 300    300秒で切れるはず。
bulider.ConnectionLifeTime = 300    300秒間保持するはず
===========================

=========接続側===========
Dim conn As New MySqlConnection
Dim cmd As New MySqlCommand

conn.ConnectionString = bulider.ToString()
conn.Open()
cmd.Connection = conn
cmd.CommandText = 10秒ぐらいで返ってくるSQL文

Dim dr As MySqlDataReader = cmd.ExecuteReader

よろしくお願いします。
引用返信 編集キー/
■85248 / inTopicNo.2)  Re[1]: sql実行中における強制終了時の挙動
□投稿者/ oman.com (1回)-(2017/09/26(Tue) 14:39:29)
> 現在、クライアントで投げたクエリが
> サーバ側で30分以上も残り続けてしまった

これは、具体的にはどのようにして確認しましたか?
引用返信 編集キー/
■85249 / inTopicNo.3)  Re[1]: sql実行中における強制終了時の挙動
□投稿者/ WebSurfer (1318回)-(2017/09/26(Tue) 15:30:42)
No85230 (クッキー さん) に返信

ググって調べただけですが、以下のドキュメントに説明があります。

Chapter 6 Connector/Net Connection-String Options Reference
https://dev.mysql.com/doc/connector-net/en/connector-net-connection-options.html


Connect Timeout, Connection Timeout, ConnectionTimeout

The length of time (in seconds) to wait for a connection to the server before terminating the attempt
and generating an error.


Connection Lifetime, ConnectionLifeTime

When a connection is returned to the pool, its creation time is compared with the current time, and
the connection is destroyed if that time span (in seconds) exceeds the value specified by Connection
Lifetime. This is useful in clustered configurations to force load balancing between a running server
and a server just brought online. A value of zero (0) causes pooled connections to have the maximum
connection timeout.


Connect Timeout はサーバーへの接続を待機する時間で、「発行されたクエリはサーバ側で自動的にkill」とは
関係ないようです。この時間が経過した後、接続の試行を終了し、エラーを生成します。

Connection Lifetime は接続プール関係の設定パラメータで、これも「発行されたクエリはサーバ側で自動的に
kill」とは関係ないようです。

想像ですが、接続が確立され、クエリが MySQL に投げられたら、後は MySQL がどう処置するかという話になるの
では? だから、

> クライアントで投げたクエリがサーバ側で30分以上も残り続けてしまった

ということになったのだと想像してます。

何にせよ、Connect Timeout と Connection Lifetime は関係なさそうです。
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ