●プロの仕事?
お客様のシステムプログラムの改修が必要となった
どうやら、大した改修でもなさそう
売り上げた月に請求せず、次月請求となる販売があり
その場合に印刷された日付が請求日となっているが
これは売上日でなければならないというもの
つまりプログラムの中で、請求日を印刷している部分を
売上日にすればいいと・・・・
そして、データベースには両方とも存在し、ソース中には両方ともある
しめしめ
これは、とても簡単! フィールド名を1か所変えればOk
と、言う事でフィールド名を変更し、コンパイル
いざ、テストだ!
まずは変更前のプログラムで実行してみる
●あれっ?
なんだか、結果を得るための時間がえらく長い
高々30万レコードから目的の1か月分を処理するのに30秒以上
1秒に1万レコードしか処理できないって・・・
爆遅〜〜〜
IBM AS/400でこれほど遅いのは見たことがない
って言うか、前職で数億レコードから1か月分の1500万レコード
これを処理する請求明細作成処理で4分弱だったことを覚えている
4分として計算しても、6万/秒程度の処理速度
しかも、請求額を計算する時にそれの数十倍のマスターアクセスもしていた
それに比べると・・・・
●そりゃそうだろう
どうしてこんなプログラム構造にしているのか・・・・
RPGサイクルを使用したいがために、系の処理速度を著しく落としている
処理速度低下の原因の一つが・・・べた読み
ありえへん! プロの仕事じゃない!
いやいや、アマでもこれほどいい加減なコーディングはしない
まぁ、開発当初は1秒程度で済んでたんだろう(笑)
しかし、レコード数の増大を考えにいれていないのは素人さん
そこで、改修要件には入っていないが、改修しちゃった(笑)
あくまで、テストのため、毎回30秒も待たされるのは地獄の苦痛
文書化も含めて、変更にかかった時間は・・・約10分
いざ、テスト(笑)
IBM AS/400のプログラム処理速度を測定する時は
1回目を捨てて、2回目以降の3回の処理時間を計測 (何故かは次回に!)
一回目:31秒
二回目:31秒
三回目:31秒
あれっ? ちなみに、ゼロ回目・・・本来捨てるはずの計測結果も31秒
納得の結果になった(笑) どれだけ無駄な動作をしてるんだろう
●高速化の為に行ったこと
データベースにインデックスを張っただけ
(AS/400的に言うと論理ファイルを作成しただけ)
そして、プログラムで元のデータベースの名前を論理ファイルの名前に変更しただけ
これだけなら1分だけど、残りの9分は・・・
悩んだーーー
何で悩んだかは、次々回に(笑) (これでブログネタが増えた)
高速化の結果
一回目:1秒未満(笑)
二回目:1秒未満
三回目:やっぱり1秒未満
なぜ1秒未満かというと、スマホのストップウォッチで測ったけど
スタートのためのタップを左手人差し指でやったから、正確に測定できなかったΣ( ̄ロ ̄lll)ガーン
だって、プログラムを起動させたら、すぐに終了していたから
もちろん、テストをした結果は全く同じ印刷結果が得られたことは言う間でもない
(請求日のところは売上日にはなっていたけどね)
●結論
プロと言えど、ヘタレはいる
なんと言えば良いのか分からない
原因が分かった時には空いた口が塞がらず、気分転換しなければ
改修業務をそのまま継続できなかった(笑)
まさかデータベースのべた読みなんて(笑)
AS400の機能性能を無視してこんな作り方をするから
でも、まあAS400だから30秒程度で済んでたのかも(笑)
このお客様のシステムにより
お客様の被った不利益は・・・時間的損失は・・・
1回当たり30秒だけど、このプログラムに限った事ではない
これに類することを1日50回するとして、
1日当たり1500秒 =25分
1か月あたり ≒10時間
1年あたり ≒120時間
時給1000円(安っ!)で換算すると 12万円
このヘタレのおかげで毎年12万円の損失を与えていたことになる
ちなみに・・・タイトルの悩んだのは次々回に述べる事であるので念のため(笑)
人気ブログランキング
" allowfullscreen>
【このカテゴリーの最新記事】
-
no image
-
no image
-
no image
-
no image
-
no image