وصف لحظر SQL Server بسبب تأمين الترجمة

ترجمات الموضوعات ترجمات الموضوعات
معرف المقالة: 263889 - عرض المنتجات التي تنطبق عليها هذه المقالة.
توسيع الكل | طي الكل

في هذه الصفحة

الموجز

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

معلومات أخرى

recompilation الإجراء المخزن شرح واحد لترجمة التأمين على إجراء مخزن أو المشغل. في هذه الحالة هو الحل لتقليل أو لإزالة recompiles. للحصول على شرح الأسباب الأكثر شيوعاً التي قد يلزم إجراء مخزن يتم recompiled وبعض المعلومات المفيدة على تقليل تكرار recompiles، انظر مقالة "قاعدة المعارف ل Microsoft" التالية:
243586استكشاف الأخطاء وإصلاحها recompilation إجراء مخزن
وسيناريو آخر منح حدوث تأمين الترجمة إذا تحققت الشروط التالية:
  • المستخدم الذي يقوم بتشغيل إجراء مخزن ليس مالك الإجراء.
  • اسم الإجراء المخزن غير مؤهل بشكل كامل مع اسم مالك الكائن.
على سبيل المثال، إذا كان يملك المستخدم "dbo" كائنdbo.mystoredprocويمكن لمستخدم آخر "Harry" تشغيل هذا الإجراء المخزن باستخدام الأوامر "exec mystoredproc،" البحث الأولية التخزين المؤقت بفشل اسم الكائن لأن الكائن غير مؤهل المالك. (لا بعد المعروف موجود آخر إجراء مخزن يسمى Harry.mystoredproc. ولذلك، SQL Server لا يمكن من النوع الصحيح لتنفيذ خطة المخزنة مؤقتاً ل dbo.mystoredproc.) ملقم SQL ثم يحصل على تأمين ترجمة خاص الإجراء والتحضيرات ترجمة الإجراء. ويتضمن ذلك تحليل اسم الكائن لكائن معرف. قبل تجميع SQL Server الخطة، يستخدم معرف هذا الكائن لإجراء بحث أكثر دقة من ذاكرة التخزين المؤقت الإجراء SQL Server ويمكن تحديد موقع خطة مترجمة مسبقاً حتى بدون تأهيل المالك.

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

يتم تسجيل التسلسل التالي من الأحداث في عملية تتبع Profiler ملقم SQL عند حدوث هذه المشكلة. (لتتبع الأحداث المتعلقة بذاكرة التخزين المؤقت، يجب تمكين الأحداث المتقدمة. للقيام بذلك، انقر فوقخياراتعلىأدواتالقائمة وقم بتحديدكافة فئات الأحداث.)

طي هذا الجدولتوسيع هذا الجدول
فئة الحدثالنص
RPC: بدء تشغيلmystoredproc
SP:CacheMissmystoredproc
SP:ExecContextHitmystoredproc
حزمة الخدمة SP: بدء تشغيلmystoredproc
......

SP:CacheMissيحدث عند فشل البحث التخزين المؤقت حسب الاسم. فيما يليSP:ExecContextHitيشير إلى خطة المخزنة مؤقتاً مطابقة تم النهاية العثور على في ذاكرة التخزين المؤقت بعد اسم الكائن غامضة تم حلها إلى معرف كائن. اعتماداً على الظروف،SP:CacheHitقد تظهر عوضاً عنSP:ExecContextHit.

يتم حل هذه المشكلة من تأمين التحويل البرمجي للتأكد من أن تكون المراجع إلى إجراءات مخزنة مؤهل المالك. (بدلاً منexec mystoredproc، استخدم execdbo.mystoredproc.) عندما يكون مالك-تأهيل الهامة لأسباب تتعلق بالأداء، لا يلزم تأهيل proc المخزنة مع اسم قاعدة البيانات لمنع البحث التخزين المؤقت إضافية.

حظر الذي هو بسبب الترجمة يمكن اكتشاف التأمين باستخدام البرامج النصية حظر مثل تلك التي تم تعريفها في مقالات "قاعدة المعارف ل Microsoft" التالية:
251004ملف INF: كيفية مراقبة حظر SQL Server 7.0
271509INF: كيفية مراقبة حظر SQL Server 2000
فيما يلي بعض النموذجي مميزات لحظر الترجمة التي يمكن ملاحظتها في إخراج البرنامج النصي حظر:
  • lastwaittypeبالنسبة SPIDs المحظورة والمنع (عادة) هو LCK_M_X (حصري) وwaitresourceيكون للنموذج "TAB: dbid:object_id[[ترجمة]]، "حيث يكون" object_id "معرف الكائن الإجراء المخزن.
  • يكون لديك blockerswaittype0x0000 runnable الحالة. أن blockeeswaittype0x000e (تأمين للاستخدام الخاص)، حالة سكون.
  • وعلى الرغم من أنه قد يكون الحادث المنع المدة طويلة، فهناك لم SPID واحد يتم حظر SPIDs الأخرى لفترة طويلة. يوجد حظر متدرجة. بمجرد اكتمال التحويل البرمجي واحد، تأخذ SPID آخر على دور حظر الإطارات الرأس لبضع ثوان أو أقل، وهكذا.
المعلومات التالية من لقطة منsysprocessesأثناء هذا النوع من حظر:
   spid  blocked  waittype  waittime  lastwaittype  waitresource
   ----  -------  --------  --------  ------------  -------------------------
   
   221    29      0x000e    2141      LCK_M_X       TAB: 6:834102 [[COMPILE]]
   228    29      0x000e    2235      LCK_M_X       TAB: 6:834102 [[COMPILE]]
    29   214      0x000e    3937      LCK_M_X       TAB: 6:834102 [[COMPILE]]
    13   214      0x000e    1094      LCK_M_X       TAB: 6:834102 [[COMPILE]]
    68   214      0x000e    1968      LCK_M_X       TAB: 6:834102 [[COMPILE]]
   214     0      0x0000       0      LCK_M_X       TAB: 6:834102 [[COMPILE]]
فيwaitresourceعمود ("6:834102")، 6 معرف قاعدة البيانات و 834102 معرف الكائن. يجب أن تدرك أن معرف الكائن هذا ينتمي إلى إجراء مخزن، لا إلى جدول (بالرغم من نوع تأمين "TAB").

ملاحظات
  • إذا كنت تستخدم SQL Server 2005، العديد من جداول النظام من SQL Server 2000 يتم الآن تطبيق كمجموعة من طرق العرض. ويعرف طرق العرض التوافق بين طرق العرض هذه، والتي تختص للتوافق مع الإصدارات السابقة. تعرض طرق العرض التوافق نفس بيانات التعريف المتوفر في SQL Server 2000. لمزيد من المعلومات حول تعيين بين جداول نظام SQL Server 2000 وطرق العرض لنظام SQL Server 2005، راجع الموضوع طرق "تعيين SQL Server 2000 النظام جداول إلى SQL Server 2005 النظام عرض" في SQL Server 2005 كتب عبر إنترنت.
  • إذا كان اسم الإجراء المخزن الخاص بك يبدأ بالبادئة "sp_" وليس في قاعدة البيانات الرئيسية، راجعSP:CacheMissقبل ذاكرة التخزين المؤقت إصابة لكل إذا حتى تنفيذ أنك مالك-تأهيل الإجراء المخزن. هذا بسبب إعلام البادئة sp_ الإجراء المخزن SQL Server أن الإجراء المخزن نظام، ونظام تخزين إجراءات قواعد دقة اسم آخر. (موقع "المفضلة" في قاعدة البيانات الرئيسية.) لا يجب أن تبدأ أسماء الإجراءات المخزنة التي قام المستخدم بإنشائها باستخدام "sp_".
  • إذا لم يتم تنفيذ إجراء مؤهل المالك بهذه حالة مختلفة عن إنشاء الإجراء مؤهل المالك ك، الإجراء مؤهل المالك يمكن الحصول علىCacheMissأو طلب تأمين ترجمة ولكن حتما باستخدام خطة المخزنة مؤقتاً. ولذلك، هذا إعادة قد لا فعلياً ترجمة الإجراء ويجب أن لا يتسبب مقدار الحمل الزائد. ولكن في بعض الحالات، طلب تأمين ترجمة يؤدي موقف "حظر سلسلة" إذا كان هناك العديد من SPIDs محاولة تنفيذ نفس الإجراء مع حالة مختلفة عن العملية التي تم إنشاؤها ك. ويصح ذلك بغض النظر عن ترتيب الفرز أو الترتيب الذي يتم استخدامه على الملقم أو في قاعدة بيانات. هو السبب في هذا السلوك يستند الخوارزمية التي يتم استخدامها للعثور على الإجراء في ذاكرة التخزين المؤقت بقيم التجزئة (لأسباب تتعلق بالأداء)، والتي يمكن أن تتغير حالة الحالة مختلفة.

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

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


المشكلات المعروفة

فيما يلي بعض المشكلات المعروفة التي قد تمنع خطة التخزين المؤقت:
  • You use BLOB variables as a Stored Procedure parameter. للحصول على مزيد من المعلومات، انقر فوق رقم المقالة التالي لعرض المقالة في قاعدة معارف Microsoft:
    2380435FIX: The query plan for a stored procedure is not cached if the stored procedure uses a BLOB variable and the variable is used in a string function in Microsoft SQL Server 2008
  • You use OPEN SYMMETRIC KEY in a Stored Procedure/Query Batch. For more information, see the following MSDN blog entry:
    http://blogs.msdn.com/b/sqlserverfaq/archive/2010/09/08/open-symmetric-key-command-prevents-query-plan-caching.aspx

الخصائص

معرف المقالة: 263889 - تاريخ آخر مراجعة: 18/ذو الحجة/1431 - مراجعة: 1.0
تنطبق على
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL Server 2005 Workgroup Edition
كلمات أساسية: 
kbinfo kbmt KB263889 KbMtar
ترجمة آلية
هام: تمت ترجمة هذا المقال باستخدام برنامج ترجمة آلية لشركة مايكروسوفت بدلاً من الاستعانة بمترجم بشري. تقدم شركة مايكروسوفت كلاً من المقالات المترجمة بواسطة المترجمين البشر والمقالات المترجمة آليًا وبالتالي ستتمكن من الوصول إلى كل المقالات الموجودة في قاعدة المعرفة الخاصة بنا وباللغة الخاصة بك. بالرغم من ذلك، فإن المقالة المترجمة آليًا لا تكون دقيقة دائمًا وقد تحتوي على أخطاء إملائية أو لغوية أو نحوية، مثل تلك الأخطاء الصادرة عن متحدث أجنبي عندما يتحدث بلغتك. لا تتحمل شركة مايكروسوفت مسئولية عدم الدقة أو الأخطاء أو الضرر الناتج عن أية أخطاء في ترجمة المحتوى أو استخدامه من قبل عملائنا. تعمل شركة مايكروسوفت باستمرار على ترقية برنامج الترجمة الآلية
اضغط هنا لرابط المقالة باللغة الانجليزية263889

إرسال ملاحظات

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com