スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

プログラミング~レスポンス改善~

データをCSV形式で出力する機能を作成した。

当初のプログラムの組み方は
1.SQL文を発行
2.1レコード分のデータを1カラムずつ取得
3.CSV形式に編集して一行書き込み
4.2~3をレコード数分繰り返す

この方法では、レコード数×カラム数のループを繰り返す為処理時間が掛かってしまう。

今回は、「1.SQL文を発行」の部分を作り変えた。


 EMPLOYEEテーブル
  EMPID、EMP_NAME、TEL、ADDRESS

こんな感じのテーブルがあったとします。
 SELECT文は当初こんな感じでした。

 SELECT
  EMP_ID,
  EMP_NAME,
  TEL,
  ADDRESS
 FROM
  EMPLOYEE

このSQLを一工夫することで、全体の処理速度が向上しました。
 SELECT
  "'" || EMP_ID    || "'," ||
  "'" || EMP_NAME  || "'," ||
  "'" || TEL       || "'," ||
  "'" || ADDRESS   || "'" AS
 FROM
   EMPLOYEE

ちいさな工夫ですが、かなり大幅に処理速度が向上しました。

最初のSQLで44万レコード×17カラムを処理した場合は、
10分近く処理時間が掛かりました。

修正したSQLを使うと、1分40秒ほどで処理が完了しました。

80%弱処理時間が短くなりました。

これは使えそうだ。

SQL自体の処理時間に大幅な遅延は無かったので、今後データをPGで加工する必要がある場合は、
SQLでデータの加工が出来ないかを検討する必要がありそう。
スポンサーサイト

パフォーマンスチューニング~Javaプログラム~

システムのパフォーマンスチューニングについて。

現在作成しているシステムだが、機能については問題は無かった。
性能に若干?だいぶ問題があった。

オンラインのシステムでボタンを押下後に、Excelにデータを出力する処理を作成した。

Excel出力については「eSpreadSheet」を使用。


「eSpreadSheet」を使用し、1セル単位でデータを出力していく。

この1セル単位が問題だった…。

DBからデータを取得する。
1セルずつデータを取得していく必要がある為、処理は以下のように作成

for(){ ←0からレコードの最大値まで繰り返し
 for(){ ←0から取得したデータのカラム数分繰り返し
  1セル出力
 }
}

この様な処理をしていたのですが、今回作成した機能は出力対象のデータがかなり多かった…。

最大でレコード数10数万件、カラム数20数個。

つまり、1セル出力処理を200万回以上実行している。

処理が遅い。しかも、1セル出力処理は物理ファイルではなく、メモリ上のお話なので、メモリを圧迫。
(書き込みは全てのセルをメモリ上に書き出した後で一括して出力)

ローカルPCで実行すると「OutOfMemmoryError」が発生。致命的。

この機能について、結合テストの計画書を協力会社の方に説明して頂く。
機能のテストはあるが、性能のテストがない…。すかさず指摘をした。

その結果、テストを以下の様に実施。

1ユーザーで実施した場合
2ユーザーで実施した場合
3ユーザーで実施した場合

それぞれでレスポンスの速度を計測。

1ユーザーで実施した場合 …   5分
2ユーザーで実施した場合 … 20分
3ユーザーで実施した場合



測定不能(笑)

今回のパフォーマンスチューニングという観点でしたことはたいしてない。(出来なかった?)

一応、他の人が作ったプログラムだったので、プログラムの作り方を見直し。

繰り返しの条件式でわざわざ、一回一回レコードの最大件数をメソッドで取得していた。

その部分を繰り返し文の前に変数で格納するだけで、呼び出すメソッド数が全部合わせて10数万回減った。
その結果、30秒弱のレスポンス速度が向上。

プログラムって作り方でこうも変わるものなのか!?って痛感した。

というか入社して、1年以上経つけど、初めてSEらしい仕事をしているよ…。

ベンダー試験~Oracle10g Bronze~

業務で去年の10月からDB管理者みたいなことをしていました。

システムの環境は「Oracle10g」です。

ですが、私はOracleの資格を持っている訳でもなく、学生時代に勉強していた訳でもなく、苦戦をしました。

半年弱そんな感じで仕事を教えてもらいながら、していたのですが、今更になってこのままではいけないと感じ、資格を取得しようと思いました。

今月に入り、Oracle10gのまずはブロンズを取得しようと、黒本で勉強を始め、今日全ての項目を読み終えました。

読み終えての感想ですが、何故私はもっと早く勉強していなかったのか!!!

後悔の念でいっぱいです。

書いてある内容を事前に知っていれば、業務に直接役に立てることが出来たのか?
と、質問をされると正直びみょーですが、知識があればこその「気付き」も多かったはず。

反省だな。

今後はもっと、いろいろな勉強をして、仕事での気付きを増やしたい。


この試験の受験日は7月下旬~8月上旬を想定。

現在のプロジェクトが7月末に終わり、8月からは新しいプロジェクトへの参画が決定しているので、スケジュール要調整です。

受験料が高いので、気を抜かずに勉強頑張ります。

ちなみに、この試験の後は10月に受験する「情報セキュリティスペシャリスト試験」の勉強をします。

画面遷移しない原因

仕事が最近は落ち着いている。

ほとんど定時帰りです。

ですが、昨日は上司と言い合いをしてしまった…。

というか、事の発端は先輩社員の一言なのだが、あまりにも頭にきたのでみんなにも見てもらい。

現在週次の作業でサーバのログを取得する作業がある。
サーバのログは毎日作成されるので、上司から週次の作業の中でフォルダの整理をして欲しいと言われました。
目的は、一つのフォルダにファイルが数百件存在しているので、取得するログを探すのに時間がかかるから、取得したログは別フォルダに整理をしたいとのこと。

しかし、実際に作業を行うと取得するログを見つけるのに時間が1分もかからなかった…。

そこで、一緒に作業を行っていた先輩に提案。

「ログを探すのに時間があまりかかりませんので、フォルダ整理を週次の作業の中で行うと余計に時間が掛かってしまいます。月次など、もう少し長いスパンで作業を行った方が効率がいいと思うので他の方と検討してはどうでしょうか?」

みたいな感じで先輩に提案しました。

先輩も納得し、その場ではフォルダ整理を行いませんでした。

上司へフォルダ整理をしなかった事を先輩が報告しました。

先輩:「○○君がめんどくさいって」


オレ(心の中で):「ちょっと!待てぇ~」


先輩がそんな言い方をするもんだから、事情を上司に説明する時は、聞く耳を持ってもらえずめちゃくちゃ切れられながら説明をしました。

これは皆さんどう思います?

流石にあんまりじゃないですか?

Struts-画面遷移エラーの備忘録

仕事先のビルで新型インフルエンザ感染者が見つかりました。

慌てて2週間分のマスクを買い込み、着用しています。
マスク着けても、電車とかバスでマスクしている人が全然いないから意味ないですよね…。

会社でstrutsフレームワークを勉強しています。
学生時代も勉強をしていたのですが、見たことのないパターンのエラーが発生したので、備忘録。

【状況】
1.画面遷移をするボタンを押下する。
2.正常にActionクラスのメソッドが呼び出される。
3.エラーログは出力されないが、画面が遷移しない。
4.struts-config.xmlの定義は間違えていない。

以上のような、状況に陥りました。

原因としては、
状況2.で、あるBeanデータを格納する。
状況3.で、格納されたString型のインスタンスにアクセスを行うが、格納されたデータが不十分であった為に、エラーが発生し画面の遷移が行われなかったものと思われる。

まだ、思われるの段階なので、明日検証を行いたい。

が…

明日は打ち合わせや会議が詰まってる…。
とてもじゃないが、作業が進みそうにない…。

月火と続けて終電で帰宅…。
明日も終電になりそうだ…。

 | HOME |  »









このブログをリンクに追加する

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。