سؤال

في حي قاعدة البيانات الخاصة بنا / إنتاج أحاول إضافة مشغل لجدول، ولكن لم تكلل بالنجاح. لقد حاولت عدة مرات، ولكنه لم يمض أكثر من 30 دقيقة لخلق بيان الزناد لاستكمال ولقد إلغاؤها.

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

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

وهنا هو خلق بيان الزناد أن أحاول تشغيل

CREATE TRIGGER [OnItem_Updated] 
    ON  [Item]
   AFTER UPDATE
AS 
BEGIN
    SET NOCOUNT ON;

    IF update(State)
    BEGIN
        /* do some stuff including for each row updated call a stored 
          procedure that increments a value in table based on the 
          UserId of the updated row */
    END
END

ويمكن أن تكون هناك مشاكل مع خلق الزناد على طاولة في حين يتم تحديث الصفوف أو إذا كان لديه العديد من الصفوف؟

في مشغلات سيكلسرفير يتم إنشاؤها تمكين افتراضيا. هل من الممكن لإنشاء الزناد تعطيل افتراضيا؟

وأي أفكار أخرى؟

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

المحلول

قد لا تكون المشكلة في الجدول نفسه، ولكن في جداول النظام التي لديها ليتم تحديثه من أجل خلق الزناد. إذا كنت تفعل أي نوع آخر من DDL كجزء من العمليات العادية التي يمكن أن يعيق ذلك.

استخدم sp_who لمعرفة أين كتلة يأتي من بعد ذلك التحقيق من هناك.

نصائح أخرى

وأعتقد أن CREATE الزناد محاولة وضع قفل على الجدول بأكمله.

إذا كان لديك الكثير من النشاط على هذا الجدول انها قد تضطر الى الانتظار وقتا طويلا، ويمكن أن يكون خلق طريق مسدود.

لأية تغييرات مخطط يجب عليك حقا الحصول على الجميع من قاعدة البيانات.

وقال أن من المغري أن تضع في التغييرات "صغيرة" مع اتصالات نشطة. يجب أن نلقي نظرة على أقفال / وصلات لنرى أين الخلاف القفل هو.

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

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

وجزء من المشكلة قد تكون أيضا على الزناد نفسه. يمكن المشغل الخاص بك عن طريق الخطأ أن بتحديث كافة الصفوف من الجدول؟ هناك فروق كبيرة بين 100 صف في قاعدة بيانات الاختبار و13،000،000. انها فكرة سيئة للغاية لوضع رمز ضد مثل مجموعة صغيرة عندما يكون لديك مثل مجموعة بيانات كبيرة كما يمكن أن يكون بأي حال من الأحوال للتنبؤ بالأداء. SQL أن يعمل بشكل جيد لمدة 100 السجلات يمكن قفل تماما عن نظام مع الملايين لعدة ساعات. كنت تريد حقا أن تعرف أن في ديف، وليس عند ترقية لحث.

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

وأنا لن تنظر حتى وضع هذا المشغل على همز حتى يمكنك اختبار مقابل سجل تعيين مشابهه في حجم لحث.

وصديقي دينيس كتب هذا المقال الذي يوضح لماذا اختبار ل volumn صغيرة من المعلومات عندما يكون لديك ل volumn كبير من المعلومات يمكن أن تخلق صعوبات في دلتا نهر اللؤلؤ أنك لم تلاحظ على ديف: <وأ href = "http://blogs.lessthandot.com/index.php/DataMgmt/؟blog=3&title=your-testbed-has-to-have-the-same-volume&disp=single&more=1&c=1&tb=1&pb= 1 # c1210 "يختلط =" نوفولو noreferrer "> http://blogs.lessthandot.com/index.php/DataMgmt/؟blog=3&title=your-testbed-has-to-have-the-same-volume&disp=single&more= 1 & ج = 1 & السل = 1 & برميل = 1 # c1210

وتشغيل DISABLE TRIGGER triggername ON tablename قبل تغيير الزناد، ثم تمكينه مع ENABLE TRIGGER triggername ON tablename

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