正如标题所述,我在要维护的模块上收到“等待操作超时”消息(内部异常消息:“超时已过期”)。每次应用尝试使用public Tuple<IEnumerable<ProductPriceSearchResultDto>, int> GetProductPriceSearchResults(ProductPriceFilterDto filter, int? pageNo = null)
{
//// Predicate builder
var predicate = GetProductPriceSearchFilter(filter);
//// This runs for approx. 1 minute before throwing a "Wait operation timed out" message...
var query = this.GetProductPriceSearchQuery()
.Where(predicate)
.Distinct()
.OrderBy(x => x.DosageFormName)
.ToList();
return Tuple.Create<IEnumerable<ProductPriceSearchResultDto>, int>(query, 0);
}
转换查询结果时,无论结果数量如何,它都会超时。
这需要转换为列表:结果需要导出到Excel以供下载。
下面是代码:
var query = (from price in this.context.ProductPrice.AsExpandable()
join product in this.context.vwDistributorProducts.AsExpandable()
on price.DosageFormCode equals product.DosageFormCode
join customer in this.context.vwCustomerBranch.AsExpandable()
on price.CustCd equals customer.CustomerCode
where price.CountryId == CurrentUserService.Identity.CountryId && !product.IsInactive
select new { price.PriceKey, price.EffectivityDateFrom, price.ContractPrice, price.ListPrice,
product.DosageFormName, product.MpgCode, product.DosageFormCode,
customer.CustomerName }).GroupBy(x => x.DosageFormCode)
.Select(x => x.OrderByDescending(y => y.EffectivityDateFrom).FirstOrDefault())
.Select(
x =>
new ProductPriceSearchResultDto
{
PriceKey = x.PriceKey,
DosageFormCode = x.DosageFormCode,
DosageFormName = x.DosageFormName,
EffectiveFrom = x.EffectivityDateFrom,
Price = x.ListPrice,
MpgCode = x.MpgCode,
ContractPrice = x.ContractPrice,
CustomerName = x.CustomerName
});
return query;
我的查询:
ProductPrice
注释:
CountryId
是一个表,并且具有指向列DosageFormCode
和vwDistributorProducts
的非聚集索引。vwCustomerBranch
和select * from (
SELECT table_name, type, LISTAGG(privilege, '; ') WITHIN GROUP (ORDER BY privilege) privlist_agg
FROM ALL_TAB_PRIVS
group by table_name, type
)
where not regexp_like(privlist_agg,'INSERT')
order by type;
是从客户端数据库复制的视图。我已经机智了。我如何摆脱这个错误?代码中是否需要更改?
编辑:我尽可能不希望设置命令超时,因为1.)应用程序到目前为止没有它就可以了...除了此功能和2。 ),这已经是一个巨大的应用程序,我不希望其他模块的性能受到威胁。
任何帮助将不胜感激。谢谢。
答案 0 :(得分:1)
我会尝试并记录将其转换成的sql。 然后,可以使用实际的sql来获取查询计划,这可能使您更接近根本原因。