[前][次][番号順一覧][スレッド一覧]

mysql:7661

From: "m.yamazaki" <"m.yamazaki" <yamazaki.ms@xxxxxxxxxx>>
Date: Wed, 7 May 2003 10:12:30 +0900
Subject: [mysql 07661] Re: C 言語の API によるクエリの中断について

山崎です。

とみたさん、ご返答ありがとうございます。

> > ・タイマを張って1分後にmysql_closeする
> >   →mysql_query関数からは戻ってきますが、
> >     投入したSQL文が中断せずデータが挿入されてしまいます。
>
> SIGALRM のシグナルハンドラで mysql_close() を呼んだってことでしょうか。
> やっていいのかな…(^^;

おっしゃるとおりです。
シグナル受信時にexit()しないと
segmentation faultで落ちるのでだめですね。。。

> > ・mysql_thread_idにて接続スレッド取得後、タイマを張って1分後に
> >   mysql_kill。
> >   →mysql_query関数から戻ってこないため、mysql_killが
> >     LOAD DATA文終了後にしか投入されない。
>
> プログラムをマルチスレッド化して、mysql_query() とは別のコネクションを
> 張って、そっちで mysql_kill() する方法はどうでしょう?

この方法を試してみたらできました。
親プロセスでスレッドIDを取得後、タイマ監視用の子プロセスを
スレッドIDを渡して起動し、
子プロセスでタイムアウト時にMySQLに接続して
渡されたスレッドIDをmysql_kill()するという方法にしようと思います。
ありがとうございました。

> そもそも LOAD DATA 文の実行中に、途中で止められるのかどうかという問題
> もあるような気が… (^^;

上記の方法で試したところ、
きちんとkillできているようで、
途中までのデータが挿入されていました。
(それでいいのかという疑問はありますが。。。)
1レコード3カラムのテーブルで十数回試したのですが、
中断しても最終レコードの3カラムには
きちんとデータが挿入されていました。

> --
> とみたまさひろ <tommy@xxxxxxxxxx>
> 日本MySQLユーザ会 http://www.mysql.gr.jp
>


[前][次][番号順一覧][スレッド一覧]

      7650 2003-05-06 18:29 ["m.yamazaki" <yamaza] C 言語の API によるクエリの中断について 
      7658 2003-05-07 08:09 ┗[とみたまさひろ <tomm]                                       
->    7661 2003-05-07 10:12  ┗["m.yamazaki" <yamaza]