Shoeisha Technology Media

EnterpriseZine(エンタープライズジン)

EnterpriseZine(エンタープライズジン)

テーマ別に探す

新米SQL Serverエンジニアを襲った「メモリが足りない」現象とは?!

edited by DB Online   2013/10/15 10:00

こんにちは。日本マイクロソフト Premier Field Engineeringの古賀です。今回から新しく始まる連載「今月のケースファイル」は、私がこれまでに扱った印象に残っている案件を紹介していきます。基本的に紹介する内容は事実に基づいていますが、脚色をしていますし、場合によっては一部実際に起きた内容と異なる部分があるかもしれません。あまり硬い内容にするつもりはないので、気楽に読んでもらえたら幸いです。これといって何か勉強できることがあるかはわかりませんが、ひょっとしたら、少しは教訓みたいなものがあるかもしれません。

案件の概要

  今回取り上げる話は、私が日本マイクロソフトに入社したばかりのころに担当した案件です。

 内容は、SSISパッケージのパフォーマンスが急激に低下するというもの。入力データが400万件の時は数分で終わるのに、460万件になると急激におそくなり2.3時間もかかるというのです。遅延の原因究明と回避策を提示する必要がありました。

仮説と再現

 この話を最初に聞いたとき、「ああ、460万件になってデータがメモリに乗り切らなくなったんだなぁ」と思いました。つまり、400万件の処理では、メモリが足りていたけれど、徐々に件数が増えてきて460万件となった時にデータが全部メモリに乗り切らなくなったのだと思いました。

 私はこの仮説を証明するために、まずは再現環境を構築することから始めようと思いました。同じような現象が再現できれば、自分の手元で詳細な調査ができるし回避策の有効性も検証できると思ったからです。

 再現環境を構築するためにいろいろとヒアリングしてみると、どうやらお客様は64ビットのマシンでSSISパッケージを32ビットモードで実行しているらしいことがわかりました。詳しい理由は覚えていませんが、確か64ビットモードで実行すると何か問題があって、32ビットモードだとその問題が発生しないとか、そんなことが理由だったと思います。問題のSSISパッケージはというと、複数のテキストファイルを読み込んでいろいろな加工をした後、マージ結合変換タスクを使用してデータを抽出し、最終的にSQL Serverへ一括登録するという内容でした。

図1: パッケージのイメージ図。実際はSQL Server 2005のSSISで作られており、もっと複雑なパッケージでした。
▲図1: パッケージのイメージ図。実際はSQL Server 2005のSSISで作られており、もっと複雑なパッケージでした

 一通りヒアリングを終えると、早速、再現環境の構築を行いました。お客様から入手したSSISパッケージを自分の環境でも動作するように変更します。2,3件のデータ入力で正しく動作することを確認し、続いてダミーの入力ファイルを生成するプログラムを書きました。460万件のデータを手作業で生成するのは大変だからです。プログラムを書き終えた後、まずは遅延が発生しないという400万件のデータで実行してみました。お客様の環境とは違って数分ではありませんでしたが、私の環境では十数分で終了します。

 続いて460万件のデータで実行してみます。やはり、処理はなかなか終了しません。なかなか終了しないどころか、結局その日のうちに処理は終了しませんでした。あまりに遅いのでちょっと困ったなと思いましたが、ひとまずこれで「急激に遅くなる」という現象は再現できたようでした。

  あとは、「460万件になってメモリに乗り切らなくなった」という仮説を証明するだけです。まず、遅延している箇所がSSISパッケージの処理なのか、それ以外の処理なのかを切り分けることにしました。パッケージの処理には、SQL Serverへ一括登録する処理もあるので、ひょっとしたらSSISパッケージの処理ではなく、SQL Server側の処理が遅延しているのかもしれません。

 こうしたことを確認するため、現象が再現しているときのSSISパッケージの実行ログを確認することにしました。現象が再現しているときに実行ログの出力状況を確認すると、入力ファイルをいろいろと加工しているところまではスムーズにログが出力されるのですが、それらの処理がすべて終了してマージ結合変換タスクの処理に入るところから一向にログが出力されなくなります。どうやらマージ結合変換タスクの処理が遅延しているようだということがわかりました。マージ変換タスクはSQL Serverを使用していないので、SQL Server側の問題でないことがわかります。これで調査対象をSSISに絞ることができます。

※この続きは、会員の方のみお読みいただけます(登録無料)。


※この続きは、会員の方のみお読みいただけます(登録無料)。


著者プロフィール

バックナンバー

連載:マイクロソフト古賀啓一郎の「今月のケースファイル」

もっと読む

All contents copyright © 2007-2019 Shoeisha Co., Ltd. All rights reserved. ver.1.5