كيف يمكنني اختبار الأداء في SQL Server Mgmt Studio دون إخراج البيانات؟

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

  •  11-09-2019
  •  | 
  •  

سؤال

باستخدام SQL Server Management Studio.

كيف يمكنني اختبار أداء اختيار كبير (قل صفوف 600K) دون نافذة النتائج التي تؤثر على اختباري؟ كل الأشياء المتساوية أنها لا تهم حقا، لأن الاستعلامات سيكون إخراجها إلى نفس المكان. لكنني أرغب في تسريع دورات الاختبار الخاصة بي وأعتقد أن إعدادات الإخراج من استوديو إدارة SQL Server يدخل في طريقي. الإخراج إلى النص هو ما أستخدمه حاليا، لكنني آمل أن يكون بديلا أفضل.

أعتقد أن هذا يؤثر على أرقامي لأن قاعدة البيانات موجودة في صندوقي المحلي.

عدل

هل كانت مفيدة؟

المحلول

يمكنك القيام بذلك SET ROWCOUNT 1 قبل استفسارك. لست متأكدا من أنه ما تريده بالضبط ولكن ستجنب الاضطرار إلى الانتظار حتى يتم إرجاع الكثير من البيانات وبالتالي يمنحك تكاليف حساب دقيقة.

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

نصائح أخرى

يمكنك تعيين وقت الإحصاء على للحصول على قياس الوقت على الخادم. ويمكنك استخدام الاستعلام /تشمل إحصائيات العميل (SHIFT + ALT + S) على SSMS للحصول على معلومات تفصيلية حول استخدام وقت العميل. لاحظ أن استعلامات SQL لا تعمل ثم إرجاع النتيجة إلى العميل عند الانتهاء، ولكن بدلا من ذلك تشغيل كما يقومون بإرجاع النتائج وحتى تعليق التنفيذ إذا كانت قناة الاتصال ممتلئة.

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

SET ROWCOUNT 1 سيتوقف عن المعالجة بعد إرجاع الصف الأول مما يعني ما لم تحدث الخطة أن يكون لديك مشغل حظر، ستكون النتائج عديمة الفائدة.

أخذ مثال تافهة

SELECT * FROM TableX

تكلفة هذا الاستعلام في الممارسة ستعتمد بشدة على عدد الصفوف في TableX.

استخدام SET ROWCOUNT 1 لن تظهر أي من ذلك. بغض النظر عما إذا TableX يحتوي على صف واحد أو 1 مليار صفوف سيتوقف عن التنفيذ بعد إرجاع الصف الأول.

أنا في كثير من الأحيان تعيين SELECT النتائج للمتغيرات لتكون قادرة على النظر إلى أشياء مثل القراءة المنطقية دون تباطؤ بواسطة SSMs عرض النتائج.

  SET STATISTICS IO ON
  DECLARE @name nvarchar(35),
          @type nchar(3)

  SELECT @name = name, 
         @type = type
  FROM master..spt_values

هناك طلب ربط مرتبط توفير خيار "تجاهل النتائج في الخادم" في SSMS و / أو TSQL

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

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

أفضل شيء يمكنك القيام به هو التحقق من خطة تنفيذ الاستعلام (اضغط كنترول+ل) للاستعلام الفعلي. من شأنها أن تعطيك أفضل التخمين للأداء المتاحة.

أعتقد أن شرط أين WHERE 1=0 بالتأكيد يحدث على جانب SQL Server، وليس استوديو الإدارة. لن يتم إرجاع أي نتائج.

هل أنت محرك DB على نفس الجهاز الذي تقوم بتشغيل MGMT Studio على؟

يمكنك :

  • الإخراج إلى النص أو
  • الإخراج إلى الملف.
  • أغلق جزء نتائج الاستعلام.

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

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