AAGN#88039: Performance issue bij assetmanagement en draaien/exporteren taken-overzicht.
svn path=/Website/trunk/; revision=71055
This commit is contained in:
@@ -1035,7 +1035,7 @@ ins = {checkAutLevel:
|
||||
+ " , ins_srtcontroledl_xcp_prio"
|
||||
+ " , CASE"
|
||||
+ " WHEN 1 = " + (hasInspect? 0 : 1) // lastinspect IS NULL
|
||||
+ " THEN (SELECT d.ins_deel_aanmaak FROM ins_deel d WHERE d.ins_deel_key = ?)" // (1)
|
||||
+ " THEN (SELECT d.ins_deel_aanmaak FROM ins_deel d WHERE d.ins_deel_key = " + pins_deel_key + ")"
|
||||
+ " WHEN idsc.ins_deelsrtcontrole_status IN (0, 2, 3)"
|
||||
+ " THEN ins_deelsrtcontrole_datum_org"
|
||||
+ " ELSE fac.nextcyclusdate(CASE"
|
||||
@@ -1053,8 +1053,8 @@ ins = {checkAutLevel:
|
||||
+ " , ins.nextcyclusdate(xcp.ins_deel_key, xcp.ins_srtcontrole_key, 1, 0) inspectie_next0"
|
||||
+ " , (SELECT MAX(idsc2.ins_deelsrtcontrole_key)"
|
||||
+ " FROM ins_deelsrtcontrole idsc2"
|
||||
+ " WHERE idsc2.ins_deel_key = ?" // (2)
|
||||
+ " AND idsc2.ins_srtcontrole_key = ?" // (3)
|
||||
+ " WHERE idsc2.ins_deel_key = " + pins_deel_key
|
||||
+ " AND idsc2.ins_srtcontrole_key = " + params.srtcont_key
|
||||
+ " AND idsc2.ins_scenario_key = 1) laatste"
|
||||
+ " , (SELECT ins_controlemode_success"
|
||||
+ " FROM ins_controlemode"
|
||||
@@ -1068,56 +1068,30 @@ ins = {checkAutLevel:
|
||||
+ " AND id2.ins_scenario_key = 1"
|
||||
+ " AND id2.ins_deelsrtcontrole_key NOT IN (SELECT MAX(idsc2.ins_deelsrtcontrole_key)" // NOT IN (laatste). Laatste is niet altijd de insp.ins_deelsrtcontrole_key.
|
||||
+ " FROM ins_deelsrtcontrole idsc2"
|
||||
+ " WHERE idsc2.ins_deel_key = ?" // (4)
|
||||
+ " AND idsc2.ins_srtcontrole_key = ?" // (5)
|
||||
+ " WHERE idsc2.ins_deel_key = " + pins_deel_key
|
||||
+ " AND idsc2.ins_srtcontrole_key = " + params.srtcont_key
|
||||
+ " AND idsc2.ins_scenario_key = 1)) penultimate_dsc_key"
|
||||
+ " FROM ins_deelsrtcontrole idsc"
|
||||
+ " , ins_v_defined_inspect_xcp xcp"
|
||||
+ " WHERE xcp.ins_srtcontrole_key = idsc.ins_srtcontrole_key(+)" // Er kan nog voor de eerste keer geinspecteerd moeten worden.
|
||||
+ " AND xcp.ins_srtcontrole_key = ?" // (6)
|
||||
+ " AND xcp.ins_deel_key = ?" // (7)
|
||||
+ " AND idsc.ins_deel_key(+) = ?" // (8)
|
||||
+ " AND idsc.ins_scenario_key(+) = ?" // (9)
|
||||
+ " AND xcp.ins_srtcontrole_key = " + params.srtcont_key
|
||||
+ " AND xcp.ins_deel_key = " + pins_deel_key
|
||||
+ " AND idsc.ins_deel_key(+) = " + pins_deel_key
|
||||
+ " AND idsc.ins_scenario_key(+) = " + params.scen_key
|
||||
// Neem voor de rechten de xcp van de Active Situatie (AS). Die bepaalt of de soort controle vervallen is.
|
||||
+ " AND xcp.ins_scenario_key = 1"
|
||||
+ (params.deelsrtcont_key > 0
|
||||
? " AND idsc.ins_deelsrtcontrole_key = ?" // (10)
|
||||
? " AND idsc.ins_deelsrtcontrole_key = " + params.deelsrtcont_key
|
||||
: " AND (idsc.ins_deelsrtcontrole_key IS NULL OR"
|
||||
+ " idsc.ins_deelsrtcontrole_key = (SELECT MAX(idsc2.ins_deelsrtcontrole_key)"
|
||||
+ " FROM ins_deelsrtcontrole idsc2"
|
||||
+ " WHERE idsc2.ins_deel_key = ?" // (11)
|
||||
+ " AND idsc2.ins_srtcontrole_key = ?" // (12)
|
||||
+ " AND idsc2.ins_scenario_key = ?" // (13)
|
||||
+ " WHERE idsc2.ins_deel_key = " + pins_deel_key
|
||||
+ " AND idsc2.ins_srtcontrole_key = " + params.srtcont_key
|
||||
+ " AND idsc2.ins_scenario_key = " + params.scen_key
|
||||
+ " ))")
|
||||
+ " ) insp"
|
||||
+ " ORDER BY insp.ins_deelsrtcontrole_datum DESC";
|
||||
// Als deze query honderden keren achter elkaar wordt uitgevoerd dan duurt de qyery ineens ~135 ms i.p.v. ~10 ms.
|
||||
// Daardoor krijg je dan een timeout van de pagina
|
||||
// Oorzaak kan liggen bij: Bind variable peeking / parameter sniffing.
|
||||
// Dit kan leiden tot suboptimale plannen bij latere uitvoeringen.
|
||||
// Als je de query uitvoert met verschillende parameters (zoals ins_srtcontrole_key = 1363 en ins_deel_key = 29382), kan het plan afhangen van de eerste uitvoering.
|
||||
// Dit kan opgelost worden door hier een parameterized query te gebruiken.
|
||||
//
|
||||
// Voeg parameters toe in volgorde van de vraagtekens.
|
||||
var oparams = [];
|
||||
oparams.push({ typ: adInteger, dir: adParamInput, val: pins_deel_key }); // (1)
|
||||
oparams.push({ typ: adInteger, dir: adParamInput, val: pins_deel_key }); // (2)
|
||||
oparams.push({ typ: adInteger, dir: adParamInput, val: params.srtcont_key }); // (3)
|
||||
oparams.push({ typ: adInteger, dir: adParamInput, val: pins_deel_key }); // (4)
|
||||
oparams.push({ typ: adInteger, dir: adParamInput, val: params.srtcont_key }); // (5)
|
||||
oparams.push({ typ: adInteger, dir: adParamInput, val: params.srtcont_key }); // (6)
|
||||
oparams.push({ typ: adInteger, dir: adParamInput, val: pins_deel_key }); // (7)
|
||||
oparams.push({ typ: adInteger, dir: adParamInput, val: pins_deel_key }); // (8)
|
||||
oparams.push({ typ: adInteger, dir: adParamInput, val: params.scen_key }); // (9)
|
||||
if (params.deelsrtcont_key > 0)
|
||||
oparams.push({ typ: adInteger, dir: adParamInput, val: params.deelsrtcont_key }); // (10)
|
||||
else
|
||||
{
|
||||
oparams.push({ typ: adInteger, dir: adParamInput, val: pins_deel_key }); // (11)
|
||||
oparams.push({ typ: adInteger, dir: adParamInput, val: params.srtcont_key }); // (12)
|
||||
oparams.push({ typ: adInteger, dir: adParamInput, val: params.scen_key }); // (13)
|
||||
}
|
||||
oRs = Oracle.ExecuteParam(sql, oparams);
|
||||
var oRs = Oracle.Execute(sql);
|
||||
// Waarden moeten aanwezig zijn. Mocht dat niet zo zijn dan is er iets fout.
|
||||
// Als er nog nooit een inspectie is geweest wordt de status -1.
|
||||
// Als de laatste inspectie is afgerond (status is 6) moet er een nieuwe inspectie gestart worden.
|
||||
@@ -1262,8 +1236,8 @@ ins = {checkAutLevel:
|
||||
var bsql = "SELECT COUNT(*) aantal"
|
||||
+ " FROM (SELECT xcp.ins_srtcontrole_key"
|
||||
+ " FROM ins_v_defined_inspect_xcp xcp"
|
||||
+ " WHERE xcp.ins_deel_key = ?" // (1)
|
||||
+ " AND xcp.ctr_discipline_key IN (SELECT w.ins_discipline_key" // Alleen van de discipl ines waar ik schrijf rechten op heb meetellen.
|
||||
+ " WHERE xcp.ins_deel_key = " + pins_deel_key
|
||||
+ " AND xcp.ctr_discipline_key IN (SELECT w.ins_discipline_key" // Alleen van de disciplines waar ik schrijf rechten op heb meetellen.
|
||||
+ " FROM fac_v_webgebruiker w"
|
||||
+ " , fac_functie f"
|
||||
+ " WHERE w.fac_functie_key = f.fac_functie_key "
|
||||
@@ -1271,10 +1245,7 @@ ins = {checkAutLevel:
|
||||
+ " AND w.fac_gebruiker_prs_level_read < 9"
|
||||
+ " AND w.fac_gebruiker_alg_level_read < 9"
|
||||
+ " AND w.prs_perslid_key = " + user_key + "))";
|
||||
// Ook hier een parameterized query gebruiken voor als de query zeer vaak achter elkaar wordt uitgevoerd.
|
||||
var oparams = [];
|
||||
oparams.push({ typ: adInteger, dir: adParamInput, val: pins_deel_key });
|
||||
boRs = Oracle.ExecuteParam(bsql, oparams); // (1)
|
||||
var boRs = Oracle.Execute(bsql);
|
||||
var has_ctruse_read = boRs("aantal").Value > 0;
|
||||
boRs.close();
|
||||
var has_ctrsen_read = false;
|
||||
@@ -1283,8 +1254,8 @@ ins = {checkAutLevel:
|
||||
var bsql = "SELECT COUNT(*) aantal"
|
||||
+ " FROM (SELECT xcp.ins_srtcontrole_key"
|
||||
+ " FROM ins_v_defined_inspect_xcp xcp"
|
||||
+ " WHERE xcp.ins_deel_key = ?" // (1)
|
||||
+ " AND xcp.ctr_discipline_key IN (SELECT w.ins_discipline_key" // Alleen van de disciplines waar ik schrijf rechten op heb meetellen.
|
||||
+ " WHERE xcp.ins_deel_key = " + pins_deel_key
|
||||
+ " AND xcp.ctr_discipline_key IN (SELECT w.ins_discipline_key" // Alleen van de disciplines waar ik schrijf rechten op heb meetellen.
|
||||
+ " FROM fac_v_webgebruiker w"
|
||||
+ " , fac_functie f"
|
||||
+ " WHERE w.fac_functie_key = f.fac_functie_key "
|
||||
@@ -1292,10 +1263,7 @@ ins = {checkAutLevel:
|
||||
+ " AND w.fac_gebruiker_prs_level_read < 9"
|
||||
+ " AND w.fac_gebruiker_alg_level_read < 9"
|
||||
+ " AND w.prs_perslid_key = " + user_key + "))";
|
||||
// Ook hier een parameterized query gebruiken voor als de query zeer vaak achter elkaar wordt uitgevoerd.
|
||||
oparams = [];
|
||||
oparams.push({ typ: adInteger, dir: adParamInput, val: pins_deel_key });
|
||||
boRs = Oracle.ExecuteParam(bsql, oparams); // (1)
|
||||
var boRs = Oracle.Execute(bsql);
|
||||
has_ctrsen_read = boRs("aantal").Value > 0;
|
||||
boRs.close();
|
||||
}
|
||||
@@ -1307,8 +1275,8 @@ ins = {checkAutLevel:
|
||||
var bsql = "SELECT COUNT(*) aantal"
|
||||
+ " FROM (SELECT xcp.ins_srtcontrole_key"
|
||||
+ " FROM ins_v_defined_inspect_xcp xcp"
|
||||
+ " WHERE xcp.ins_deel_key = ?" // (1)
|
||||
+ " AND xcp.ctr_discipline_key IN (SELECT w.ins_discipline_key" // Alleen van de disciplines waar ik schrijf rechten op heb meetellen.
|
||||
+ " WHERE xcp.ins_deel_key = " + pins_deel_key
|
||||
+ " AND xcp.ctr_discipline_key IN (SELECT w.ins_discipline_key" // Alleen van de disciplines waar ik schrijf rechten op heb meetellen.
|
||||
+ " FROM fac_v_webgebruiker w"
|
||||
+ " , fac_functie f"
|
||||
+ " WHERE w.fac_functie_key = f.fac_functie_key "
|
||||
@@ -1316,10 +1284,7 @@ ins = {checkAutLevel:
|
||||
+ " AND w.fac_gebruiker_prs_level_write < 9"
|
||||
+ " AND w.fac_gebruiker_alg_level_write < 9"
|
||||
+ " AND w.prs_perslid_key = " + user_key + "))";
|
||||
// Ook hier een parameterized query gebruiken voor als de query zeer vaak achter elkaar wordt uitgevoerd.
|
||||
oparams = [];
|
||||
oparams.push({ typ: adInteger, dir: adParamInput, val: pins_deel_key });
|
||||
boRs = Oracle.ExecuteParam(bsql, oparams); // (1)
|
||||
var boRs = Oracle.Execute(bsql);
|
||||
var has_ctruse_write = boRs("aantal").Value > 0;
|
||||
boRs.close();
|
||||
var has_ctrsen_write = false;
|
||||
@@ -1328,8 +1293,8 @@ ins = {checkAutLevel:
|
||||
var bsql = "SELECT COUNT(*) aantal"
|
||||
+ " FROM (SELECT xcp.ins_srtcontrole_key"
|
||||
+ " FROM ins_v_defined_inspect_xcp xcp"
|
||||
+ " WHERE xcp.ins_deel_key = ?" // (1)
|
||||
+ " AND xcp.ctr_discipline_key IN (SELECT w.ins_discipline_key" // Alleen van de disciplines waar ik schrijf rechten op heb meetellen.
|
||||
+ " WHERE xcp.ins_deel_key = " + pins_deel_key
|
||||
+ " AND xcp.ctr_discipline_key IN (SELECT w.ins_discipline_key" // Alleen van de disciplines waar ik schrijf rechten op heb meetellen.
|
||||
+ " FROM fac_v_webgebruiker w"
|
||||
+ " , fac_functie f"
|
||||
+ " WHERE w.fac_functie_key = f.fac_functie_key "
|
||||
@@ -1337,10 +1302,7 @@ ins = {checkAutLevel:
|
||||
+ " AND w.fac_gebruiker_prs_level_write < 9"
|
||||
+ " AND w.fac_gebruiker_alg_level_write < 9"
|
||||
+ " AND w.prs_perslid_key = " + user_key + "))";
|
||||
// Ook hier een parameterized query gebruiken voor als de query zeer vaak achter elkaar wordt uitgevoerd.
|
||||
oparams = [];
|
||||
oparams.push({ typ: adInteger, dir: adParamInput, val: pins_deel_key }); // (1)
|
||||
oRs = Oracle.ExecuteParam(bsql, oparams);
|
||||
var boRs = Oracle.Execute(bsql);
|
||||
has_ctrsen_write = boRs("aantal").Value > 0;
|
||||
boRs.close();
|
||||
}
|
||||
@@ -6728,7 +6690,7 @@ ins = {checkAutLevel:
|
||||
+ " AND sk.ins_srtkenmerk_verwijder IS NULL"
|
||||
+ " AND sk.ins_srtkenmerk_kenmerktype = 'M'"
|
||||
+ (inspect
|
||||
? " AND k.ins_kenmerk_niveau IN ('C', 'E', 'T')" // C=Periodiek taken, E=Taakcategorie, T=Alle taken.
|
||||
? " AND k.ins_kenmerk_niveau IN ('C', 'E', 'T')" // C=Periodiek taken, E=Taakcategorie, T=Alle taken.
|
||||
+ " AND idsc.ins_srtcontrole_key = i.ins_srtcontrole_key"
|
||||
+ " AND i.ctr_discipline_key = cd.ins_discipline_key"
|
||||
+ " AND cd.ins_discipline_verwijder IS NULL"
|
||||
|
||||
Reference in New Issue
Block a user