Sql Teradata会话中止AMP CPU阈值

Sql Teradata会话中止AMP CPU阈值,sql,ssis,ssas,teradata,Sql,Ssis,Ssas,Teradata,我有一个正在刷新SSAS多维数据集分区的SSIS包。每个分区都是针对Teradata运行的SQL查询。我正在SSIS包中使用“Teradata的网络数据提供程序”。SSAS多维数据集正在使用“Teradata.Client.Provider”。任何特定的查询都可以正常执行。然而,在5-10次迭代之后,我得到了一个会话中止。经过一些调查,我发现所有查询都在同一会话中使用: sel * from DBC.DBQLogTbl where sessionid = 123456 此查询返回多行,其中包含

我有一个正在刷新SSAS多维数据集分区的SSIS包。每个分区都是针对Teradata运行的SQL查询。我正在SSIS包中使用“Teradata的网络数据提供程序”。SSAS多维数据集正在使用“Teradata.Client.Provider”。任何特定的查询都可以正常执行。然而,在5-10次迭代之后,我得到了一个会话中止。经过一些调查,我发现所有查询都在同一会话中使用:

sel * from DBC.DBQLogTbl where sessionid = 123456
此查询返回多行,其中包含来自循环的查询。每个查询本身不超过CPU AMP阈值,但是组合AMP使用量超过阈值。 我已将SSIS和SSAS中的连接字符串配置如下:

  • SSAS:连接超时=180;认证机制=LDAP;响应缓冲区大小=64000;用户Id=***;数据源=my.production.server;持久安全信息=True;会话字符集=UTF16;连接池=False;连接池超时=15;命令超时=900
  • SSIS:Data Source=my.production.server;用户Id=***;认证机制=LDAP;持久安全信息=True;会话字符集=UTF16;连接池=False
我已禁用多维数据集上的并行执行。我已禁用连接池,您可以从连接字符串中看到。我已将多维数据集上的“最大连接数”设置为1

关于如何强制每个查询在Teradata上拥有自己的会话,有什么想法吗

更新

经过一些调查,我非常确定在多维数据集或数据库驱动程序中的某个地方隐藏了一个bug。立方体只是忽略了

连接池=false

参数,并在同一会话中执行每个SQL命令。因此,我研究了驱动程序如何处理池。根据文档,在池中存储连接资源时,连接字符串用作键。因此,如果您提供一个不同的连接字符串,驱动程序会将这种情况处理为“新连接”,而不使用池中已经存在的连接字符串。现在,我在每次迭代后都有一个脚本任务,它“洗牌”给定连接字符串的参数并更新多维数据集上的连接。这绝对是一个黑客行为,我不建议将其作为一个解决方案,但绝望的时候需要采取绝望的措施

string dcs = @"Connection Timeout=180;Authentication Mechanism=LDAP;Response Buffer Size=64000;User Id=***;Data Source=my.production.server;Persist Security Info=True;Session Character Set=UTF16;Connection Pooling=False;Connection Pooling Timeout=15;Command Timeout=900";
Random r = new Random();
var shuffled = dcs.Split(';').OrderBy(x => r.Next()).ToArray();
var newCs = string.Join(";", shuffled);

强制限制总会话CPU是不寻常的;通常,此类限制适用于单个请求。但是,也许可以与您的DBA团队谈谈,看看他们是否愿意考虑当前的多维数据集刷新行为。如果没有,您可能需要单独的作业/包来强制单独的会话。对于最初提出的问题(如何强制单独的会话),您可能需要添加SSA和/或SSIS标记。这实际上不是Teradata或SQL语言问题。