5

我们偶尔会在“昂贵的查询”下的“活动监视器”中看到超过 11,000 个查询。

我看到在代码中一个查询正在循环中执行,我意识到这不是最好的方法(我没有写它,但可能需要修复它)。

我认为循环不会创建 11,000 次迭代,更像是一次 20 次。所以我的问题是,如果代码在 1/550 秒内执行 20 次查询,那会显示为每分钟 11,000 次执行吗?或者活动监视器真的意味着查询真的执行了 11,000 次?

DataTable JobsDT = new DataTable();
DataTable oqDT = new DataTable();
DataTable ePickupDT = new DataTable();
DataTable upDT = new DataTable();
JobsDT = Q.SelectRecords("SELECT [Quote]... etc etc etc" + ((Filters.Length > 0) ? Filters : "") + ") ORDER BY " + SortBy + " " + SortDirection);
    oqDT=...;
    ePickupDT=...;
    upDT=...;

//Merge the datatables
DT.Merge(JobsDT);
DT.Merge(oqDT);
DT.Merge(ePickupDT);
DT.Merge(upDT);

//Build cart header
Cart += "<table id='CurrentOrdersDiv' style='font-family: Arial; font-size: small;' width='100%' cellpadding='2' cellspacing='0'>";

//Build cart body
for (int row = 0; row < DT.Rows.Count; row++)
{
    try { Adjustment = (Q.SelectRecords("SELECT [PriceAdjustment] FROM [Media] WHERE [PriceAdjustment] > 0 AND [Quote] = " + Convert.ToInt32(DT.Rows[row]["Quote"])).Rows.Count > 0) ? true : false; } catch { }
    //Create flags
}
4

1 回答 1

2

我不确定这一点,但我不认为 Execution/Min 可以“推断”。因此,在您的示例中,如果在一秒钟内发生了 20 个查询(并且在那一分钟内没有再次发生),我认为 Execution/Min 只会平均为 20。您可以检查 sys.dm_exec_query_stats.execution_count 以查看是否11000 这个数字是有道理的。

也许您的代码每次运行只执行大约 20 个查询,但运行非常频繁?

于 2013-04-02T20:41:08.270 回答