私は大きなデータベース(1.7 TBサイズ)を持っており、インデックスを再構築するためのメンテナンスインデックスジョブを持っています。この仕事は午後11時に予定されています。インデックスジョブで同時に大きなクエリを実行するにはどうすればよいですか?
今朝、私はサーバ上で実行されているクエリをチェックしていましたが、インデックスジョブがまだ実行中(10時間以上)しています。サーバ上で実行されている別のt-SQLクエリジョブがそのインデックスを再構築しようとしていたテーブルをロックしました。無限の進歩のようだったので、インデックスジョブを実行させ続けるために、ブロックセッション(169)を終了しなければなりませんでした。私の質問は、どのようにインデックスジョブが作業しているテーブルをロックするのを避けることができます。インデックスを再構築するとテーブルbcsがオフラインにロックされていることがわかりますが、22時間以上実行されていたt-sqlクエリを最適化する必要がありますか? Bcsこのt-SQLクエリは、当日のERPアプリケーションによって頻繁に実行されています。
クエリは次のとおりです。
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)
**ロックされたテーブルには、次のとおりです。CUSTTRANSOPEN
私が意味する、元のために。私はクエリにWITH(NOLOCK)文を置くべきですか? インデックスジョブで同時に大きなクエリを実行するにはどうすればよいですか?
**私はstandart edition sql serverを持っています。したがって、「オンライン再構築」は不可能です。