Monthly Archives: 2月 2016

チューニング診断書 - 症例1

■ LEFT JOIN が分かっていない!

症状:

Oracle から MySQL(Amazon RDS for MySQL)に移行したら、検索が重くなって使い物にならなくなった。

診断時間:

1時間

原因:

LEFT JOIN が分かっていないため、論理削除しているマスタの結合をすべてサブクエリで行っていた。

例)
SELECT
    *
FROM
    売上データ u
    LEFT OUTER JOIN
    (SELECT * FROM 顧客マスタ WHERE 削除フラグ <> 1) c
        ON u.顧客ID = c.ID;

この場合、顧客マスタのインデックスは全く利用できません。
Oracleでは、削除フラグ <> 1 となる顧客マスタの抽出結果をハッシュテーブルに格納してから結合する(ハッシュジョイン)となり、ある程度のスピードが出るのですが、MySQLではハッシュジョインがサポートされていないため、非常に遅くなっていました。

対応策:

SQLの基本構文の理解ができていない人が、設計・コーディングを行っていたため、システムの全面に同様の問題が存在した。
対応が取れる時間は限られているため、特に問題になっているSQLをピックアップして以下の様に修正を行った。

例)
SELECT
    *
FROM
    売上データ u
    LEFT OUTER JOIN
    (SELECT * FROM 顧客マスタ WHERE 削除フラグ <> 1) c
        ON u.顧客ID = c.ID;

↓ 修正

SELECT
    *
FROM
    売上データ u
    LEFT OUTER JOIN 顧客マスタ c
        ON u.顧客ID = c.ID
        AND 1 <> c.削除フラグ ;

コメント:

SQLの基本構文の理解ができていない人が、設計・コーディングを行っていたため、他にも問題は多数あります。
手の施しようがないですが、サブクエリをなくすだけで実用に耐えるパフォーマンスにはなりました。

しかし、最初からサブクエリをなくしていればコーディング量も格段に減っていました。

10億円規模のプロジェクトの共通仕様に「サブクエリにしなさい」と書かれていたこともあります。
そのプロジェクトを私が見たときは、既に納期遅れで、何十人もの技術者が泊まり込んで、入院する人が何人も出ている状態でした。
(私一人ではどうにもできない状況だったため、手は出しませんでしたが……)

同様の間違いをしているプロジェクトは今でも多数あります。
それを指揮してきたSIerは、20年前後、間違ったまま続けているということです。
そんなSIerを正すよりも、開発の内製化を行った方が効率的なのです。

システム開発の内製化に向けたオープンセミナー

■ 本当に内製化で効率化するの?

システムを内製化すれば、なぜ安くなるのか?
なぜ早く作れるのか?
なぜ速いシステムが作れるのか?
どんなところに気を付けたら良いのか?

といった内容の一般論を2時間程度でお話しするオープンセミナーを開催いたします。
奮ってご参加ください。

● 対象:

SI業者にシステム開発を依頼したことがある方。
簡単なプログラミング経験がある方。
初級シスアドレベルの知識がある方。

● 日時:

1回目   3月9日(水曜日)15:00~17:00
2回目   3月12日(土曜日)15:00~17:00

● 会場:

弊社会議室(多数の場合は変更の可能性があります)

● 最小催行人数:

4名

● 費用:

無料

● 連絡先:

info@g1sys.co.jp

RDB性能トラブルバスターズ奮闘記1

■ RDB性能トラブルバスターズ奮闘記

「RDB性能トラブルバスターズ奮闘記」という連載を掲載していただきました。

今回は、触りになってしまいましたが、今後、SI業界の開発手法の間違いや問題点などを指摘しながら、「どうすればよいのか?」ということまで書いていきたいと考えております。

どうぞよろしくお願いいたします。


Software Design 2016年3月号

ご意見ご感想などございましたら、info@g1sys.co.jp か、コメント欄にお願いいたします。

 

なぜ、SI企業にできないことが内製化すればできるか?

■ プロであるSI企業にできないことが内製化すればできる?

SI企業でできない理由は、会社の方針から間違っているからです。
SI企業の開発手法は、COBOL時代からほとんど変わっていません。

つまり、上司が指示している内容が20年以上もの間、間違い続けてきた。ということです。

仮に、その間違いを認めたとすると、全員のスキルがリセットされてしまいます。「コーディング力がなくても良い」というおかしなルールを作ってきましたが、コーディング力が必要になります。

大量の技術者が「できない人」になってしまいます。

分かっていても(ほとんどの人は分かってないのですが)できないのです……。

■ しがらみのない一般企業ならできる!

SI企業は、散々、間違った手法でシステムを作ってきました。その間違いを顕在化するわけにはいかないため、大きく方針を変えるわけには行かないのです。

しかし、そんなしがらみのない一般企業は違います。

弊社の独自の手法で習得すれば、技術は2週間程度あれば身に付きます。

技術を身に着けてもらえれば、SI企業より、工数も、パフォーマンスも、数倍~数十倍違ってきます。

どのぐらい違うかというと、「品川から東京に向けてタクシーに乗ったら、レインボーブリッジを通って千葉経由の経路になった」というぐらいの差です。そんなタクシーに乗って、言われた料金を支払いますか?

今まで、皆様は支払ってこられたわけです。

安くて、早くできて、速く動作して、使い易いシステムは、自分で作るのが一番です。

是非、ご検討ください。

 

消費税の誤差配賦 - 依頼を断る営業

■ 依頼を断る営業

昔の話です。

消費税の丸め処理(小数点以下の四捨五入・切り捨て・切り上げ)は、各社まちまちで、商品単位(つまり内税)、納品書単位、請求書単位などがあります。

請求するときは、相手の丸め処理に合わせるのですが、経理処理をするときに明細毎に違う仕訳になることがあり、経理では明細単位の消費税が必要になるわけです。この場合、経理での消費税と、請求・入金の消費税の合計が合わないことになります。

企業間取引で円単位の取引は少ないため通常はあまり起きないのですが、私が経験したのは運送会社で、燃料費(ガソリン・軽油)で起きていました。
しかし、誤差は小さく

対象となる明細行数 × 1円 > 誤差

となり、その会社では、最大でも月に数百円の誤差です。

そのような相談を、開発経験のある営業と一緒にお話を伺ったのですが、営業は必至で断ろうとしていました。

「誤差が出ることは分かっている」
「数百円の誤差は、誤差として税務署も文句は言わない」
「数百円の誤差を合わせるシステムを作るのは勿体ない」

というのが営業の言い分です。

お客様(経理担当)は、

「誤差なのか、ミスなのか区別する必要がある」
「結果的に、毎月、ミスでないか検証し、誤差を明細に配賦している」
「このための残業は馬鹿にならない」

という平行線です。

私は、件の営業の下請けの立場で、保守も請け負っていたので……。LANに繋がるノートPCを持って会議に出ていましたから、その場で直してしまいました。

開発経験のある営業は、ざっくりと半人月~1人月と見たようです。

私は、30分でできる。サービスしてあげたら、経理の人が喜んでテストしてくれるし、恩を売っておく方が後々有利。
と考え、揉めている間に直してしまったのでした。

■ 半人月~1人月と30分の違い

依頼を断ろうとする営業に悪意があるわけではないのです。

SI企業のルール通りに「消費税の誤差配賦」などを受けてしまうと、半人月ぐらいは掛かってしまいますし、パフォーマンスも大変遅いものが出来上がってきます。

それを30分でできるスキルがある技術者はSI企業はいません。

残念なことに、SI企業の技術者は、SI企業の常識が邪魔をしてそのスキルは習得できないのです。

しかし、弊社の経験で、「未経験の人であれば数週間で覚えられる」と言うことが分かりました。

半人月~1人月が30分というのは極端な例ですが、あなたが30分でできるスキルを身に付ければ、スキルを付ければ、今まで、SI企業に「何倍もの費用を支払い、何倍も遅いものを使わされてきた」ということが理解できるでしょう。

SI企業に依頼する必要はなくなります。

つまり、内製化することが十分に可能になるわけです。

費用の削減だけでなく、ビジネスのスピードアップにも繋がります。

是非、一度、ご検討ください。

 

こんなシステムは速くなります!

■ 目標をどうやって決めるか

マシン環境もまちまちです。
マシンパワーが足りないことも環境設定が悪い場合もありますから、「どのぐらい速くなるか」は、調査するまでは分かりません。

しかし、もし、貴社のシステムが以下ぐらい遅いときは、速くなる可能性が高いです。
一度、診断を受けてみませんか?

■ チューニングの目標

  • オンライン処理
    • クリックして1秒以上掛かる。
      → 弊社の目標は 0.3秒(300msec) 前後です。 ※ 描画処理を除く
  • 帳票処理
    • 数ページの印刷が開始されるまでに10秒以上掛かる。
      → 弊社の目標は1秒前後です。
  • バッチ処理
    • 30分以上掛かかっていて、その時間が問題になっている。
      → 弊社の目標は、現状の3分の1~20分の1 にすることです。

■ チューニングしたらどうなるか?

実は、アプリケーションに問題があってシステムのパフォーマンスが悪い場合、非常に回りくどい処理をしていることがほとんどです。チューニング後は、ソースコードの量が数分の1になります。

ということは……。

数倍の費用を払って、数倍遅いシステムを使わねばならないということなのです。

最初から、シンプルなソースを書ければ、最初から速いシステムを作ることができます。

残念なことに、現在のSI業界の体制ではそのようなシステムを作ることはできません。
回りくどく人海戦術でシステムを作るルールになっているからです。

しかし、純粋に成果を求めるユーザであるあなたならできるかもしれません。
弊社のコンサルティングを受ければ、必ずできるようになりますよ!

是非、ご検討ください。