SQL Server وضع "الجافة الجافة"؟ قم بتحميل المخازن المؤقتة للبيانات ، دون الضغط على أقفال أو تغيير البيانات

StackOverflow https://stackoverflow.com/questions/2374457

سؤال

سأقوم بتشغيل بعض الاستعلامات مقابل قاعدة بيانات SQL Server ، تليها حذف. من الناحية المثالية ، يحدث كل هذا داخل المعاملة (أي ذرية).

ولكن من الناحية العملية ، نظرًا لأن البيانات قد تم تطهيرها منذ فترة طويلة من المخازن المؤقتة ، سيتعين على SQL Server أداء الكثير من IO المادية من أجل إكمال T-SQL المعامل. يمكن أن تكون هذه مشكلة ، لأنه إذا استغرقت الدفعة بأكملها أكثر من 30 ثانية لتشغيلها ، فسيواجه المستخدمون مشاكل في المهلة.

لقد لاحظت أنه إذا ركضت selectS في القطع ، في كل مرة تعمل أكثر فأكثر من SQL النهائي ، مما يتيح لخادم SQL ملء المخازن المؤقتة مع المزيد والمزيد من البيانات المطلوبة. على سبيل المثال:

الجولة الأولى:

 BEGIN TRANSACTION
 SELECT ... WHERE ...
 ROLLBACK

الجولة الثانية:

 BEGIN TRANSACTION
 SELECT ... WHERE ...
 SELECT ... WHERE ...
 ROLLBACK

...

N-Th Run:

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 Server بإجراء أي تعديلات فعلية للبيانات ، وليس أخذ أي أقفال ، ولكن املأ المخازن المؤقتة بالبيانات المطلوبة؟ على سبيل المثال

SET NOEXEC ON
EXECUTE ThatThingYouDo

SET NOEXEC OFF
EXECUTE ThatThingYouDo

أو

SET DRYRUN ON
EXECUTE ThatThingYouDo

SET DRYRUN OFF
EXECUTE ThatThingYouDo
هل كانت مفيدة؟

المحلول

لا.
دعنا نقول أنك قد أدخلت تليها تحديث على الصفوف المدرجة. لن تتمكن أبدًا من محاكاة التحديث لأن الصفوف المدرجة غير موجودة. الآن ، في هذه الحالة ، لماذا تختارك في الصفقة؟ افتراضيًا (أي ما لم تستخدم Holdlock أو ما شابه ذلك) ، فأنت لا تقفل الصفوف طوال مدة المعاملة.

إذا كنت تعتقد أن تجمع المخزن المؤقت (ويعرف أيضًا باسم ذاكرة التخزين المؤقت للبيانات) "ممتلئ" ، فأنت بحاجة إلى المزيد من ذاكرة الوصول العشوائي أو بعض الترقية/الحجم الأخرى.

نصائح أخرى

لقد وجدت أنه كلما حاولت القيام بشيء للغاية خارج الطبيعة لحل مشكلة ما ، فإن التصميم الأساسي هو على الأرجح المشكلة. هذا هو جدا من الطبيعي.

ربما يمكنك تقديم مزيد من المعلومات حول الحذف (حجم الجدول ، والنشاط ، والفهرس ، والصفوف للحذف ، والعمليات الأخرى التي تعمل ، وما إلى ذلك) التي تستغرق وقتًا طويلاً وستكون هناك حل تقليدي ، باستخدام فهرس أو قفل ، إلخ. .

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top