BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
sskt
Obsidian | Level 7

お世話になっております。

bufnoやbufsize、reuseなどの使い方がよくわからないため質問させていただきます。


小さいデータセットをたくさん吐き出す場合を除き、compress=yesとしておけばいいと考えている初心者です。
数GBレベルの大きいsas7bdatデータを比較的ハイスペックなマシン(メモリ32GB~とか)で読み込む際、bufnoやbufsizeを大きくすれば早くなるか?と思ったのですがほとんど変化がなく、maxにするとエラーを出すようになってしまいました。

・bufnoやbufsizeを大きくすれば早くなるか?
・bufsize:SASデータセットのページサイズ、bufno:読み書きに利用可能なバッファ数というのはわかりましたが、どっちを増やすと効果的か、というのはあるのでしょうか?
(掛け算らしいのでどっちも増やしたほうが良い、ということなのでしょうか。ただ、(bufsize=1073741824,bufno=10)や両方maxなど大きい値にすると

 

ERROR ERROR: ファイルWORK.X.DATAは損傷しています。I/O処理は完了されません。
WARNING WARNING: データセットWORK.Xは、一部しかオープンされていません。また、保存もされません。

 

のようなエラーが出てしまいます。)

 

ちなみにbufsize=614400 bufno=10とbufsize=61440000 bufno=1000では数GBのsas7bdatを読んだ場合0.5秒しか違いませんでした。
bufsize=12288 bufno=5からbufsize=614400 bufno=10に上げたときは5秒程度の違いがありましたが。
以下、同じsas7bdatを読み込んだときの詳しい結果です。

 

 

(bufsize=12288 bufno=5)
NOTE: DATAステートメント処理(合計処理時間):
処理時間 2:28.13
ユーザーCPU時間 22.99 秒
システムCPU時間 6.69 秒
メモリ 10512.00k
OSメモリ 27784.00k



(bufsize=614400 bufno=10)
NOTE: DATAステートメント処理(合計処理時間):
処理時間 2:29.49
ユーザーCPU時間 17.79 秒
システムCPU時間 5.38 秒
メモリ 13309.62k
OSメモリ 32768.00k



(bufsize=61440000,bufno=1000)
NOTE: DATAステートメント処理(合計処理時間):
処理時間 2:48.77
ユーザーCPU時間 17.27 秒
システムCPU時間 5.74 秒
メモリ 2045608.06k
OSメモリ 2065052.00k

 

 

ファイルサイズやPCのスペックに応じたベストな設定方法等あるのでしょうか?
SASは確かに速くていいなと感じますが、大きいデータの使用中にCPUやメモリの使用率を見ても大して高くならないのでもっと頑張ってもらいたいものです。一応
(PythonだとCPU使用率が100%になったりします。)

ご回答お待ちしております。

1 ACCEPTED SOLUTION

Accepted Solutions
yu_sas
SAS Employee

大きければよいという値ではなく、実行環境やデータに合った値を指定する必要があります。

まずは以下のSAS Noteの値から始めてみるのがいいと思います。

 

Usage Note 46954: SAS® system option settings for best performance in UNIX and Windows environments

 

BUFSIZEはSAS 9.4のデフォルトである64Kが多くの場合最適です。扱うデータが大きい場合

128Kや256Kもよいかと思います。一般的には最大でも512Kまでであり、実際にテストをし

決めることになると思います。RAIDを組んでいるのであればストライプサイズと同じ値が

推奨されています。SAS 9.4で追加されたSTRIPESIZE=システムオプションではディレクトリ

ごとにBUFSIZEを指定できます。

 

BUFNOは上記に記載の10や、メモリに余裕がある場合100、200など大きい値をテスト

してみることも一案かと思います。

 

I/Oのパフォーマンスに関しては以下のPaperが参考になります。

 

How to Maintain Happy SAS®9 Users

 

Frequently Asked Questions Regarding Storage Configurations

View solution in original post

2 REPLIES 2
yu_sas
SAS Employee

大きければよいという値ではなく、実行環境やデータに合った値を指定する必要があります。

まずは以下のSAS Noteの値から始めてみるのがいいと思います。

 

Usage Note 46954: SAS® system option settings for best performance in UNIX and Windows environments

 

BUFSIZEはSAS 9.4のデフォルトである64Kが多くの場合最適です。扱うデータが大きい場合

128Kや256Kもよいかと思います。一般的には最大でも512Kまでであり、実際にテストをし

決めることになると思います。RAIDを組んでいるのであればストライプサイズと同じ値が

推奨されています。SAS 9.4で追加されたSTRIPESIZE=システムオプションではディレクトリ

ごとにBUFSIZEを指定できます。

 

BUFNOは上記に記載の10や、メモリに余裕がある場合100、200など大きい値をテスト

してみることも一案かと思います。

 

I/Oのパフォーマンスに関しては以下のPaperが参考になります。

 

How to Maintain Happy SAS®9 Users

 

Frequently Asked Questions Regarding Storage Configurations

sskt
Obsidian | Level 7

いつもご返信有難うございます。

非常に勉強になります。

 

いろいろ試してみましたが、512k、256K、128Kでなぜかほとんど変わらず(むしろ数字の小さい方が早くなったり)ということがありました。
よくわかりませんが、いろいろ試すしかないのかと思っております。

 

ありがとうございました。