在我公司的应用程序中,oracle中有一个使用并行执行的查询(配置为4个服务器),构建它的不是我,而是开发人员用它来表现性能。
查询在视图和表之间建立连接,最奇怪的是:有时它返回11k结果(不正确),有时27k结果(正确)。
经过大量研究后我发现,如果我删除了这个并行的东西,它总会返回正确的数字:27k。如果我将服务器的数量增加到6或7,它总是返回错误的数字:11k。
查询的布局如下:
SELECT /*+ PARALLEL(NAME, 4) */ * FROM(
SELECT DISTINCT COLUMNS
FROM VIEW
JOIN TABLE1 ON (....)
JOIN TABLE2 ON (....)
JOIN TABLE3 ON (....)
ORDER BY 3
) NAME
任何人都知道为什么?我对这个问题知之甚少。