システム運用では、緊急度の高い案件に対応することが多いと思います。
自分が担当しているシステムでも、通常業務より、緊急度の高い案件が、よく割り込んできます。
システム運用部門の宿命ですよね。
緊急度の高い案件は、やはりパフォーマンスに関するものも多いです。
- 日次バッチが、終了予定時刻になっても完了していない
- 画面の表示が遅い
- データ更新(データ更新後の完了画面の表示)が遅い
- CSVファイルがダウンロードできない
- メールが送信されない
- データ不整合
- etc
あげればキリがないですね。
改善策としては、プログラム改修、環境整備、OSやDBのチューニングなど、色々なアプローチがあります。
本記事では、主に環境面の整備を中心に、パフォーマンスを改善する方法について記載しています。
ログデータの削除
Apacheなどのログファイルは、ログローテーションされていると思いますが、各機能のプログラムで出力するログファイルは、ローテーションされていないことが多いです。
そのため、長い期間のログファイルが蓄積されている場合には、専用のバックアップサーバーなどに退避して、本番環境から不要なログファイルを削除する。
ファイル名が、日付を含めている場合には、直近3ヶ月以内に作成されたログファイルだけを残す。
単一ファイルに、長い期間のログを蓄積している場合には、3ヶ月以内の行以外を削除する。ファイルのオープン処理も、かなり改善されるはずです。
また、データベースのログファイルも、ローテーションされていない場合には、これらのファイルも削除することで改善されます。
データベースの不要テーブルの削除
プログラムで未使用となっているテーブルを削除することで、データベースのパフォーマンスが改善されます。
よくあるテーブルとしては、一時テーブルを作成したまま、削除し忘れているようなテーブルです。
これらの不要テーブルを削除することで、読込みスループット、書込みスループットのどちらも改善できます。
しかしながら、削除対象のテーブルが少ないとあまり効果は無いと思います。
データベースの不要カラムの削除
対象テーブルは、各機能で利用している場合でも、未使用のカラムがある場合には、カラムを削除するとパフォーマンスが改善されます。
プログラムを解析する工数が確保できない場合でも、下記のことを確認することで、カラムの利用要否がわかる可能性があります。
- 対象カラムの全レコードが、デフォルト値のまま
これだけで判断するのは危険ですが、ある程度、プログラムの詳細がわかっている場合には、効率よく、パフォーマンスを改善することができます。
データベースの不要レコードの削除
上記に記載した不要テーブルではなく、現行で利用中のテーブルでも、レコードを削除することで、パフォーマンスが改善されます。
10年分のレコードを保持しているようなテーブルの場合には、直近1年分のレコード以外は、バックアップして削除する。
ただし、業務によっては、過去10年前のデータを参照する必要がある場合があります。その場合には、1年以上前のデータ検索は、バックアップ専用のデータベースを参照するなどの考慮が必要となりと思います。
しかしながら、このような対応は、大幅な工数がかかり、これほどの工数をかけてまで対応するのかどうかは、費用対効果を見極めて対応する必要があります。
処理の並列化
日次、月次バッチが、終了予定時刻になっても完了しないなどの事象は、よく発生すると思います。
システムリリース時には、終了時刻をかなりの余裕を見積もっていたのに、データ量が増加することで、パフォーマンスが急激に低下してきます。
バッチの作り方によりますが、対象のバッチプログラムを、並列化できる余地があるのであれば、検討する価値があります。
対象バッチのボトルネックになっている箇所にもよるのですが、バッチを並列化することで、かなりのパフォーマンスが改善されます。
バッチプログラムを並列化することで、処理時間が2/3程度に改善される場合もあります。
まとめ
今回は、環境面からのパフォーマンスの改善案について、記載いたしました。
時間的に余裕があり、計画的にパフォーマンスを改善を進める場合には、プログラム改修もあわせて対応するのが一番効果が高いと思います。
また、上記の対応は、緊急度が高い局面を想定しての改善案ですが、削除する作業は、とてもリスクが高いので、ファイルの構成を正確に把握し、必ずバックアップを取得して実施してください。
また、削除スクリプトも、複数の技術者にレビューをしてもらい実施するようにしてください。