Ich habe eine große Datenbank (Größe 1,7 TB) und habe einen Wartungsindexjob, um Indizes neu aufzubauen. Dieser Job ist um 11:00 Uhr geplant.Wie führen Sie gleichzeitig große Abfragen mit dem Indexjob aus?
Heute Morgen habe ich nur die Abfragen überprüft, die auf dem Server laufen, und ich bemerkte, dass der Index-Job noch läuft (mehr als 10 Stunden), weil eine andere T-SQL-Abfrage auf dem Server mehr als 22 ausgeführt wurde Stunden und schloss die Tabelle, dass der Job versuchte, die Indizes davon neu zu erstellen. Es war wie ein endloser Fortschritt, also musste ich die Blockierungssitzung beenden (169), um den Indexjob weiterlaufen zu lassen. Meine Frage ist; Wie kann ich verhindern, dass Tabellen, an denen der Indexjob arbeitet, gesperrt werden? Ich weiß, dass der Index zum Neuaufbau die Tabelle bcs offline bindet, aber sollte ich etwas Optimierung für die t-sql-Abfrage durchführen, die mehr als 22 Stunden lief? Bcs diese T-SQL-Abfrage wird oft von unserer ERP-Anwendung am Tag ausgeführt.
Die Abfrage ist;
SELECT T1.ACCOUNTNUM,T1.AMOUNTCUR,T1.AMOUNTMST,T1.DUEDATE,T1.RECID,T1.RECVERSION,T1.REFRECID,T1.TRANSDATE,T1.RECVERSION,T2.INVOICE
,T2.TRANSTYPE,T2.TRANSDATE,T2.AMOUNTCUR,T2.ACCOUNTNUM,T2.VOUCHER,T2.COLLECTIONLETTERCODE,T2.SETTLEAMOUNTCUR,T2.CURRENCYCODE,
T2.CUSTBILLINGCLASSIFICATION,T2.RECVERSION,T2.RECID,T3.ACCOUNTNUM,T3.PARTY,T3.CURRENCY,T3.RECID,T3.RECVERSION
FROM **CUSTTRANSOPEN** T1
CROSS JOIN CUSTTRANS T2
CROSS JOIN CUSTTABLE T3
WHERE ((([email protected]) AND ([email protected])) AND (T1.DUEDATE<@P3)) AND ((([email protected]) AND
([email protected])) AND (((((((T2.TRANSTYPE<[email protected]) OR ([email protected])) OR (([email protected]) OR ([email protected])))
OR ((([email protected]) OR ([email protected])) OR ([email protected]))) AND (T2.AMOUNTCUR>[email protected]))
AND (T1.ACCOUNTNUM=T2.ACCOUNTNUM)) AND (T1.REFRECID=T2.RECID))) AND ((([email protected]) AND ([email protected]))
AND (T2.ACCOUNTNUM=T3.ACCOUNTNUM)) ORDER BY T1.DUEDATE OPTION(FAST 5)
** Die gesperrte Tabelle ist: CUSTTRANSOPEN
Ich meine, für ex. sollte ich eine WITH (NOLOCK) -Anweisung in die Abfrage einfügen? Wie führen Sie große Abfragen gleichzeitig mit dem Indexauftrag aus?
** Ich habe Standard Edition SQL Server. Ein Online-Wiederaufbau ist also nicht möglich.