SQLサーバー"Dry Run"モードになっていますか?負荷データバッファを持つロックを変更するデータ
-
24-09-2019 - |
質問
っ走る一部のクエリに対してSQL Serverデータベースは、削除します。理想的にはすべてこの内部取引につ原).
が実質的にデータがてパージからのバッファ、SQLサーバーを行った多くの物理IOを成功させるために、取引T-SQL.これが問題になった場合のバッチの間に30秒、そのユーザー体験タイムアウトです。
いい走っ select
s片は、各時間走りの最終的なSQLの、SQL Serverのバッファがますます、必要なデータです。例えば:
初回起:
BEGIN TRANSACTION
SELECT ... WHERE ...
ROLLBACK
第二走り:
BEGIN TRANSACTION
SELECT ... WHERE ...
SELECT ... WHERE ...
ROLLBACK
...
n-thラ:
BEGIN TRANSACTION
SELECT ... WHERE ...
SELECT ... WHERE ...
...
SELECT ... WHERE ...
ROLLBACK
のんの 最終走行:
BEGIN TRANSACTION
SELECT ... WHERE ...
SELECT ... WHERE ...
...
SELECT ... WHERE ...
DELETE FROM ... WHERE ...
COMMIT
全体のバッチの足の速さのせいにしたり、バッファの予約できます。
あのモードのSQLサーバー SET NOEXEC ON
)障があると認められるSQLサーバーなどは行いません実際のデータの修正、なロックが埋のバッファに必要なデータはもらえますか?例えば
SET NOEXEC ON
EXECUTE ThatThingYouDo
SET NOEXEC OFF
EXECUTE ThatThingYouDo
または
SET DRYRUN ON
EXECUTE ThatThingYouDo
SET DRYRUN OFF
EXECUTE ThatThingYouDo
解決
はありません。
あなたが挿入された行のUPDATEでINSERTを踏襲しているとしましょう。あなたは、挿入された行が存在しないため、UPDATEをエミュレートすることはできないでしょう。さて、この場合には、なぜあなたの選択は、トランザクションにありますか?デフォルトでは(つまり、あなたがHOLDLOCKまたは類似を使用しない限り)、あなたは、トランザクションの期間行をロックされていません。
「フル、」あなたはより多くのRAMを必要とするか、または他のいくつかのアップグレードが/スケールアップ。
他のヒント
私はあなたの基本的なデザインは、最も可能性の高い問題であることを、あなたは非常に出て、通常の何かをしようとしたときに問題を解決することを見出しました。これは非常に正常な外です。
おそらくあなたは、など、そう長く取っていると、インデックスやロックを使用して、従来の解決策があるでしょうDELETE(テーブルサイズ、活動、インデックス、実行中の削除、他のプロセスへの行など)の詳細情報を提供することができアドレスにそれます。