我很好奇SAS使用内存,排序以及为什么它看起来效率低下。
我有一个带有8GB内存的四核xeon。我有一个3GB的数据集。为什么在标准过程排序期间的任何给定时间内仅使用120MB的内存和15-20%的CPU利用率?这似乎是程序非常低效的事情。
在我看来,由于我有可用内存,它会加载整个数据集,然后继续删除所有可用的CPU周期。但只有15%?这是对可用资源的极大浪费,让我感到困扰。好像它经常来回走动 磁盘很慢。
是否有一些神奇的设置说“SAS,你可以利用一切更快”我失踪了?
运行64位SAS的64位操作系统,顺便说一句。
答案 0 :(得分:6)
答案 1 :(得分:3)
排序的事情是,它不是花费时间的排序,通常是读取数据并再次写出来。排序相对来说很快。因此,对于3GB数据集,需要花费大量时间等待磁盘提供所有数据。它可以重叠数据的各个部分并读取更多数据,但它仍然可能受I / O限制。 也就是说,MEMSIZE和SORTSIZE至少可以让你最大限度地利用你的可用内存。您需要确保SAS将读取整个数据集并一次性对其进行排序,然后再将其写出。如果内存较低,或者如果未对MEMSIZE / SORTSIZE进行适当配置,它将以块的形式对数据集进行排序,然后必须合并这些块。你真的想避免“多遍排序”,如果可能的话,因为它会花费两倍的时间(必须经历整个数据集排序块,然后再次通过所有数据,合并这些块)。我想你会从SASLOG得到关于它是否是多遍排序的提示。
答案 2 :(得分:1)
一般来说,这不是SAS的工作方式。 SAS会将您的数据保存在磁盘驱动器上,并且一次只读取一小部分数据。对我来说,这就是SAS的优势:我使用SAS来处理无法容纳RAM的东西。
您可能对Stata,R或其他将数据保存在RAM中的程序包感兴趣。搬回来很容易程序之间,即使是同一个项目。