أنت غير متصل حاليًا، وفي انتظار الإنترنت الخاص بك ليقوم بإعادة الاتصال

فهم INF: SQL Server منع مشاكل وحلها

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

اضغط هنا لرابط المقالة باللغة الانجليزية224453
الموجز
في هذه المقالة يشير مصطلح "اتصال" إلى تسجيل دخول جلسة عمل قاعدة البيانات. يظهر كل اتصال كما هو معرف جلسة (SPID). كل من هذه SPID يشار إليه غالباً على أنه إحدى العمليات على الرغم من أنه ليس سياق عملية منفصلة في المعتاد ملائماً. بدلاً من ذلك، يتألف SPID لكل من موارد الملقم بنيات البيانات الضرورية على خدمة طلبات اتصال واحد من عميل معطى. تطبيق عميل فردي أن يكون لديك واحد أو أكثر. من منظور SQL Server, هناك اختلاف لا اتصالات متعددة من تطبيق عميل واحد على جهاز كمبيوتر عميل واحد بين عدة اتصالات من عدة تطبيقات العميل أو عدة أجهزة كمبيوتر العميل. يمكن حظر اتصال واحد اتصال آخر بغض النظر عن ما إذا كانت emanate من نفس التطبيق أو تطبيقات منفصلة على جهازي كمبيوتر العميل مختلفة.
معلومات أخرى
تم حظر صفات unavoidable نظام إدارة أية قاعدة بيانات علائقية "(RDBMS) مع المستندة إلى تأمين التزامن. SQL Server حظر يحدث عندما يحتفظ SPID واحد تأمين على مورد محدد SPID ثاني يحاول الحصول على نوع تأمين متعارضة على نفس المورد. عادةً ما يكون الإطار الزمني الذي SPID الأول تأمين المورد صغيرة جداً. عند ذلك بتحرير التأمين الاتصال الثاني الحرة الحصول على تأمين الخاص به على المورد ومتابعة المعالجة. هذا هو السلوك العادي كما قد يحدث عدة مرات خلال دورة تدريبية من اليوم مع تأثير ملحوظًا على أداء النظام.

سياق المعاملة والمدة استعلام تحديد المدة التي يستغرقها يتم الاحتفاظ به تأمين و, وبالتالي ، الخاصة بهم التأثير على استعلامات أخرى. إذا لم يتم تنفيذ الاستعلام داخل معاملة (يتم استخدام لا تلميحات التأمين) ، التأمينات عن عبارات SELECT فقط يتم تعليق الطباعة على مورد في وقت فعلياً يتم للقراءة, وليس من أجل مدة الاستعلام. يتم تعليق في التأمين عن عبارات INSERT و UPDATE و DELETE لمدة الاستعلام كل تناسق البيانات و للسماح الاستعلام يتم التراجع عن إذا لزم الأمر.

تنفيذ معاملة الاستعلامات، مدة يتم التي تعليق التأمينات تتحدد بواسطة نوع الاستعلام مستوى عزل المعاملة وتأمين أم لا تلميحات تُستخدم في الاستعلام. للحصول على وصف من تأمين تلميحات تأمين و مستويات عزل المعاملة, راجع المواضيع التالية في "كتب SQL Server عبر إنترنت":
  • تأمين في مشغل قاعدة بيانات
  • تأمين تخصيص وتعيين الإصدار صف
  • أوضاع التأمين
  • تأمين توافق
  • صف مستويات عزل المستندة إلى تعيين الإصدار في مشغل قاعدة بيانات
  • التحكم في المعاملات (مشغل قاعدة بيانات)
عند تأمين حظر زيادة إلى النقطة حيث تأثير detrimental على أداء النظام وهو عادة إلى أحد الأسباب التالية:
  • يحتفظ SPID تأمين على مجموعة من الموارد لفترة ممتدة من الوقت قبل تحرير لها. هذا النوع من حظر يحل نفسه بمرور الوقت ولكن يؤدي إلى تدهور الأداء.
  • SPID يحتفظ التأمين على مجموعة من الموارد وإصدارات أبداً لهم. لم يتم تحليل نفسه هذا النوع من حظر ثم يمنع الوصول إلى الموارد المتأثرة بشكل غير محدود.
في السيناريو الأول أعلاه المشكلة حظر حل نفسه عبر الوقت كما SPID الإصدارات في التأمين. ومع ذلك، يمكن السوائل جداً كـ السبب SPID مختلفة حظر على موارد أخرى بمرور الوقت, إنشاء هدف نقل الموقف. لهذا السبب، يمكن الصعب استكشاف الأخطاء وإصلاحها باستخدام إدارة المؤسسة SQL Server أو استعلامات SQL الفردية هذه الحالات. نتائج الموقف الثاني في حالة متناسقة أسهل لتشخيص.

جاري جمع معلومات التأمين

إلى counteract الصعوبة في استكشاف مشاكل التجميد ، يمكن لمسئول قاعدة بيانات استخدام البرامج النصية SQL دائم مراقبة حالة التأمين حظر SQL Server. يمكن أن هذه البرامج النصية توفر لقطات مثيلات محددة بمرور الوقت، تصل إلى صورة الكلي المشكلة. للحصول على وصف عن كيفية مراقبة حظر البرامج النصية SQL راجع المقالات التالية في "قاعدة المعارف لـ Microsoft" (ينتقل بك هذا الارتباط إلى صفحة قد يكون محتواها كله أو جزء منه باللغة الإنجليزية):
271509كيفية مراقبة حظر في SQL Server 2005 وفي SQL Server 2000
سيتم تنفيذ البرامج النصية في هذه المقالة المهام أدناه. حيثما أمكن, تُعطى أسلوب الحصول على هذه المعلومات من SQL Server إدارة Studio.
  1. تعريف SPID (معرّف جلسة العمل) في رأس سلسلة حظر و عبارة SQL.
    بالإضافة إلى استخدام البرامج النصية في مقالة قاعدة البيانات المُشار إليها مسبقاً, يمكنك تحديد رأس سلسلة حظر باستخدام الميزات التي يتم توفيرها من خلال Studio إدارة ملقم SQL. للقيام بذلك، استخدم إحدى الطريقتين التاليتين:
    • انقر بزر الماوس الأيمن فوق كائن الملقم توسيع تقارير توسيع تقارير قياسي ، ثم انقر فوق النشاط – "كافة المعاملات الحظر". يقوم هذا التقرير بإظهار المعاملات في رأس حظر سلسلة. إذا قمت بتوسيع المعاملة ستظهر التقرير المعاملات التي يتم حظرها بواسطة معاملة الرأس. سيتم إظهار هذا التقرير أيضاً في "حظر عبارة SQL" و "المحظورة SQL بيان."
    • استخدم INPUTBUFFER(<spid>) DBCC العبارة الأخيرة التي تم تسليمها بواسطة SPID.
  2. البحث عن مستوى تداخل المعاملات وحالة عملية حظر SPID.
    يتوفر لمستوى التداخل المعاملة SPID في متغير عمومي @@ TRANCOUNT. ومع ذلك، فإنه يمكن تحديد من خارج SPID بواسطة الاستعلام عن الجدول sysprocesses كما يلي:

    SELECT open_tran FROM master.sys.sysprocesses WHERE SPID=<blocking SPID number>go						
    القيمة التي تم إرجاعها هي القيمة @@ TRANCOUNT SPID. يؤدي ذلك إلى إظهار مستوى تداخل المعاملات عن حظر SPID الذي بدوره يمكن تشرح لماذا يتم الضغط عليه التأمين. على سبيل المثال، إذا كانت القيمة أكبر من الصفر SPID يقوم midst معاملة (في الحالة التي كان المتوقع الاحتفاظ التأمينات معينة فإنه اكتسب ، استناداً إلى مستوى عزل المعاملة).

    يمكنك أيضاً التحقق مما إذا كان أي معاملات مفتوحة طويلة الأجل موجوداً في قاعدة البيانات باستخدام OPENTRAN DBCC database_name.

تجميع معلومات تتبع منشئ ملفات التعريف خادم SQL

بالإضافة إلى المعلومات المذكورة أعلاه من الضروري عادة التقاط تتبع منشئ ملفات التعريف الأنشطة على الملقم وتعبئته يتحقق مشكلة حظر على SQL Server. تم إرسال statementthat الأخير فقط ستظهر في التقرير المخزن المؤقت الإدخال أو الإخراج مراقبة النشاط في حالة تنفيذ SPID عبارات متعددة داخل معاملة,. ومع ذلك، قد أحد الأوامر السابقة سبب تأمين يتم لا يزال يتم تعليق. سيتم تمكين تتبع منشئ ملفات التعريف مشاهدة كافة الأوامر تنفيذها بواسطة SPID داخل المعاملة الحالية. تساعدك الخطوات التالية على إعداد SQL Server منشئ ملفات التعريف لالتقاط عملية تتبّع.
  1. افتح SQL Server منشئ ملفات التعريف.
  2. من القائمة ملف، أشر إلى جديد ثم انقر فوق تتبع.
  3. في التبويب عام، حدد اسماً تتبع واسم ملف لالتقاط البيانات.

    هام يجب أن تتم كتابة ملف التتبع إلى قرص المحلي بسرعة أو المشتركة. تجنب تتبع إلى محرك أقراص الشبكة أو القرص بطيئة. وتأكد أيضًا من الخادم بمعالجة تحديد بيانات التتبع.
  4. ضمن علامة التبويب "تحديد الأحداث" ، انقر لتحديد خانتي الاختيار إظهار كافة الأعمدة و إظهار كافة الأحداث.
  5. ضمن علامة التبويب تحديد الأحداث إضافة أنواع الأحداث التي تم سردها في الجدول 1 للتتبع الخاص بك.

    بالإضافة إلى ذلك، قد تتضمن أنواع الأحداث إضافية المسردة في الجدول 2 للحصول على مزيد من المعلومات. إذا كنت تشغّل في بيئة إنتاج التوزيع كبيرة قد تقرر لاستخدام الأحداث فقط في الجدول 1 كما هي كافية عموماً لاستكشاف الأخطاء وإصلاحها حظر معظم. بما في ذلك أحداث إضافية في الجدول 2 قد تجعل من السهل لتحديد مصدر مشكلة (أو قد تكون هذه الأحداث الضرورية للتعرف على بيان المتسبب في إجراء multi-statement). ومع ذلك، بما في ذلك الأحداث في الجدول 2 سيتم أيضاً إضافة التحميل على النظام وزيادة حجم الإخراج التتبع.
جدول 1: حدث أنواع
العنوانالحدث
الأخطاء والتحذيراتالاستثناء
الأخطاء والتحذيراتالانتباه
تدوين الأمانتدوين تسجيل الدخول
تدوين الأمانتدوين تسجيل الخروج
جلسات العملاتصال موجودة
إجراءات مخزنةRPC: البداية
tsqlSQL:BatchStarting

جدول 2: أنواع "الأحداث إضافية"
العنوانالحدث
المعاملاتDTCTransaction
المعاملاتSQLTransaction
إجراءات مخزنةRPC: اكتمل
tsqlSQL:BatchCompleted
إجراءات مخزنةSP:StmtStarting
إجراءات مخزنةSP:StmtCompleted

للحصول على مزيد من المعلومات حول استخدام منشئ ملفات التعريف بـ SQL Server الرجاء مراجعة SQL Server المباشرة.

تعريف و حل عام الحظر وحدات سيناريو

عن طريق فحص المعلومات أعلاه, يمكنك تحديد سبب مشكلات حظر معظم. الجزء المتبقي من هذه المقالة مناقشة حول كيفية استخدام هذه المعلومات إلى التعرف على بعض وحدات السيناريو الشائعة حظر وتصحيحها. هذه المناقشة يفترض أنك استخدمت النصية بالمنع في المقالة 271509 (الإشارة سابقًا) إلى التقاط معلومات حول SPID حظر إجراء تتبع منشئ ملفات التعريف مع أحداث الموضحة أعلاه.

عرض إخراج البرنامج النصي حظر

ناتج sys.sysprocesses لتحديد رؤوس السلاسل حظر
إذا لم يتم تحديد الوضع السريع للبرامج النصية حظر ستكون الجزء الموجود بعنوان "SPID في رأس حظر السلاسل" يسرد SPID يتم حظر SPID الأخرى في إخراج البرنامج النصي.
SPIDs at the head of blocking chains
إذا حددت الخيار سريعة ، لا يزال يمكنك تحديد رؤوس حظر وذلك بالنظر إلى إخراج sys.sysprocesses التالية التسلسل الهرمي SPID التي يتم عرضها في العمود المحظورة.
افحص الإخراج sys.sysprocesses للحصول على معلومات حول SPID في رأس السلسلة بالمنع.
من المهم أن يتم تقييم الحقول sys.sysprocesses التالية:

الحالة

يعرض هذا العمود الحالة SPID معينة. عادةً، يتم الإشارة إلى حالة سكون إتمام التنفيذ SPID ثم ينتظر التطبيق إرسال الاستعلام أو دفعي آخر. تشير إلى حالة runnableقيد التشغيل أو sos_scheduler_yield SPID الآن معالجة استعلام. يوفر الجدول التالي توضيحات مختصرة من قيم الحالة متنوعة.
الحالةيعني هذا الخيار
خلفيةSPID يتم تشغيل مهمة خلفية مثل الكشف عن حالة توقف تام.
سكونلم يتم حالياً تنفيذ SPID. يشير هذا SPID ينتظر أمر من التطبيق.
تشغيلSPID قيد التشغيل حالياً على جدولة.
runnableSPID قيد الانتظار runnable على جدولة و انتظار الحصول على وقت مجدول.
Sos_scheduler_yieldتم تشغيل SPID لكن لدى بالتوقف يسفر شريحة الوقت الخاص به على جدولة للسماح SPID آخر للحصول على وقت مجدول.
متوقف مرحلياًقيد انتظار حدث تأمين أو مغلاق SPID.
العودة إلى الحالة السابقةSPID قيد الاستعادة من إحدى المعاملات.
Defwakeupالإشارة إلى انتظار SPID مورد غير عملية يتم تحريرها. يجب أن تشير إلى حقل waitresource المورد المطلوب.

Open_tran

يخبر هذا الحقل مستوى تداخل المعاملات SPID. إذا كانت هذه القيمة أكبر من 0, يتم معاملة مفتوحة SPID ثم قد تكون الضغط التأمينات التي تم الحصول عليه من قبل أي جملة داخل المعاملة.

Lastwaittype waittype, و waittime

حقل lastwaittype هو تمثيل سلسلة الحقل waittype عمود ثنائي داخلي محجوز. إذا كان waittype 0x0000 ، لا قيد SPID انتظار لأي شيء ويشير قيمة lastwaittype الأخير waittype والتي احتوت SPID. إذا لم يكن waittype صفر تدل القيمة lastwaittype الحالي waittype SPID.

للحصول على وصف مختصر مختلفة lastwaittype وقيم waittype راجع المقالة التالية في قاعدة معارف Microsoft:
822101وصف waittype وأعمدة lastwaittype في الجدول master.dbo.sysprocesses في SQL Server 2000 و SQL Server 2005
لمزيد من المعلومات حول sys.dm_os_wait_stats راجع "كتب SQL Server عبر إنترنت".

يمكن استخدام القيمة waittime لتحديد ما إذا كان إجراء SPID التقدم. عند استعلام بالمقابلة مع جدول sys.sysprocesses ترجع قيمة في العمود waittime أقل من قيمة waittime من استعلام سابقة sys.sysprocesses هذا يشير إلى أن يتم الآن انتظار تأمين جديدة (بافتراض waittime غير صفرية) تم الحصول على تأمين السابقة واسم إصدارها ثم. يمكن التحقق هذا من خلال مقارنة waitresource بين sys.sysprocesses الإخراج.

Waitresource

يشير هذا الحقل إلى المورد في انتظار SPID. يسرد الجدول التالي تنسيقات waitresource العامة و الخاصة بهم معنى:
الموردتنسيقمثال
الجدولDatabaseID:ObjectID:IndexIDالتبويب: 5:261575970:1
في هذه الحالة، يتم 5 معرف قاعدة بيانات نموذج قاعدة بيانات pubs هو كائن 261575970 معرف الجدول عناوين و 1 هو فهرس متفاوت المسافات.
صفحةDatabaseID:FileID:PageIDالصفحة: 5:1:104
في هذه الحالة، يتم 5 معرف قاعدة بيانات pubs 1 معرف الملف هو ملف البيانات الأساسي و الصفحة 104 صفحة التي تنتمي إلى جدول عناوين.

التعرف على معرف كائن الصفحة ينتمي إلى استخدام الأمر PAGE DBCC (dbid, fileid ، pageid, output_option) وانظر m_objId. على سبيل المثال:
DBCC TRACEON ( 3604 )DBCC PAGE ( 5 , 1 , 104 , 3 )
مفتاحDatabaseID:Hobt_id (قيمة التجزئة فهرس المفتاح)مفتاح: 5:72057594044284928 (3300a4f361aa)

في هذه الحالة، 5 معرف قاعدة بيانات Pubs, 72057594044284928 Hobt_ID يناظر 2 index_id غير متفاوتة المسافات مع معرف الكائن 261575970 (عناوين الجدول). استخدم طريقة العرض الكتالوج sys.partitions لإقران hobt_id معينة فهرس معرف أو معرف كائن. لا توجد أية طريقة unhash التجزئة فهرس المفتاح إلى قيمة مفتاح فهرس محدد.
صفDatabaseID:FileID:PageID:Slot(row)يتخلص: 5:1:104:3

في هذه الحالة، يتم 5 معرف قاعدة بيانات pubs و 1 معرف الملف هو ملف البيانات الأساسي, الصفحة 104 صفحة التي تنتمي إلى جدول عناوين و فتحة 3 تشير إلى موضع الصف الموجود على الصفحة.
التحويل البرمجيDatabaseID:ObjectID [[الترجمة]]TAB: 5:834102012 [[الترجمة]] هذه غير تأمين جدول ولكن بدلاً من التحويل البرمجي تأمين على إجراء مخزن. معرف قاعدة البيانات 5 pubs, هو معرف 834102012 usp_myprocedure الإجراء المخزن. راجع 263889 مقالة قاعدة معارف للحصول على مزيد من المعلومات حول حظر سبب تأمين الترجمة.
أعمدة أخرى

يمكن أن يوفر الأعمدة sys.sysprocesses المتبقية أعمق الجذر مشكلة أيضاً. يختلف فائدة الخاصة بها بناءً على الظروف المشكلة. على سبيل المثال، يمكنك تحديد حالة حدوث المشكلة فقط من عملاء معينة (المضيف) على بعض مكتبات شبكة الاتصال (net_library) ، عندما كان الدفعة الأخيرة المرسلة من قبل SPID (last_batch) وهكذا.
افحص الإخراج INPUTBUFFER DBCC.
بالنسبة SPID أي رؤوس سلسلة حظر أو مع waittype صفرية سيقوم بتنفيذ البرنامج النصي حظر INPUTBUFFER DBCC لتحديد الاستعلام الحالي عن ذلك SPID.

في كثير من الحالات، يعتبر هذا هو الاستعلام الذي تسبب في حدوث تأمين يتم منع المستخدمين الآخرين للاحتفاظ بالرسائل. ومع ذلك، في حالة معاملة SPID التأمينات قد يكون تم الحصول بواسطة استعلام السابق تنفيذه العملية الحالية. ولذلك، يجب أيضاً عرض الإخراج منشئ ملفات التعريف الخاصة SPID inputbuffer وليس فقط.

ملاحظة لأن البرنامج النصي حظر يتكون من عدة خطوات, فمن الممكن أنه قد تظهر SPID في المقطع الأول رؤوس سلسلة حظر ولكن قبل تنفيذ الاستعلام INPUTBUFFER DBCC الوقت، فإنه يقوم بحظر لم يعد و لم يتم التقاط INPUTBUFFER. يشير هذا إلى حظر يتم حل نفسه عن ذلك SPID ومن أنه قد أو قد تكون مشكلة. عند هذه النقطة، يمكنك إما استخدام إصدار البرنامج النصي حظر سريعة لمحاولة ضمان التقاط inputbuffer قبل مسح (على الرغم من أنه مازال هناك أي ضمان) ، أو عرض البيانات منشئ ملفات التعريف الموجودة في هذا الإطار الزمني لتحديد ما هي استعلامات تم تنفيذها SPID.

عرض بيانات منشئ ملفات التعريف

يتم عرض البيانات منشئ ملفات التعريف بكفاءة هامة للغاية في حل مشاكل التجميد. الأكثر أهمية شيء تدرك أنه ليس لديك من البحث في كل شيء يمكنك التقاط; تكون المحدد. يوفر "منشئ ملفات التعريف الإمكانيات التي تساعدك بشكل فعال عرض البيانات الملتقطة. في مربع الحوار خصائص (من القائمة ملف، انقر فوق خصائص) ، منشئ ملفات التعريف يسمح لك تحديد البيانات المعروضة بواسطة إزالة أعمدة البيانات أو أحداث، التجميع (الفرز) بواسطة أعمدة البيانات وتطبيق عوامل التصفية. يمكنك البحث تتبع كاملة أو عمود محدد للحصول على قيم محددة فقط (في القائمة تحرير انقر فوق بحث). يمكنك أيضاً حفظ البيانات منشئ ملفات التعريف إلى جدول SQL Server (من القائمة ملف، أشر إلى "حفظ باسم ، ثم انقر فوق جدول) تشغيل استعلامات SQL مقابل عليه.

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

ما تريد البحث عنها:
  • ما الأوامر يحتوي على SPID رأس سلسلة حظر تنفيذ المعاملة الحالية ؟
    تصفية بيانات التتبع SPID معينة في رأس سلسلة حظر (من القائمة ملف، انقر فوق خصائص; قم ضمن علامة التبويب عوامل التصفية بتعيين القيمة SPID). ثم يمكنك فحص أوامر تم تنفيذ قبل الوقت أنه تم حظر SPID الأخرى. إذا قمت بتضمين أحداث المعاملات يمكن بسهولة التعرف عند بدأ تشغيل معاملة. وإلا، يمكنك البحث عمود نص BEGIN, عمليات تفوتك أو تنفيذ عملية المعاملة. استخدم قيمة open_tran من الجدول sysprocesses للتأكد من التقاط كافة الأحداث المعاملة. معرفة تنفيذ الأوامر و سياق المعاملة يسمح لك تحديد لماذا يتم الضغط SPID التأمين.

    تذكر، يمكنك إزالة الأعمدة أحداث والبيانات. بدلاً من تنظر كلا بدء اختر أحد الأحداث المكتملة. إذا لم تكن SPID حظر الإجراءات المخزنة إزالة SP: بدء تشغيل أو SP: اكتمال أحداث; إلى SQLBatch وأحداث RPC ستظهر استدعاء إجراء. عرض أحداث SP عند الحاجة إلى معرفة ذلك مستوى التفاصيل فقط.
  • ما هي مدة الاستعلامات SPID في رأس حظر السلاسل ؟
    إذا قمت بتضمين أحداث المكتملة أعلاه يُظهر العمود المدة وقت تنفيذ الاستعلام. يساعد هذا في التعرف على الاستعلامات تشغيلها لفترة طويلة التي تتسبب في منع. لتحديد سبب تنفيذ الاستعلام ببطء عرض وحدة المعالجة المركزية (CPU) ، القراءة و الكتابة الأعمدة وكذلك الحدث خطة التنفيذ.

تصنيف حظر السيناريوهات الشائعة

تعيين الجدول أدناه الأعراض الشائعة الخاصة بهم الأسباب المحتمل. يطابق رقم المشار إليها في العمود السيناريو إلى الرقم الموجود في المقطع "العامة الحظر وحدات سيناريو"و"تحليل" من هذه المقالة أدناه. راجع المعلومات sysprocesses الأعمدة WaittypeOpen_Tran وحالة. يحل ؟ يشير العمود إلى حظر سيتم حل سواء على الخاصة به.

السيناريوWaittypeOpen_Tranالحالةتقدم هذه المقالة حلاً ؟الأعراض الأخرى
1بدون صفر>= 0runnableنعم، عند انتهاء الاستعلام.الأعمدة و/Physical_IO, وحدة المعالجة المركزية (CPU) أو Memusage ستزيد من الوقت. سيتم عالية عند انتهاء مدة للاستعلام.
20x0000>0سكونلا، لكن يمكن مقتولون SPID.قد تكون مشاهدة إشارة انتباه في منشئ ملفات التعريف حدث التتبع للحصول على هذا SPID تشير مهلة الاستعلام أو إلغاء الأمر.
30x0000>= 0runnable"لا". سوف لن حل حتى جلب كافة الصفوف أو إغلاق اتصال العميل. يمكن مقتولون SPID ولكن قد تستغرق حتى 30 ثانية.إذا كان open_tran = 0، و SPID يحتفظ التأمينات بينما يكون مستوى عزل المعاملة الافتراضي (قراءة COMMMITTED) ، هذا سبب المحتمل.
4يختلف>= 0runnable"لا". سوف لن حل حتى يلغي الاستعلامات أو إغلاق اتصالات العميل. يمكن مقتولون SPID ولكن قد تستغرق حتى 30 ثانية.العمود اسم المضيف في sysprocesses لـ SPID في رأس سلسلة حظر سيتم نفس أحد SPID يقوم بحظر.
50x0000>0العودة إلى الحالة السابقةنعم.قد يمكن رؤيتها إشارة انتباه في تتبع منشئ ملفات التعريف الخاصة SPID هذا يشير إلى مهلة استعلام أو إلغاء حدث أو إصدار ببساطة عبارة العودة إلى الحالة السابقة.
60x0000>0سكونأخيراً. عندما Windows NT تحديد جلسة العمل نشطة أطول لا يوجد ملقم SQL سيتم قطع الاتصال.قيمة last_batch في sysprocesses أقدم بكثير من الوقت الحالي.

الحظر السيناريوهات الشائعة و حلول

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

    دقة:
    يتم حل هذا النوع من المشاكل حظر للبحث عن طرق لتحسين أمثلية الاستعلام. في الحقيقة، هذه الفئة من حظر المشكلة قد فقط وجود مشكلة في أداء ، وتتطلب لاتباع عليه كما. للحصول على معلومات حول استكشاف الأخطاء وإصلاحها استعلام بطء تشغيل معينة راجع مقالة "قاعدة معارف Microsoft" التالية:
    243589كيفية استكشاف أخطاء الاستعلامات بطء تشغيل SQL Server 7.0 أو الإصدارات الأحدث
    التطبيق الكلي الأداء استكشاف الأخطاء وإصلاحها، راجع مقالة قاعدة البيانات التالية:
    224587كيف TO: استكشاف أخطاء أداء التطبيق مع ملقم SQL
    لمزيد من المعلومات، راجع الموضوع كتب SQL Server 2008 الفورية مراقبة أداء ثم ضبط مواضيع How-to على موقع MSDN التالي: إذا كان لديك استعلام تشغيلها لفترة طويلة يتم منع المستخدمين الآخرين يمكن تحسين بعين الاعتبار نقل من OLTP بيئة نظام دعم قرار.
  2. حظر تسبب بواسطة SPID Sleeping التي تم فقدها تعقب المعاملات تداخل المستوى

    يمكن تعريف هذا النوع من حظر غالباً بواسطة SPID هو سكون أو ينتظر أمر, بعد المعاملات الخاصة به تداخل مستوى (@@ TRANCOUNT ، open_tran من sysprocesses) أكبر من الصفر. يمكن أن يحدث هذا إذا كان التطبيق يواجه مهلة استعلام أو مشاكل في إلغاء دون أيضاً إصدار العدد المطلوب من عبارات عملية و/أو الالتزام. عندما يتلقى SPID مهلة الاستعلام أو إلغاء الأمر, فإنه سيتم إنهاء الاستعلام الحالي و الدفعية, ولكن تلقائياً استرجاع أو تنفيذ المعاملة. التطبيق مسؤولةً عن ذلك, كما SQL Server لا يفترض أن معاملة بالكامل يجب أن يتم التراجع عن ببساطة لوقوع الآن إلغاء استعلام واحد. مهلة الاستعلام أو إلغاء سيتمكن من رؤيتها كحدث إشارة تنبيه SPID في تتبع منشئ ملفات التعريف.

    إلى عرض هذا, إصدار استعلام بسيط التالية من "استعلام محلل":

    BEGIN TRAN SELECT * FROM SYSOBJECTS S1, SYSOBJECTS S2-- Issue this after canceling querySELECT @@TRANCOUNTROLLBACK TRAN						
    أثناء تنفيذ الاستعلام الأحمر انقر فوق الزر إلغاء الأمر. بعد إلغاء الاستعلام SELECT @@ TRANCOUNT تشير إلى مستوى التداخل معاملة واحدة. واجه هذا تم UPDATE أو DELETE على استعلام أو قد تم استخدامها HOLDLOCK على SELECT ، كافة التأمينات الحصول هل لا تزال بالرسائل. حتى مع استعلام أعلاه إذا كان الحصول على استعلام آخر موجود التأمينات سابقاً في المعاملة, فإنها لا تزال بالرسائل عندما تم إلغاء SELECT أعلاه.

    دقة:

    • يجب أن التطبيقات من إدارة مستويات تداخل المعاملات بشكل صحيح أو أنها قد تسبب مشكلة حظر الإلغاء الاستعلام بهذه الطريقة التالية. يمكن أن يكون ذلك في إحدى طرق عديدة:
      1. في معالج الأخطاء في تطبيق العميل بإرسال IF @@ TRANCOUNT > 0 يتم اتباع أي خطأ إذا كان تطبيق العميل تعتقد أنه معاملة TRAN عملية فتح. هذا مطلوب, لأن إجراء مخزن استدعاء أثناء الدُفعة قد بدأت معاملة دون علم تطبيق العميل. ملاحظة شروط معينة مثل إلغاء الاستعلام، منع الإجراء من التنفيذ بعد العبارة الحالية كذلك حتى إذا كان الإجراء منطق التحقق IF <>@@ خطأ 0 و إحباط المعاملة هذه التعليمة البرمجية العودة إلى الحالة السابقة لن يكون تنفيذها في هذه الحالات.
      2. استخدام SET ON XACT_ABORT اتصال أو في الإجراءات المخزنة والتي تبدأ المعاملات هي عملية التنظيف حتى بعد حدوث خطأ. سيتم إحباط أي معاملات المفتوحة ثم إعادة التحكم إلى العميل هذا الإعداد يتعلق حدوث خطأ في وقت التشغيل. لاحظ أنه لن يتم تنفيذ جمل SQL T يلي عبارة الذي تسبب في الخطأ.
      3. إذا تجمع الاتصالات قيد الاستخدام في تطبيق الذي يفتح الاتصال ويعمل على عدد قليل من الاستعلامات قبل تحرير الاتصال مرة أخرى إلى تجمع مثل تطبيق يستند إلى ويب تعطيل تجمّع الاتصال مؤقتاً قد يساعد تخفف المشكلة حتى يتم تعديل تطبيق العميل لمعالجة الأخطاء بشكل مناسب. عن طريق تعطيل تجمع الاتصالات "، تحرير الاتصال سيؤدي تسجيل خروج فعلي من SQL Server الاتصال، مما يؤدي إلى الملقم الآن استعادة أي معاملات مفتوحة.
      4. إذا تم تمكين تجمّع الاتصال وكان الملقم الوجهة SQL Server 2000 قد يكون تفيد ترقية جهاز الكمبيوتر العميل إلى MDAC 2.6 أو أحدث. يضيف هذا الإصدار من مكونات MDAC رمز برنامج تشغيل ODBC أو موفر OLE DB بحيث الاتصال قد يكون "إعادة" قبل يتم إعادة استخدامها. استدعاء هذه sp_reset_connection إحباط أي معاملات بدؤه من قبل الملقم (بدؤه من قبل التطبيق العميل معاملات DTC لا تتأثر) ، يعيد تعيين قاعدة البيانات الافتراضية وخيارات SET وهكذا دواليك. لاحظ إعادة الاتصال لا حتى يتم استخدامها من تجمّع الاتصال لذا فمن الممكن أن مستخدم قد فتح معاملة ثم حرر الاتصال تجمّع الاتصال ولكن ذلك قد لا يتم استخدامها لبضع ثوان أثناء الوقت المعاملة قد تبقى مفتوحة. لم يتم إعادة استخدام الاتصال سيتم إحباط المعاملة عند مهلة الاتصال أو إزالتها من تجمّع الاتصال. وبالتالي، فمن الأمثل تطبيق العميل إحباط المعاملات في معالج الأخطاء الخاصة بهم أو استخدام SET ON XACT_ABORT تجنب هذا التأخير المحتملة.
    • في الحقيقة، هذه الفئة من حظر المشكلة قد أيضاً وجود مشكلة في أداء ، وتتطلب لاتباع عليه كما. إذا كان يمكن أن يكون وقت تنفيذ الاستعلام تتناقص, لا يحدث مهلة الاستعلام أو إلغاء الأمر. من المهم أن تكون قادراً على معالجة المهلة أو إلغاء وحدات سيناريو التطبيق يجب أن يقوموا تنشأ ولكنه أيضًا قد يستفيد من فحص أداء الاستعلام.
  3. حظر تسبب بواسطة SPID غير تطبيق عميل المطابقة التي جلب كافة الصفوف نتيجة إلى الاكتمال

    بعد إرسال استعلام إلى الملقم, يجب على كافة التطبيقات إحضار كافة الصفوف في نتيجة مباشرة إلى الاكتمال. إذا تطبيق لا جلب كافة الصفوف النتيجة, يمكن ترك التأمين على جداول منع مستخدمين آخرين. إذا كنت تستخدم أحد تطبيقات بشفافية بإرسال SQL عبارات إلى الملقم يجب أن التطبيق جلب كافة الصفوف النتيجة. إذا لم تكن كذلك (وفي حالة لا يمكن تكوين بذلك) ، قد لا تتمكن من حل مشكلة حظر. لتجنب المشكلة يمكنك تقييد بشكل سيئ behaved تطبيقات إلى التقارير أو قاعدة بيانات دعم قرار.

    دقة:

    يجب أن يكون التطبيق re-written إحضار كافة الصفوف من النتيجة إلى الاكتمال.
  4. حظر تسبب بواسطة Deadlock العميل/الملقم الموزعة

    بعكس توقف تام الاصطلاحية حالة توقف تام موزعة غير detectable باستخدام إدارة التأمين RDBMS. هذا السبب إلى أن أحد الموارد المتضمنة في حالة توقف تام يتم تأمين SQL Server. الجانب الآخر حالة توقف تام في مستوى التطبيق، العميل التي قام SQL Server لا يوجد عنصر التحكم. فيما يلي أمثلة جهازي كيف يمكن أن يحدث هذا وتجنب طرق المحتملة التطبيق يمكن عليه.

    1. العميل/الملقم الموزعة Deadlock مع عميل مفرد مؤشر الترابط
      إذا كان العميل عدة اتصالات مفتوحة و مسار تنفيذ واحد التنفيذ, قد تحدث حالة توقف تام التالية الموزعة. للحصول على brevity ، هنا المصطلح "dbproc" استخدام تشير إلى بنية اتصال العميل.

       SPID1------blocked on lock------->SPID2  /\                         (waiting to write results           |                           back to client)  |                                 |  |                                 |                      Server side  | ================================|==================================  |     <-- single thread -->       |                      Client side  |                                 \/  dbproc1   <-------------------   dbproc2 (waiting to fetch             (effectively blocked on dbproc1, awaiting  next row)                     single thread of execution to run)								
      في حالة الموضح أعلاه على مؤشر ترابط تطبيق عميل واحد اتصالين مفتوحة. يقوم بإرسال عملية SQL على dbproc1 بشكل غير متزامن. وهذا يعني أنه لا ينتظر على الاستدعاء لإعادة قبل المتابعة. التطبيق ثم يقوم بإرسال آخر عملية SQL على dbproc2 ثم awaits النتائج لبدء معالجة البيانات التي تم إرجاعها. عند تشغيل البيانات الواردة للخلف (أي dbproc أولاً يستجيب--يفترض هذا هي dbproc1) ، يقوم بمعالجة إلى إرجاع كافة البيانات الموجودة على ذلك dbproc الإكمال. كان جلب نتائج من dbproc1 حتى يحصل حظر SPID1 على تأمين يتضمنها SPID2 (لأن تعمل الاستعلامات اثنين بشكل غير متزامن على الملقم). في هذه المرحلة، dbproc1 سينتظر بشكل غير محدود من البيانات. ممنوع تأمين SPID2 ولكن يحاول إرسال البيانات إلى العميل به dbproc2. ومع ذلك، dbproc2 بفاعلية محظور على dbproc1 عند طبقة التطبيقات مسار تنفيذ واحد التنفيذ للتطبيق قيد الاستخدام بواسطة dbproc1. وينتج عن حالة توقف تام يكشف عن SQL Server أو حل واحد فقط من للموارد المتضمنة لأن مورد SQL Server.
    2. العميل/الملقم الموزعة Deadlock مع مؤشر ترابط لكل اتصال

      حتى في حالة وجود مؤشر ترابط منفصل لكل اتصال على العميل لا يزال قد تحدث تباينات من حالة توقف تام هذا الموزعة كما هو موضح بواسطة التالية.

      SPID1------blocked on lock-------->SPID2  /\                         (waiting on net write)        Server side  |                                 |  |                                 |  | INSERT                          |SELECT  | ================================|==================================  |     <-- thread per dbproc -->   |                      Client side  |                                 \/  dbproc1   <-----data row-------   dbproc2 (waiting on                     (blocked on dbproc1, waiting for it  insert)                         to read the row from its buffer)								
      تشبه هذه الحالة المثال أ، باستثناء dbproc2 و SPID2 تعمل عبارة SELECT مع بغرض من الذي تنفيذ الصف - على - - معالجة والوقت منح كل صف خلال مخزن مؤقت إلى dbproc1 للحصول على INSERT UPDATE, أو DELETE العبارة في نفس الجدول. SPID1 أخيراً, يصبح حظر (تنفيذ INSERT أو UPDATE أو DELETE) على تأمين يتضمنها SPID2 (تنفيذ SELECT). يكتب SPID2 صف نتيجة dbproc2 العميل. يحاول Dbproc2 لتمرير الصف في مخزن مؤقت إلى dbproc1 ولكن dbproc1 وإيجاد مشغول (تم حظره انتظار SPID1 لإنهاء INSERT الحالي الذي يتم حظر على SPID2). عند هذه النقطة، يتم حظر dbproc2 عند طبقة التطبيقات بواسطة dbproc1 SPID (SPID1) التي تم منع مستوى قاعدة البيانات قبل SPID2. مرة أخرى، هذا نتائج في حالة توقف تام يكشف عن SQL Server أو حل واحد فقط من للموارد المتضمنة لأن مورد SQL Server.
    الأمثلة كلا أ وب هي المشكلات الأساسية التي مطوري التطبيقات يجب أن تكون ملماً بها. يجب أن يقوموا رمز التطبيقات معالجة هذه الحالات بشكل مناسب.

    دقة:

    الحلين الموثوقة استخدام مهلة استعلام أو اتصالات منضم.

    • مهلة الاستعلام
      عندما تم توفير مهلة استعلام في حالة حدوث حالة توقف تام الموزعة ، فإنه سوف يكون مقطوع متى ثم يحدث المهلة. راجع مكتبة - DB أو وثائق ODBC للحصول على مزيد من المعلومات حول استخدام مهلة استعلام.
    • ربط الاتصالات
      تسمح هذه الميزة عميل اتصالات متعددة لديك الربط إليها داخل مساحة معاملة واحدة بحيث عدم حظر الاتصالات بعضها البعض. للحصول على مزيد من المعلومات، راجع الموضوع "استخدام اتصالات منضمة" في SQL Server 7.0 المباشرة.
  5. حظر تسبب بواسطة SPID التي على "ذهبية," أو "الاستعادة" ، حالة

    تعديل استعلام بيانات التي يتم مقتولون أو إلغاء خارج معاملة المعرفة من قبل المستخدم سوف يتم التراجع عن. أيضاً يمكن أن يحدث هذا التأثير الجانب من إعادة تشغيل الكمبيوتر العميل وقطع به شبكة اتصال جلسة العمل. وبطريقة مماثلة، استعلام تحديد تأثير حالة توقف تام سوف يتم التراجع عن. استعلام تعديل بيانات غالباً لا يتم التراجع عن أي أسرع من البداية تم تطبيق التغييرات. على سبيل المثال، إذا كان يتم تشغيل عبارة UPDATE أو INSERT أو DELETE من أجل ساعة, قد تستغرق الأقل ساعة استرجاع. هذا هو السلوك المتوقع بسبب التغييرات التي تم إجراؤها يجب أن تكون تماماً التراجع أو تسوية تكامل رسائل المعاملات والرسائل فعلي في قاعدة البيانات. لأنه يجب أن يحدث هذا SQL Server علامات SPID في حالة "ذهبية" أو العودة إلى الحالة السابقة (مما يعني أنه لا يمكن إيقاف أو المحدد كـ تأثير حالة توقف تام). يمكن تعريف غالباً عن طريق مراقبة الإخراج sp_who, والذي قد يشير إلى الأمر عملية. عمود الحالةsys.sysprocesses تشير إلى حالة عملية والتي تظهر أيضاً في إخراج sp_who أو في مراقبة نشاط Studio إدارة SQL Server.
    دقة:

    عليك الانتظار حتى SPID لإنهاء الآن استعادة التغييرات التي تم إجراؤها.

    إذا تم إيقاف الملقم يتعلق midst هذه العملية ستكون قاعدة البيانات في وضع الاسترداد عند إعادة تشغيل ستكون غير مقبولة حتى فتح كافة يتم معالجة المعاملات. بدء التشغيل الاسترداد تأخذ نفس القدر من الوقت لكل معاملة كـ الاسترداد وقت التشغيل بشكل أساسي لها إليه قاعدة البيانات أثناء هذه الفترة. وبالتالي، فرض الملقم إلى إصلاح SPID في حالة الاستعادة غالباً سيتم counterproductive.

    لتجنب هذا الموقف لا تقم بتنفيذ كبيرة الدفعي INSERT ، UPDATE, أو DELETE عمليات أثناء ساعات مشغولاً على أنظمة OLTP. إذا كان ذلك ممكناً إجراء عمليات مثل أثناء فترات الأنشطة منخفضة.
  6. حظر تسبب حسب اتصال المعزولة

    في حالة إعادة تشغيل اعتراضات تطبيق عميل أو محطة عمل العميل, جلسة عمل شبكة الاتصال إلى الملقم قد لا يتم فوراً إلغاء بعض الحالات. من منظور للملقم العميل ظاهراً وجودها و لا يزال يتم الاحتفاظ التأمينات التي تم الحصول عليه. لمزيد من المعلومات، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف لـ Microsoft" (ينتقل بك هذا الارتباط إلى صفحة قد يكون محتواها كله أو جزء منه باللغة الإنجليزية):
    137983كيفية استكشاف أخطاء اتصالات المعزولة في SQL Server

    دقة:

    إذا تم قطع اتصال تطبيق العميل بدون تنظيف بشكل مناسب موارده يمكن إنهاء SPID باستخدام الأمر إنهاء العمل ". يأخذ الأمر إنهاء العمل قيمة SPID كإدخال. على سبيل المثال، إنهاء SPID 9 ، ببساطة إصدار الأمر التالي:

    KILL 9						

    ملاحظة قد يستغرق الأمر إنهاء العمل 30 ثانية لإكمال لوقوع الفاصل الزمني بين عمليات فحص الأمر إنهاء العمل.

تدخل التطبيق في منع مشاكل

قد يكون هناك ومقاييس الاتجاه للتركيز على جانب الملقم توليف والنظام الأساسي مشكلات عند مواجهة مشكلة حظر. على الرغم من ذلك، هذا يؤدي عادة إلى دقة ثم يمكن absorb والوقت توجيه بشكل أفضل في تطبيق العميل و استعلامات يقوم بإرسال تفحص الطاقة. بغض النظر عن ما هو مستوى التطبيق كشف فيما يتعلق المكالمات قاعدة بيانات تم إجراؤه مشكلة حظر nonetheless بشكل متكرر الرؤية يتطلب كلا الفحص من عبارات SQL الدقيق المرسلة من قبل التطبيق وسلوك التطبيق الصحيح فيما يتعلق الإلغاء الاستعلام, إدارة اتصالات جلب كافة الصفوف يؤدي وهكذا. إذا كان لا يسمح أداة تطوير التحكم الصريح إدارة اتصالات ، الإلغاء الاستعلام, مهلة الاستعلام, جلب النتيجة وما إلى ذلك, قد لا يكون مشاكل التجميد للحل. يجب أن يكون فحص هذا المحتملة بشكل كبير قبل تحديد أحد أدوات تطوير تطبيق لـ SQL Server خاصة من أجل بيئات OLTP الحيوية للأعمال.

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

باستخدام التطبيق الصحيح و تصميم الاستعلام Microsoft SQL Server قادرة على دعم آلاف العديد من المستخدمين المتزامنة على ملقم واحد مع حظر صغيرة.

تحذير: تمت ترجمة هذه المقالة تلقائيًا

خصائص

رقم الموضوع: 224453 - آخر مراجعة: 09/11/2009 19:03:10 - المراجعة: 5.1

Microsoft SQL Server 2005 Developer Edition, Microsoft SQL Server 2005 Enterprise Edition, Microsoft SQL Server 2005 Standard Edition, Microsoft SQL Server 2008 Developer, Microsoft SQL Server 2008 Enterprise, Microsoft SQL Server 2008 Standard, Microsoft SQL Server 2008 Workgroup, Microsoft SQL Server 2000 Developer Edition, Microsoft SQL Server 2000 Enterprise Edition, Microsoft SQL Server 2000 Standard Edition, Microsoft SQL Server 7.0 Standard Edition, Microsoft SQL Server 2008 R2 Developer, Microsoft SQL Server 2008 R2 Enterprise, Microsoft SQL Server 2008 R2 Standard, Microsoft SQL Server 2008 R2 Workgroup

  • kbmt kbhowto kbtshoot kbexpertiseinter kbinfo KB224453 KbMtar
تعليقات
m() * 3)).toString(16)); var m = document.createElement("meta"); m.content = guid; m.name = "ms.dqid"; document.getElementsByTagName("head")[0].appendChild(m);