2014-02-28 22 views
1

我有一个主表(大约1TB),它是所有其他程序的主要数据源。当我提交6个程序同时运行时,它会导致锁定在主表上,其他程序无法运行。数据集在运行多个程序时被锁定

有没有办法确保所有程序都可以访问主表?一些辅助程序正在从主表中生成一个样本,而其他一些正在运行一些聚合功能以创建新的数据集。

+1

您是否尝试过将libname设置为只读? – Joe

+0

假设程序是IO限制的(即它的大部分时间都花在等待HDD上的数据上),那么按顺序运行程序可能会更好。在随机访问条件下,硬盘驱动器会变得更慢,同时运行程序会让您尝试在不同位置多次访问同一数据集。 – orh

回答

0

SAS在读取时不会锁定数据集。你如何阅读桌子(请显示代码)?

如果您对数据集进行了任何修改,将会对其进行锁定。根据修改的类型,可以使用CNTLLEV数据集选项锁定行级别而不是表级锁定,例如在追加新行时。

请注意您的数据步骤未锁定表格。例如,当您运行

data mydataset; 
    set mydataset; 
    put _all_; 
run; 

除了把所有变量日志,该块还写道行回数据集即使他们并没有改变。它运行时抓取表级锁。相反,你应该这样做:

data _null_; 
    set mydataset; 
    put _all_; 
run;