سؤال

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

  • 09/16/2008 16:21:49
  • 09/16/2008 16:22:19

فكيف يمكن أن تنتهي المهلة خلال ثلاثين ثانية عندما قمت بتعيين مهلة الأمر على ستين ثانية؟؟

للإشارة فقط، إليك الاستثناء الذي تم طرحه:

System.Data.SqlClient.SqlException: Timeout expired.  The timeout period elapsed prior to completion of the operation or the server is not responding.
   at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
   at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
   at System.Data.SqlClient.SqlDataReader.ConsumeMetaData()
   at System.Data.SqlClient.SqlDataReader.get_MetaData()
   at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
   at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
   at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
   at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
   at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
   at System.Data.SqlClient.SqlCommand.ExecuteReader()
   at SetClear.DataAccess.SqlHelper.ExecuteReader(CommandType commandType, String commandText, SqlParameter[] commandArgs)
هل كانت مفيدة؟

المحلول

انتهت مهلة أوامر SQL لأن الاستعلام الذي تستخدمه يستغرق وقتًا أطول من ذلك لتنفيذه.قم بتنفيذه في محلل الاستعلام أو Management Studio، مع كمية تمثيلية من البيانات في قاعدة البيانات, ، وإلقاء نظرة على خطة التنفيذ لمعرفة ما هو بطيء.

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

نصائح أخرى

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

قد لا يكون هذا، لكنه دائمًا أول شيء أتحقق منه.

حاول تغيير خاصية المهلة الخاصة بـ SqlConnection بدلاً من خاصية الأمر

لأن المهلة تحدث على الاتصال وليس الأمر.تحتاج إلى تعيين انتهى وقت محاولة الاتصال ملكية

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

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