次の記事 | 前の記事

2007-02-08

Firebird 2.0 RC4 でエラー: terminated abnormally (-1)

今まで順調に稼動していた Firebird 2.0 RC4 ですが 2月に入ってから急にエラーで落ちるようになってしまった。(実際には落ちても「fbguard」により復帰はするが...)
どのようなケースで落ちるようになったか?

以下のような猛烈な SELECT文 を投げるたときに発生。
--------------------------------
select rt.md_cd,
sum(d01.a_cnt) as d01,
sum(d02.a_cnt) as d02,

・省略( d03(2/3) から d27(2/27) までを同様に繰り返し)

sum(d28.a_cnt) as d28
from t_md_adm rt
left join t_md_adm d01 on (
rt.grp_cd = d01.grp_cd and
rt.md_cd = d01.md_cd and
rt.sex_f = d01.sex_f and
rt.data_dt = d01.data_dt and
rt.data_dt = '2007/02/01') left join t_md_adm d02 on (
rt.grp_cd = d02.grp_cd and
rt.md_cd = d02.md_cd and
rt.sex_f = d02.sex_f and
rt.data_dt = d02.data_dt and
rt.data_dt = '2007/02/02') left join ...

・省略( 2/3 から 2/27 までを同様に繰り返し)

rt.data_dt = '2007/02/27') left join t_md_adm d28 on (
rt.grp_cd = d28.grp_cd and
rt.md_cd = d28.md_cd and
rt.sex_f = d28.sex_f and
rt.data_dt = d28.data_dt and
rt.data_dt = '2007/02/28')
where
rt.data_dt >= '2007/02/01' and
rt.data_dt < '2007/03/01' and
rt.a_cnt > 0 and
rt.sex_f = 'M' and
(rt.grp_cd like 'XX%' or rt.grp_cd ='YYYY') and
rt.grp_cd is not null
Group by rt.md_cd, rt.sex_f
order by rt.md_cd
==================================

PCクライアントソフト(HipSQLer)から上記の SELECT文を投げると以下のエラーとなった。
(通常はEXCELのVBAでSELECT文を生成して毎日処理している)
=====================
[ODBC Firebird Driver][Firebird]Unable to complete network request to host "nahaha".
Error writing data to the connection.
確立された接続がホスト コンピュータのソウトウェアによって中止されました。
=====================

で、サーバのログ「firebird.log」を見てみると以下ようなログが残っていた。
=====================
nahaha (Client) Wed Feb 7 10:21:35 2007
・・・/firebird/bin/fbguard: bin/fbserver terminated abnormally (-1)

nahaha (Client) Wed Feb 7 10:21:35 2007
・・・/firebird/bin/fbguard: guardian starting bin/fbserver
=====================

※ちなみに該当テーブルのレコード数は90万件ぐらい
========================================

このエラーは必ず発生する訳ではなく10回に2回程度の割合で成功する。
原因はさっぱり判らなかったが全く同じ構造の SELECT文が1年以上1月末まで何の問題も無く動いていた。

現在注目しているのは WHERE句の
rt.data_dt >= '2007/02/01' and
rt.data_dt < '2007/03/01' and
の部分、(要は1ヶ月の範囲を条件指定している)

ここで2月の末日を明示的に指定せずに3月1日の前という指定をしている。
ひょっとして「うるう年」を考慮した2月の月末日の処理がエラーの原因とか...

ということを想像して月末日を直接指定するようにして様子を見ることにした。
さて、どうなることやら。
これでもエラーが頻発するようなら 2.0 release版か 2.0.1 RC1 にアップグレードしようと企んでいる。
category11. RDB Firebird  time2007-02-08 00:12  authorkagekino 

コメント

高見 wrote:

どうもはじめまして。
高見と申します。
突然、コメントを記述して申し訳ないのですが、上記のエラーについて、まったく同じ現象が発生して悩んでいます。
私が現在、使用している環境も、突然今まで
問題がなかったのにある日を境に全く同じ現象が発生するようになりました。

もし、この現象に対して、解決策があるのであれば、
お教え願いたいのですが、よろしくお願いいたします。
2007-08-01 time17:48

kagekino wrote:

>高見様
あまり役に立つ情報ではないかも知れませんが、このときは結局このエントリにある通りSQL文の日付指定方法を変更することでエラーは回避することができました。
エラーとなるWhere条件
data_dt >= '2007/02/01' and
data_dt < '2007/03/01'

data_dt >= '2007/02/01' and
data_dt <= '2007/02/28'
に変更すればエラーは発生しなくなりました。
私の中ではこのバージョンで複雑なSQL文にうるう年の2月をまたがる日付指定をWhere条件に指定するとダウンするという認識をしています。(ちゃんと検証してないのでエラー報告とかはしてないんですけど)
新しいバージョンでの検証は実はまだやってないので数日中にやってみようと思います。
2007-08-02 time03:22

高見 wrote:

ありがとうございます。
試してみます。
また、何かありましたら、お教えして頂けませんか?よろしくお願いいたします。
2007-08-03 time11:38

コメント追加

このアイテムは閉鎖されました。このアイテムへのコメントの追加、投票はできません。

トラバ

トラバ
トラバピングURL
http://weblog.hip-labo.com/action.php?action=plugin&name=TrackBack&tb_id=84
手動によるトラバは こちらからどうぞ。