ユーティリティファイルのサイズを調べたい : sort プロシジャ details オプション - unix版SAS限定?

sortプロシジャは、実行しているとき、ユーティリティファイルという一時ファイルを作成します。そのファイルの中でソート処理が行われるわけですが、ユーティリティファイルの容量は、ソート対象のデータセットの 1~3倍くらい?のサイズになります。どのくらいのサイズになるかは、データセットがどのような構造をしているかなどで上下します。ユーティリティファイルは、ソートの終了とともに消えてしまうので、サイズを調べるのは少々面倒です。

sortプロシジャの details オプションは、ユーティリティファイルのサイズをログに出力してくれるオプションです。このオプションをつけることで、簡単にサイズがわかります。どんな風に出力してくれるかを見てみましょう。

 71         option msglevel=i lognumberformat ;
 72         
 73         proc sort data=TEST details ;
 74           by R ;
 75         run ;
 
 NOTE: ユーティリティファイルが必要です。
 NOTE: ユーティリティファイル 1 のページサイズは 131072 バイトです。
 NOTE: データセットWORK.TESTから100,000,000オブザベーションを読み込みました。 
 NOTE: ユーティリティファイル 1 には 100000000 レコードと 3 並べ替えられた実行が含まれます。
 NOTE: ユーティリティファイル 1 は 30527 ページ (合計 3907456.00 KB) あります。
 NOTE: SASスレッドソートを使用します。
 NOTE: データセットWORK.TESTは100,000,000オブザベーション、3変数です。
 NOTE: PROCEDURE SORT処理(合計処理時間):
       処理時間           1:16.55
       ユーザーCPU時間    1:20.44
       システムCPU時間    7.35 秒
       メモリ             3165715.60k
       OSメモリ           3193028.00k
       タイムスタンプ     2017/06/13 午前11:46:02
       ステップ数                        70  スイッチ数  56
       ページフォルト回数                0
       ページリクレーム回数              712755
       ページスワップ回数                0
       自発的コンテキストスイッチ回数    71106
       非自発的コンテキストスイッチ回数  250
       ブロック入力操作回数              0
       ブロック出力操作回数              14092568

KB単位で、ユーティリティファイルのサイズを教えてくれます。

割り当てられているディスク容量が少ない環境では、SASプログラムがどの程度ディスク容量を使うかを調べなくてはなりません (使用容量100%になりかねないので)。本オプションを使うことで、最大使用容量を調べやすくなるかと思います。


ユーティリティファイルのサイズは必ず出力されるわけではなく、サイズが小さいデータセットの場合は出力されません。小さい大きいの基準は、SAS実行環境によって異なります。下記は、メモリ内でソートが行われた例です。

 70         option msglevel=i lognumberformat ;
 71         
 72         proc sort data=TEST details ;
 73           by R ;
 74         run ;
 
 NOTE: データセットWORK.TESTから1,000,000オブザベーションを読み込みました。 
 NOTE: メモリ内で並べ替えられました。
 NOTE: SASスレッドソートを使用します。
 NOTE: データセットWORK.TESTは1,000,000オブザベーション、2変数です。
 NOTE: PROCEDURE SORT処理(合計処理時間):
       処理時間           0.30 秒
       ユーザーCPU時間    0.50 秒
       システムCPU時間    0.08 秒
       メモリ             58845.48k
       OSメモリ           85788.00k
       タイムスタンプ     2017/06/13 午前11:48:14
       ステップ数                        76  スイッチ数  35
       ページフォルト回数                0
       ページリクレーム回数              14304
       ページスワップ回数                0
       自発的コンテキストスイッチ回数    3033
       非自発的コンテキストスイッチ回数  0
       ブロック入力操作回数              0
       ブロック出力操作回数              31752

もっと小さくなると、急に優しさがないメッセージが出力されます。小さい場合はユーティリティファイルを気にしなくてもいい、といえばいいのですが、、、

 70         option msglevel=i lognumberformat ;
 71         
 72         proc sort data=TEST details ;
 73           by R ;
 74         run ;
 
 NOTE: データセットWORK.TESTから10オブザベーションを読み込みました。 
 mempage=131072 alocsize=32800 isa=131072 osa=131072 xmisa=0
 holds=4096 nway=1 sortsize=3221225472 memoryuse=163872.00
 keylen=16 reclen=16 dkin=0 inrec=10 outrec=10 yieldobs=0
 nruns=1 xcbpage=131072 npages=0 diskuse=0.00
 
 NOTE: SASソートを使用しました。
 NOTE: データセットWORK.TESTは10オブザベーション、2変数です。
 NOTE: PROCEDURE SORT処理(合計処理時間):
       処理時間           0.00 秒
       ユーザーCPU時間    0.00 秒
       システムCPU時間    0.00 秒
       メモリ             791.84k
       OSメモリ           29608.00k
       タイムスタンプ     2017/06/13 午後12:33:53
       ステップ数                        82  スイッチ数  44
       ページフォルト回数                0
       ページリクレーム回数              89
       ページスワップ回数                0
       自発的コンテキストスイッチ回数    124
       非自発的コンテキストスイッチ回数  0
       ブロック入力操作回数              0
       ブロック出力操作回数              264
       

ユーティリティファイルのサイズを教えてくれるありがたいオプション details ですが、たしか unix版SAS にしかなかった、、、気がします(うろ覚え)。unix版ユーザーはバシバシ使っていきましょう。


コメント

このブログの人気の投稿

日付フォーマットでない文字項目をSAS日付に変換するときにログ出力されるメッセージを抑制したい - SAS

データセット(.sas7bdatファイル)の文字コードを取得したい - SAS

Linuxコマンド: date で◯か月前 / ◯か月後を取得するときの注意