بشكل افتراضي، يتضمن Service Pack 1 لعام 2014 خادم SQL و 3 حزمة خدمة ل SQL Server 2012 هذا الإصلاح وليس لديك لإضافة أي إشارات التتبع لتمكين الإصلاح. لتمكين هذا الإصلاح بعد تثبيت أحد التحديثات التراكمية في المقطع الحل، عليك بدء تشغيل Microsoft SQL Server بإضافة إشارة تتبع 1236 إلى معلمات بدء التشغيل.
الأعراض
افترض أن تقوم بتشغيل مثيل عام 2014 Microsoft SQL Server أو SQL Server 2012، SQL Server 2008 أو SQL Server 2008 R2 على جهاز كمبيوتر يحتوي على العديد من معالجات. عند عدد التأمينات (نوع المورد = قاعدة البيانات) لقاعدة بيانات معينة تتجاوز عتبة معينة، تواجه مشاكل الأداء التالية:
-
تقع قيم عالية لعدد spinlock LOCK_HASH .
ملاحظة: راجع قسم "مزيد من المعلومات" للحصول على معلومات حول كيفية مراقبة هذا spinlock. -
الاستعلامات أو عمليات تأمين قاعدة البيانات تتطلب وقتاً طويلاً لتكتمل. على سبيل المثال، قد تلاحظ تأخر الأداء التالية:
-
تسجيلات دخول SQL Server
-
استعلامات ملقم مرتبط
-
sp_reset_connection
-
حركات
-
ملاحظة: لتحديد موقع قائمة التأمين (نوع المورد = قاعدة البيانات) على قاعدة بيانات معين، راجع قسم "مزيد من المعلومات". تختلف القيمة الحدية بالبيئة.
الحل
معلومات التحديث التراكمي
تم تصحيح هذه المشكلة أولاً في التحديث التراكمي التالية من SQL Server.
التحديث التراكمي 13 ل SQL Server 2008 R2 SP2/en-us/help/2967540
التحديث التراكمي 17 ل SQL Server 2008 SP3/en-us/help/2958696
التحديث التراكمي 1 ل SQL Server 2014/en-us/help/2931693
التحديث التراكمي 9 ل SQL Server 2012 SP1/en-us/help/2931078
يحتوي التحديث التراكمي كل جديدة ل SQL Server على كافة الإصلاحات العاجلة وكافة إصلاحات الأمان التي تم تضمينها مع التحديث التراكمي السابق. تحقق من أحدث التحديثات التراكمية ل SQL Server:
معلومات الإصلاح العاجل
يتوفر إصلاح عاجل معتمد من Microsoft. ومع ذلك، يهدف هذا الإصلاح العاجل إلى حل المشكلة الموضحة في هذه المقالة فقط. تطبيق هذا الإصلاح العاجل فقط على الأنظمة التي تواجه هذه المشكلة بالتحديد. إذا كان يتوفر الإصلاح العاجل للتنزيل، يوجد قسم "الإصلاح العاجل تحميل المتوفرة" في أعلى مقالة قاعدة المعارف. إذا لم يظهر هذا المقطع، إرسال طلب إلى خدمة العملاء ل Microsoft والدعم للحصول على الإصلاح العاجل. ملاحظة: في حالة حدوث مشكلات إضافية أو أي استكشاف الأخطاء وإصلاحها، قد يلزم إنشاء طلب خدمة منفصل. سيتم تطبيق تكاليف الدعم المعتادة على أسئلة الدعم الإضافية والمشكلات التي لا يعمل على حلها هذا الإصلاح العاجل بالتحديد. للحصول على قائمة أرقام هواتف خدمة العملاء ل Microsoft والدعم أو لإنشاء طلب خدمة منفصل، قم بزيارة موقع Microsoft التالي على الويب:http://support.microsoft.com/contactus/?ws=supportملاحظة: يعرض النموذج "توفر تنزيل الإصلاح العاجل" اللغات التي يتوفر بها الإصلاح الجديد. في حالة عدم ظهور اللغة الخاصة بك، يكون بسبب عدم توفر إصلاح عاجل لتلك اللغة.
الحالة
أقرت Microsoft أن هذه مشكلة في منتجات Microsoft المسردة في قسم "ينطبق على".
مزيد من المعلومات
عند تطبيق بإجراء اتصال بملقم SQL، يؤسس أولاً سياق قاعدة بيانات. بشكل افتراضي، حاول الاتصال بالحصول على تأمين قاعدة البيانات في وضع SH. سيتم إصدار تأمين قاعدة SH عندما تم إيقاف الاتصال أو تغيير سياق قاعدة البيانات أثناء مدة الاتصال. إذا كان لديك العديد من الاتصالات النشطة التي تستخدم نفس سياق قاعدة البيانات، يمكن أن يكون التأمين العديد من نوع مورد قاعدة البيانات لقاعدة البيانات المحددة.
على كمبيوتر يحتوي على وحدات المعالجة المركزية 16 أو أكثر، استخدم جدول الكائنات نظام تأمين مقسم. ومع ذلك، لم يتم تقسيم تأمين قاعدة البيانات. ولذلك، تأمين أكبر العدد من قاعدة البيانات، زاد الوقت المستغرق للحصول على تأمين على قاعدة البيانات SQL Server. معظم التطبيقات لا تواجه أي مشاكل ناتجة عن هذا التصميم. ولكن مجرد العدد يتجاوز عتبة معينة، العمل الإضافي والوقت المطلوب للحصول على التأمين. على الرغم من أن التكلفة الدقيقة ثانية فقط لكل تأمين إضافية، بسرعة زيادة الوقت الإجمالي لمستودعات التجزئة تأمين محمية باستخدام spinlock. هذا يؤدي دورات CPU إضافية وينتظر عامل إضافي للحصول على التأمين. يقدم هذا الإصلاح العاجل تقسيم تأمين قاعدة البيانات عند تمكين تتبع العلامة T1236 عند بدء التشغيل. تقسيم تأمين قاعدة بيانات يحتفظ عمق قفل قائمة مميزة في كل أقسام محلية. هذا يحسن إلى حد كبير مسار وصول المستخدم للحصول على تأمين قاعدة البيانات . لمراقبة LOCK_HASH spinlock، يمكنك استخدام الاستعلام التالي.SET NOCOUNT ONCREATE TABLE #spinlock_stats([CaptureTime] datetime,[name] nvarchar(512),[collisions] bigint, [spins] bigint,[spins_per_collision] real,[sleep_time] bigint,[backoffs] int) DECLARE @counter int = 1 WHILE @counter < 100 BEGIN INSERT INTO #spinlock_stats SELECT GETDATE() as "CaptureTime" , * FROM sys.dm_os_spinlock_stats WHERE [name] = 'LOCK_HASH' WAITFOR DELAY '00:00:05' SET @counter +=1 END SELECT * FROM #spinlock_stats ORDER BY [CaptureTime] DROP TABLE #spinlock_stats لمزيد من المعلومات حول تشخيص وحل التنازع spinlock في SQL Server، انتقل إلى المستند التالي:تشخيص وحل التنازع Spinlock في SQL Serverملاحظة: على الرغم من أن هذه الوثيقة مطبوعة ل SQL Server 2008 R2، المعلومات لا تزال قابلة للتطبيق على SQL Server 2012.
المراجع
لمزيد من المعلومات حول تتبع إشارات في SQL Server 2012، انتقل إلى موقع TechNet التالي على الويب:
معلومات حول علامات التتبع في SQL Server 2012 لمزيد من المعلومات حول كيفية البحث عن عدد عمليات تأمين قاعدة البيانات المستخدم في قاعدة البيانات، استخدم الاستعلام التالي لحساب هذه القيمة:select Resource_database_id, resource_type, request_mode, request_status, count (*) 'LockCount' from sys.dm_tran_locks group by Resource_database_id, resource_type, request_mode, request_status