お世話になっております。
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%になったりします。)
ご回答お待ちしております。