Ognacの雑感

木漏れ日々

目次

Blog 利用状況

書庫

ギャラリ

RDBの処理が遅いのは開発者の責任なの?

  RDBで最適なパフォーマンスを得るのは、経験と知識が要ります。
  単純なテーブルで数千件程度のデータの場合は目だって差はでません。アナライザーを介さないと索引が働いているか否か判らないくらいです。
  データ量が多いアプリケーション(人事給与など)で三次正規化されたTableが多く且つメインテーブルの行数が10万件以上のオーダーになったら、RDB設計者の手腕がシステムを左右します。
  この手のTableは OuterJoinが連続することもあり、索引が使われなかったら、トンでもなく遅くなったりします。
    (*) outer Joinの結果は 1件か0件になる筈で n件該当するのは、DB設計がオカシイと考えます。<= この結果 積JOINになって 10万件が 500万件になって慌ててたチームが身近に居ました...orz
  日付をキーにするか、人Codeをキーにするかは業務如何でしょう。
  数年分のデータを一つのTableに持つのも考え物です。年、月別にTableを作るのも手でしょうし、RDBの機能でTable分散という事も考えられます。
  システム設計段階で、RDB設計者とアプリ設計者は協調して、システム作りを目指すべきです。

・先日相談を持ちかけられた件
    大法人システムの一環の給与システムの開発で、RDB設計は既存のものを使い、集計(出力)部分を開発する。というもの。
   そこで問題が発生。 "集計業務は1時間で終わる事"という業務要件があるそうな。
    ところが、抽出SQLの実行が 3時間かかり、これが10種類あるので、計30時間かかる... バッチが1日で終わらない。
    "一時間で終わる".要件を満たすのはプログラマの仕事だ。なんとしろと攻められている由。
    妙案はないか? と相談されました。

言われてもねぇ。 "1時間で終わる" という要件は、システム全体としての問題なので、プログラマの範疇ではないと思います。
  勿論、下手な作りで遅いのだったら責任はあるけれど。SELECT文が遅いようだし、join句に不穏な記述はないし。
  私の結論は、「DB構造がまずそうなのでで、DB設計を見直してもらへ」なのですが、 大人の事情で、RDB部分は口出しできないんだそうです。

 おかしくない? 上流工程のDB設計がまずいのを製造工程に責任転嫁している構図と思うのです。

 ぐだぐだ言っても拉致があかないようだったので、「集計期間に合致する関連テーブルすべて、ローカル(メモリー上のDataTableやDisk.Table)に取り込み、
言語で Loopして集計したほうが早いかも。」とアドバイス(?)しました。
 なんと20万件のデータをDataTableに読み込み、Outter結合の部分も言語でLoop処理して該当データをメモリー内で集計した由。
 他の9種類の集計表も元データは同じなので、このDatatableから出力できるので、1本のJOBで 10種類対応できた由。
 肝心の速度は 一時間30分まで縮まったので、納品物としてOKしてもらったそうな。

結果オーライかもしれませんが、腑に落ちない。単純な集計業務がSQL(SUM)より言語でLoopするほうが早いというのは。RDBの設計ミスな気がするのだが。
こんな絆創膏的なシステムって世の中に多いのだろうね?

投稿日時 : 2007年11月1日 0:38

Feedback

# re: RDBの処理が遅いのは開発者の責任なの? 2007/11/01 0:45 れい

> なんと20万件のデータをDataTableに読み込み、Outter結合の部分も言語でLoop処理して該当データをメモリー内で集計した由。

もうなんのためのDBかわかりませんね…。
それならはじめから全部テキストファイルで持っていたほうがいいだろうに。

# re: RDBの処理が遅いのは開発者の責任なの? 2007/11/01 1:18 かつのり

基幹系でDBが数種類混在している現場で仕事をしたことがありますが、
OracleとDB2でDBリンクもしていないなかで、
データのマージして集計という作業がありましたが、
バッチで両方をソートして取得、プログラムで結合しましたw
もう2度とやりたくないな~・・・

outer joinで0/1件というのはモデリングによりけりかもです。
「店舗:売り上げ:年月」みたいなデータがあったりして、
年単位で集計するときとかって、店舗マスタ1件に対して普通にn件になりますよ。

# re: RDBの処理が遅いのは開発者の責任なの? 2007/11/01 2:15 凪瀬

自分も酷いDBにあたったことありますねー。

自分は手続き型言語屋なわけですから、RDBは本職の方にやって貰えるなら頼んでしまいたい。
ところが、Javaの片手間でSQL書く自分より酷いSQLを書くRDB屋がいるのはどうしたことか。
自分が片手間で書くHTMLより酷いHTMLを書くWebデザイナーもどうしたもんかとは思いますが。

専門を持ったなら持ったで門外漢の片手間よりはいい仕事をしてもらいたいなぁ。
業界全般に教育がなおざりにされている、ということになってしまうのですが。

# re: RDBの処理が遅いのは開発者の責任なの? 2007/11/01 8:51 Mr.T

Mr.Tです、こんにちは。

んー、こういうのって負のスパイラルですよね。
> 肝心の速度は 一時間30分まで縮まったので、納品物としてOKしてもらったそうな。
データ件数が今の状態でということは、3年後くらいには2.5時間くらいになりそうな予感...Ognacさんには悪寒かもしれませんw

# re: RDBの処理が遅いのは開発者の責任なの? 2007/11/01 9:59 Ognac

>業界全般に教育がなおざりにされている、ということになってしまうのですが
なんか年々低下している気がするのです。
業界デビューが汎用機だった影響かもしれませんが、新人教育時にEDP教育があり(http://www.sophia-it.com/content/EDP)善くも悪くも影響を受けてます
悪しき影響もあるのですが、基礎作りには役立ちました。今はそういう基礎部分の教育を抜けてますね。
 いつも言うことですが、本人の向上心に頼っているのは企業としては如何なものかと思うのです。(企業側から見て)
 勿論、個人側からみれば、向上心は必須ですが..

>店舗マスタ1件に対して普通にn件になりますよ
言葉足らずでした。誤解されました。今回DBのモデリングの範囲で 0/1件という意味です。
 給与の加給/減給項目なので 0/1件を前提にしないと後処理が困ると考えます。
このケースでは、 このあたりの認識のずれで 1:n のouterになりデータ量が爆発した可能性もありますね。

# re: RDBの処理が遅いのは開発者の責任なの? 2007/11/01 19:24 Chuki

で、オンメモリに入らなくなったら、ぜひ化け物のようなメモリがつめるマシンの購入をお待ちしておりますw
#失礼しやしたm(_ _(m

# re: RDBの処理が遅いのは開発者の責任なの? 2007/11/01 23:54 かつのり

それにしても数人のプログラマが1ヶ月とかかけて、
頑張ってチューニングするくらいなら、
ハードを増強する方が圧倒的に安くなりましたね。
ハードの増強費用に負けないスキルが必要になるわけですw

# re: RDBの処理が遅いのは開発者の責任なの? 2007/11/02 0:25 Ognac

>ハードを増強する方が圧倒的に安くなりましたね。
下手に組んでもハードがカバーするので、益々PGの質が低下していく気がします。

# re: RDBの処理が遅いのは開発者の責任なの? 2007/11/02 12:02 Chuki

>益々PGの質が低下していく気がします。
逆に考えるんだ! 質の低いPGでもOKと o...rz

なんかすごいメモリの使い方するプログラムを平気で書く人増えましたよね^^;。
テスト時は速くてもデータが増えてくると...
#そこで、マルチコアな高いマシンの購入をお待ちしております(クドぃ! m(_ _(m

# re: RDBの処理が遅いのは開発者の責任なの? 2008/05/04 3:19 ぽにょ

普通は適度に非正規化した一時テーブル使わないか?

# My partner and I stumbled over here from a different website and thought I might as well check things out. I like what I see so now i'm following you. Look forward to looking at your web page again. 2019/04/04 22:15 My partner and I stumbled over here from a differe

My partner and I stumbled over here from a different website and thought I
might as well check things out. I like what I see so now i'm following you.
Look forward to looking at your web page again.

# I know this web page gives quality based posts and other data, is there any other website which provides these information in quality? 2019/08/19 10:09 I know this web page gives quality based posts and

I know this web page gives quality based posts and other data, is there any other website which provides these information in quality?

# It is not my first time to pay a quick visit this web page, i am browsing this site dailly and get fastidious facts from here every day. 2019/09/03 11:46 It is not my first time to pay a quick visit this

It is not my first time to pay a quick visit this web page, i am browsing this site
dailly and get fastidious facts from here every day.

# It is not my first time to pay a quick visit this web page, i am browsing this site dailly and get fastidious facts from here every day. 2019/09/03 11:47 It is not my first time to pay a quick visit this

It is not my first time to pay a quick visit this web page, i am browsing this site
dailly and get fastidious facts from here every day.

# It is not my first time to pay a quick visit this web page, i am browsing this site dailly and get fastidious facts from here every day. 2019/09/03 11:48 It is not my first time to pay a quick visit this

It is not my first time to pay a quick visit this web page, i am browsing this site
dailly and get fastidious facts from here every day.

# It is not my first time to pay a quick visit this web page, i am browsing this site dailly and get fastidious facts from here every day. 2019/09/03 11:49 It is not my first time to pay a quick visit this

It is not my first time to pay a quick visit this web page, i am browsing this site
dailly and get fastidious facts from here every day.

タイトル
名前
Url
コメント