ارتفاع حجم الموقع باستخدام ADO.NET TransactionScope مقابل ExecuteCommand على NOLOCK, القراءة غير ملتزم بها مباشرة ؟

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

سؤال

مجرد قراءة هذه المادة مثيرة للاهتمام من قبل عمر على بلوق Linq to SQL حل المعاملات الجمود و الاستعلام مهلة المشكلة باستخدام غير ملتزم يقرأ و في النهاية جواد حسن بدأ الجدال معه حول حل nolock الوضع على ارتفاع حجم الموقع.

هنا المشكلة محاولة حل من sql بمعنى نحن بحاجة إلى استخدام عبارات Select مع NOLOCK أو استخدام مجموعة الصفقة مستوى القراءة غير ملتزم بها ، وإلا في ارتفاع حجم الصفوف في DB سوف يكون مؤمنا و تتسبب في حدوث أخطاء.التكنولوجيا عمر المستخدم هو Linq2Sql ، وبالتالي فإن السؤال هو كيف يمكننا الحصول على هذا يتحقق في C# رمز وصول البيانات المذكورة أعلاه لا يحدث ؟

أساسا في ما بعد ، عمر يأتي إلى الحل من خلال العمل والاختبار على العالم الحقيقي الموقع مع أدوات مثل SqlProfiler ، في حين جواد حسن يأتي إلى حل مع MSDN الوثائق و سكوت Hanselman بلوق وظيفة.... الخ

عمر يوحي باستخدام التالية

using (var db = new DropthingsDataContext2())
{
  db.Connection.Open();
  db.ExecuteCommand("SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;");

  var user = db.aspnet_Users.First();
  var pages = user.Pages.ToList();
}

في حين جواد حسن يوحي

using (new TransactionScope(TransactionScopeOption.Required, 
  new TransactionOptions { IsolationLevel = IsolationLevel.ReadUncommitted }))
{
 //Your db Operation
}

أنا مهتم جدا أن تعرف ما أنتم هناك في هذه المسألة بالذات على ارتفاع حجم الموقع مثل StatckOverflow ، أو ما لم جيف الرجال القيام به في هذا الصدد ؟

تحرير:بعد قراءة المشاركة الأولى, أريد أن أشير إلى بعض الأشياء في عمر آخر.

  1. انه هل واجهت مشكلة في اتصال مع نهجه لكنه حلها ، انظر منصبه.
  2. والأهم من ذلك أنه ذكر أنه حاول استخدام ADO.NET الصفقة الطريقة و حاولت حتى ما سكوت Hanselman كتب على بلوق, ولكن لا يعمل على ارتفاع حجم الموقع ، فإنه يحط أداء قليلا جدا.قال عمر هذا النظام".معاملات كبيرة في سماء المنطقة.لم أكن قادرا على استخدامها على ارتفاع حجم الموقع دون إجراء المعالجة المركزية الذهاب 100% و Req/ثانية ينزل إلى 1/10.انها مصنوعة لتطبيقات المؤسسات ، وليس عن ارتفاع حجم المواقع."
هل كانت مفيدة؟

المحلول

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

جيف قال في الأساس:"bla bla bla, حقيقية, bla bla bla قاعدة البيانات المنظرين, bla bla bla, القراءة غير ملتزم بها يمكن أن تكون مفيدة في الإنتاج الحقيقي التطبيقات التي لا تحتاج إلى اتساق البيانات." جيف ليس ديسيبل, لحسن الحظ هناك العديد من DBAs هنا على ذلك.

المشكلة مع عمر النهج هو أنه يمكن أن تسرب اتصالات مع "قراءة في غير ملتزم بها" مستوى العزل في اتصالات تجمع التي يمكن أن تعيث فسادا في موقع الويب الخاص بك.معنى عشوائية البيان قد يكون أعدم في القراءة غير ملتزم بها.

جواد النهج سيكون أفضل بكثير لأنه على التخلص MS فرصة لتنظيف الاشياء على الاتصال.

تحرير إذا كنت تواجه مشكلات في الأداء مع جاويد نهج هل يمكن أن ننظر في المتداول الخاصة بك إدارة المعاملات.

بعض الأشياء التي ربما تريد أن تفعل:

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

نصائح أخرى

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

إذا اخترت استخدام غير ملتزم يقرأ لدي المدون مفيد الحل استخدام طرق الإرشاد في C#.

{بلدي (الفقراء) سمعة يمنعني من نشر التعليقات لذا وضعت هذا كإجابة}

إذا كنت تستخدم IsolationLevel عبر النظام.المعاملات وخلق جديد Linq السياق الصفقة كتلة ملقم SQL ينتهي أحاول الاتصال DTC إلى تنسيق الصفقة.هذا حدث لي كان غير متوقع تماما.

بخصوص المعاملات .صافي و (بطريقة أو بأخرى من المستغرب) الآثار الجانبية DTC هذه الوثيقة إدخال نظام.المعاملات في .NET Framework 2.0 قبل Juval لوي يفسر الأمور بشكل جيد جدا و لا تزال صالحة تماما (.Net4).تستحق القراءة.(أنا أيضا نشر تعليق...إذا أنا يمكن أن.)

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