独立しちゃったエンジニア独立しちゃったエンジニアインディペンデントコントラクター(プロワーカー)として働く、システムエンジニア、ステップアップエンジニアリングでございます。Trackbacksやられました。本日お客様のシステムで発生したトラブルの対応で、緊急リリース作業中です。本日、お客様からシステムトラブルの連絡がありました。ある情報を検索して、結果をリスト表示する画面が今日になって機能しなくなったとのこと。初めは、このシステムにありがちな、データの問題かなと思っていて、ちょろっとDBいじればひとまずしのげると踏んでいました。実はこればっちりプログラムのバグ!しかも、時限バグ弾。システムが長期間稼働して、データが増えると発現するバグだったのです。名付けて、「時限バグ弾」!どんなバグだったかというと、、、PostgreSQLのSQLを生成するプログラムに問題がありました。あるテーブルを検索してIDのリストを取得します。次に、別のテーブルを検索するときに、whereにこのIDのリストをin句に入れた条件を加えます。in句の作成は、プログラム上で文字列をつなぎます。.....)当初は全く問題なかったのですが、データが増えるにつれin句がどんどん大きくなったわけですね。怪しいのはその変かなととは思ったのですが、初めは何が悪いのか分からず、、、ごめんなさい不勉強でした。各々の語彙素の長さは2Kバイト未満でなければなりませんそう、おそらくこの制限に引っかかってしまい、SQL例外になってしまっていたのです(ToT)再現試験として、問題のデータ量で発生を確認し、データ量を減らすと発生しない事を確認しました。間違いない、これだ!ということで、修正&テストしてただいまリリース媒体作成中。修正はできたのですが、次の難関はインドと日本の間はどうやらN/W帯域が狭いという事。自社のマシンにリモートでつないで、リリース媒体をつくり、そこから本番環境に転送するというまどろっこしい作業をしています。う〜ん、、、眠たいす。緊急リリースは恐ろしいので、気合いでがんばります!日本のインスタントコーヒー持ってきて良かったぁ。13:26あにょん、お久しぶり♪ご指摘ありがとうございます!キャッシュヒットの問題は、PostgreSQLも同様ですね。そもそも、inで可変のデータ渡して絞り込むなんて、どうなんだろうかと私も思っていまして、、、直したい気持ちは満々なのですが。select結果のデータ矛盾については、あまり意識してませんでした(w)まあ、あまりそのことを気にする必要はない機能なのですが。ご指摘は大変勉強になります。システムの改善に役立てたいと思います。12:39緊急対応お疲れ様でした。仮に制限事項の長さ制限が無かったとしても、SQLが可変するとPreparedStatementの効果が出ず、オプティマイザが効果的にならない可能性があるかもしれません。(PostgreSQLはあまり明るくないのですが、Oracleで言うところのライブラリキャッシュヒット率が下がります)また、業務ロジックにもよるとは思いますが、事前の検索パターンを副問い合わせ句にしたほうが、アトミックな処理になるのでデータの矛盾が起こりにくいかと思います。»Profileステップアップエン...StepupEngineeringステップアップエンジニアリングの藤井です。お仕事のご相談はもちろん、同業フリーエンジニアの方のご相談も歓迎します。お気軽にご連絡くださいませ。ランキング登録しているのでこちらもよろしく人気blogランキング支店できました!はてな支店:技術的なメモです。俊勝http://www.stepup-eng.cominfo@stepup-eng.comお友達ブログきとの日常とりあえずなんとなくフリーエンジニアで幸せになろう!フリーエンジニアになる方法。女性エンジニアの本音。Entriesあずさ間質性肺炎??入院生活:早寝早起きとか、案外忙しいとか。