সময়সীমা শেষ হয়েছে। অপারেশন শেষ হওয়ার আগে সময়সীমা পেরিয়ে গেছে বা সার্ভার সাড়া দিচ্ছে না। বিবৃতিতে বাতিল করা হয়েছে


295

আমার ওয়েব সাইটে আমার অনেক ব্যবহারকারী রয়েছে (প্রতিদিন 20000-60000), যা মোবাইল ফাইলগুলির জন্য ডাউনলোড সাইট। আমার সার্ভারে আমার দূরবর্তী অ্যাক্সেস রয়েছে (উইন্ডোজ সার্ভার 2008-আর 2)।
আমি এর আগে "সার্ভার অনুপলব্ধ" ত্রুটিগুলি পেয়েছি তবে এখন সংযোগের সময়সীমা ত্রুটিটি দেখছি।
আমি এর সাথে পরিচিত নই - কেন এটি ঘটে এবং আমি কীভাবে এটি ঠিক করতে পারি?

সম্পূর্ণ ত্রুটি নীচে:

'/' আপ্লিকেশনে সারভার এরর সময়সীমা শেষ হয়েছে। অপারেশন শেষ হওয়ার আগে সময়সীমা পেরিয়ে গেছে বা সার্ভার সাড়া দিচ্ছে না। বিবৃতিতে বাতিল করা হয়েছে। বর্ণনা: বর্তমান ওয়েব অনুরোধটি কার্যকর করার সময় একটি অযৌক্তিক ব্যতিক্রম ঘটেছে। ত্রুটি সম্পর্কে আরও তথ্যের জন্য দয়া করে স্ট্যাক ট্রেসটি পর্যালোচনা করুন এবং কোডটি এর উত্পন্ন কোথায়।

ব্যতিক্রমের বিবরণ: System.Data.SqlClient.SqlException: সময়সীমা শেষ হয়েছে। অপারেশন শেষ হওয়ার আগে সময়সীমা পেরিয়ে গেছে বা সার্ভার সাড়া দিচ্ছে না। বিবৃতিতে বাতিল করা হয়েছে।

উত্স ত্রুটি:

বর্তমান ওয়েব অনুরোধটি কার্যকর করার সময় একটি অযৌক্তিক ব্যতিক্রম উত্পন্ন হয়েছিল। ব্যতিক্রমের উত্স এবং অবস্থান সম্পর্কিত তথ্য নীচে ব্যতিক্রম স্ট্যাক ট্রেস ব্যবহার করে সনাক্ত করা যেতে পারে।

স্ট্যাক ট্রেস:

[স্কেলএক্সসেপশন (0x80131904): সময়সীমা শেষ হয়েছে। অপারেশন শেষ হওয়ার আগে সময়সীমা পেরিয়ে গেছে বা সার্ভার সাড়া দিচ্ছে না। বিবৃতিটি সমাপ্ত করা হয়েছে।]
System.Data.SqlClient.SqlConnication.OnError (স্ক্যালএক্সেপশন ব্যতিক্রম, বুলিয়ান ব্রেক কানেকশন) +404 সিস্টেম.ডাটা.সক্লিল ক্লিনেন্ট.টিডিএস পার্সার.ট্রোএক্সেপশনএন্ড ওয়ার্নিং
()
+412 সিস্টেম.ডাটা.অ্যাভিয়ারশানসিয়ারস , স্কেলকম্যান্ড সেন্টিমিডি হ্যান্ডলার, স্ক্ল্যাডটাটা রিডার ডেটা স্ট্রিম, বাল্ককপিসিম্পল রিসাল্টসেলট বাল্ককপিহ্যান্ডলার, টিডিএসপারসারস্টেটঅবজেক্ট স্টেট ওবিজে) +1363
সিস্টেম.ডাটা.স্ল্যাক্লাইক্লেন্ট.স্লককম্যান্ড.ফিনিশএকশক্তিদর্শীদ্বার রিসার্চেশন 16, রিসার্চরডিয়ারসিডার 16
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds (CommandBehavior cmdBehavior, RunBehavior runBehavior, বুলিয়ান returnStream, বুলিয়ান ASYNC) +6389442
System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior, RunBehavior runBehavior, বুলিয়ান returnStream, স্ট্রিং পদ্ধতি, DbAsyncResult রিজাল্ট) + + 538
System.Data.SqlClient.SllCommand.InternExecuteNonQuery (DbAsyncResult রেজাল্ট, স্ট্রিং মেথডনাম, বুলিয়ান সেন্ডটোপাইপ) +689 সিস্টেম.ডাটা.সক্ল্যাব্লায়েন্ট.সক্লককম্যান্ড.এক্সেকিউটনকোয়্যারি
() +
পরামিতিড্রাইটিংমোডিয়াড্রোডিংমোডিয়ারপ্রেসড্রিংমোডিয়া , ইনট 32 এবং সারিগুলি প্রভাবিত) +209
ডেটা লেয়ার.অনলাইন ব্যবহারকারীরা.উপডেট_সেশনটি_অ্যান্ড_অনলাইন ( সেশন_ ইন্ড অবজেক্ট, বুলিয়ান অনলাইন) +440
নাইসফাইএলএক্সপ্লোরার.গ্লোবাল.এপ্লিকেশন_স স্টার্ট (অবজেক্ট প্রেরক, ইভেন্টআর্গস ই) +163

[এইচটিপিএক্সেপশন (0x80004005): সময়সীমা শেষ হয়েছে। অপারেশন শেষ হওয়ার আগে সময়সীমা পেরিয়ে গেছে বা সার্ভার সাড়া দিচ্ছে না। বিবৃতিতে বাতিল করা হয়েছে।]
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode (HttpContext কনটেক্সট, HttpApplication অ্যাপ্লিকেশন) +4052053
System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS (IntPtr appContext, HttpContext কনটেক্সট, MethodInfo [] হ্যান্ডেলার) +191
System.Web.HttpApplication। ইন্সস্পেশিয়াল (এইচটিটিপি অ্যাপ্লিকেশন স্টেট স্টেট, মেথডিআইএনফো [] হ্যান্ডলার, ইন্টারপ্রেট অ্যাপকন্টেক্সট, এইচটিটিপি কনটেক্সট প্রসঙ্গ) +352
সিস্টেম.ওয়েব.এইচটিপি অ্যাপ্লিকেশনফ্যাক্টরি.গেটস্পেশিয়াল অ্যাপ্লিকেশন
ইনস্ট্যান্স

[এইচটিপিএক্সেপশন (0x80004005): সময়সীমা শেষ হয়েছে। অপারেশন শেষ হওয়ার আগে সময়সীমা পেরিয়ে গেছে বা সার্ভার সাড়া দিচ্ছে না। বিবৃতিটি সমাপ্ত করা হয়েছে।]
System.Web.HttpRuntime.FirstRequestInit (HttpContext প্রসঙ্গ) +11686928 System.Web.HttpRuntime.EnsureFirstRequestInit (HttpContext প্রসঙ্গ) +141 সিস্টেম.উইচটিসিআরসিস্টিকেশন 7 সংবেদন


উত্তরগুলির পরে সম্পাদনা করুন:
আমার Application_Startভিতরে Global.asaxনীচের মত:

protected void Application_Start(object sender, EventArgs e)
{
    Application["OnlineUsers"] = 0;

    OnlineUsers.Update_SessionEnd_And_Online(
        DateTime.Now,
        false);

    AddTask("DoStuff", 10);
}

সঞ্চিত প্রক্রিয়াটি বলা হচ্ছে:

ALTER Procedure [dbo].[sp_OnlineUsers_Update_SessionEnd_And_Online]
    @Session_End datetime,
    @Online bit
As
Begin
    Update OnlineUsers
    SET
        [Session_End] = @Session_End,
        [Online] = @Online

End

অনলাইন ব্যবহারকারীদের পাওয়ার জন্য আমার কাছে দুটি পদ্ধতি রয়েছে:

  1. ব্যবহার Application["OnlineUsers"] = 0;
  2. অন্যটি ডাটাবেস ব্যবহার করে

সুতরাং, পদ্ধতি # 2 এর জন্য আমি সমস্ত অনলাইন ব্যবহারকারীকে পুনরায় সেট করি Application_Start। এই টেবিলটিতে 482,751 এরও বেশি রেকর্ড রয়েছে।


1
যেমনটি এখানে বলা হয়েছে
ডিফল্টটি

1
মূল কারণ বিশ্লেষণ করা ভাল, এই জাতীয় সমস্যা হওয়ার বিভিন্ন কারণ রয়েছে। সর্বাধিক প্রাথমিক কোয়েরির জটিল কাঠামো। আমি যখন টেবিলের হেক্স মান হিসাবে সঞ্চিত চিত্রগুলি নিয়ে আসি তখন আমি একই সমস্যার মুখোমুখি হই।
বিজয় কুম্ভোজ

উপরের কারণগুলি ব্যতীত, আমি আরও একটি যুক্ত করব: লক টাইমআউট: ডকস.মাইক্রোসফট.ইন- ইউএস / এসকিএল / টি- এসকিএল / স্টেটমেন্টস/… এই থ্রেডটি যদি দীর্ঘ দীর্ঘ সময়ের জন্য অপেক্ষা করে থাকে তবে এটি টাইমআউটটির উপর ভিত্তি করে তৈরি হবে উপরের নথি
হারবার্ট ইউ

উত্তর:


344

দেখে মনে হচ্ছে আপনার কাছে এমন একটি ক্যোয়ারী রয়েছে যা এটির চেয়ে বেশি সময় নিচ্ছে। আপনার স্ট্যাক ট্রেস এবং আপনার কোড থেকে আপনার ঠিক কী কোয়েরি তা নির্ধারণ করতে সক্ষম হওয়া উচিত।

এই ধরণের সময়সীমার তিনটি কারণ থাকতে পারে;

  1. কোথাও একটি অচলাবস্থা আছে
  2. ডাটাবেসের পরিসংখ্যান এবং / অথবা ক্যোয়ারী প্ল্যান ক্যাশেটি ভুল
  3. ক্যোয়ারীটি খুব জটিল এবং টিউন করা দরকার

একটি অচলাবস্থা ঠিক করা কঠিন হতে পারে তবে এটি কেস কিনা তা নির্ধারণ করা সহজ। SQL সার্ভার ম্যানেজমেন্ট স্টুডিওর সাথে আপনার ডাটাবেসের সাথে সংযুক্ত হন। বাম ফলকে সার্ভার নোডে ডান ক্লিক করুন এবং ক্রিয়াকলাপ মনিটর নির্বাচন করুন । চলমান প্রক্রিয়াগুলি একবার দেখুন। সাধারণত বেশিরভাগ অলস বা চলমান থাকবে। সমস্যা দেখা দিলে আপনি প্রক্রিয়া স্থিতি দ্বারা যে কোনও ব্লক করা প্রক্রিয়া সনাক্ত করতে পারেন। আপনি যদি প্রক্রিয়াটিতে ডান-ক্লিক করেন এবং বিশদ নির্বাচন করেন তবে এটি আপনাকে প্রক্রিয়া দ্বারা চালিত শেষ কোয়েরি দেখায়।

দ্বিতীয় ইস্যু ডেটাবেসকে একটি উপ-অনুকূল ক্যোয়ারী প্ল্যান ব্যবহার করবে। এটি পরিসংখ্যান পরিষ্কার করে সমাধান করা যেতে পারে:

exec sp_updatestats

যদি এটি কাজ না করে আপনিও চেষ্টা করতে পারেন

dbcc freeproccache

আপনার সার্ভারটি ভারী বোঝার মধ্যে থাকা অবস্থায় আপনার এটি করা উচিত নয় কারণ এটি অস্থায়ীভাবে একটি বড় পারফরম্যান্স হিট করতে পারে কারণ সমস্ত সঞ্চিত প্রকট এবং কোয়েরিগুলি প্রথম সম্পাদনকালে পুনরায় সংযুক্ত করা হয়। তবে, যেহেতু আপনি বলছেন যে সমস্যাটি মাঝে মধ্যে ঘটে থাকে এবং স্ট্যাক ট্রেসটি ইঙ্গিত করে যে আপনার অ্যাপ্লিকেশনটি শুরু হচ্ছে, আমি মনে করি আপনি এমন একটি ক্যোয়ারী চালাচ্ছেন যা কেবলমাত্র মাঝে মধ্যে চালানো হয়। আপনি এসকিউএল সার্ভারকে পূর্ববর্তী কোয়েরি প্ল্যানটি পুনরায় ব্যবহার করতে বাধ্য না করে ভাল হতে পারেন। কীভাবে এটি করা যায় তার বিশদ জানতে এই উত্তরটি দেখুন ।

আমি ইতিমধ্যে তৃতীয় ইস্যুটি স্পর্শ করেছি, তবে আপনি সহজেই কোয়েরিটি ম্যানুয়ালি সম্পাদন করে কোয়েরিটির সুর প্রয়োজন কিনা তা আপনি সহজেই নির্ধারণ করতে পারেন, উদাহরণস্বরূপ, এসকিএল সার্ভার ম্যানেজমেন্ট স্টুডিও ব্যবহার করে। যদি কোয়েরিটি সম্পূর্ণ হতে খুব বেশি সময় নেয়, তবে পরিসংখ্যানগুলি পুনরায় সেট করার পরেও আপনার সম্ভবত এটি টিউন করা দরকার। এটির জন্য সহায়তার জন্য, আপনার একটি নতুন প্রশ্নে সঠিক ক্যোয়ারী পোস্ট করা উচিত।


39
আমি এই একই ত্রুটিটি পেয়েছিলাম তবে একটি প্রশ্নের মধ্যে যে 'ঠিক' 8 সিসি নিয়েছিল ... এবং exec sp_updatestatsআমার সমস্যার সমাধান সম্পর্কে আপনার টিপ । অনেক ধন্যবাদ!
nrod

2
এই জাতীয় সমস্যার সমাধান প্রায়শই কখনই সময়সীমা বা সংযোগ পুলের আকারের সুরের বিষয় নয়। আপনাকে ডুব দিয়ে মূল কারণটি বের করতে হবে। যদি আপনার এই মূল কারণটি সমাধান করতে সহায়তা প্রয়োজন হয় তবে আপনি নিজের প্রশ্ন পোস্ট করতে পারেন।
মার্নিক্স ভ্যান ভ্যালেন

5
এটি অবশ্যই কোনও অচলাবস্থা নয়। এটি অত্যধিক অবরুদ্ধ হওয়ার কারণে হতে পারে, তবে ডেডলকগুলি এক সেকেন্ডে সমাধান করা হয় এবং তারা বিভিন্ন ত্রুটি তৈরি করে। এটি অত্যধিক অবরুদ্ধ হতে পারে তবে অচলাবস্থা নয়।
মাইকেল জে স্বার্ট

1
আমরা কি নিশ্চিত যে এটি একটি কমান্ড সময়সাপেক্ষ এবং সংযোগের সময়সীমা নয়? আমার কাছে "System.Data.SqlClient.SqlConnication.OnError" একটি সংযোগ সমস্যার ইঙ্গিত দেয়।
মাইক ডব্লিউ

1
@ প্রশান্তপিম্পলে এটি নির্ভর করে যদি আপনার যদি উত্পাদনের কোনও গুরুতর সমস্যা থাকে যেখানে ভুল পরিসংখ্যানগুলির ফলস্বরূপ খারাপ সম্পাদনের পরিকল্পনা হয় তবে হ্যাঁ, এটি সমাধান হতে পারে। ব্যতিক্রমী সমস্যাগুলি (হার্ডওয়্যার ব্যর্থতার মতো) বাদ দিয়ে পরিসংখ্যান আপডেট করা আপনার ডেটাবেস ভঙ্গ করবে না। এটি কিছুটা ধীরে ধীরে অনুসন্ধানের কারণ হতে পারে। শেষ পর্যন্ত, যদিও এটি আপনার কল।
মার্নিক্স ভ্যান ভ্যালেন

155

আপনার কোডে যেখানে আপনি সঞ্চিত প্রক্রিয়াটি চালাচ্ছেন আপনার এমন কিছু হওয়া উচিত:

SqlCommand c = new SqlCommand(...)
//...

কোডের এমন একটি লাইন যুক্ত করুন:

c.CommandTimeout = 0;

অপারেশনটি সম্পূর্ণ হওয়ার জন্য এটি যতটা সময় অপেক্ষা করবে।


143
আপনারও সচেতন হওয়া উচিত যে 0 মানটি সুপারিশ করা হয় না : 0 টি ইঙ্গিতের মান সীমাবদ্ধ নয়, এবং একটি কমান্ডটাইমআউট এড়ানো উচিত কারণ একটি আদেশ কার্যকর করার চেষ্টা অনির্দিষ্টকালের জন্য অপেক্ষা করবে। কমান্ডটি কত সময় নেয় তা শিখতে হবে এবং প্রয়োজনে টাইমআউট মান বাড়িয়ে দেওয়া ভাল।
ওটিয়েল

7
আমি ওটিয়েলের সাথে একমত হয়েছি এবং আপনার উত্তরটিকে হ্রাস পেয়েছি: কমান্ডটাইমআউট 0 তে সেট করার সময় আপনি ওয়েবসারভারটিকে কোনও ডাটাবেস সার্ভার থেকে পুনরুদ্ধার করার সুযোগ দেবেন না যা প্রতিক্রিয়াশীল নয়। দ্বিতীয়ত যখন আপনি ডিফল্ট সময়সীমা হিট করার সময় আপনার কারণটি বিবেচনা করা উচিত। বেশিরভাগ ক্ষেত্রে সময়সীমা শেষ করার চেয়ে ক্যোয়ারী ঠিক করা ভাল query
মার্টেন কিফট

10
আমি এটি সুপারিশ না করার ফাঁদে পড়ব না। এটি আমার এবং আমার প্রতিদিনের নির্ধারিত কার্যগুলির জন্য খুব দরকারী: একটি অসীম সময়সীমা থাকা কোনও সমস্যা ভুল হলে কোনও ত্রুটি পূর্ণ করা এবং ফিরে পাওয়া থামায় না। সহজ কথায় বলতে গেলে, এটি আপনাকে যখন কোনও সমস্যা প্রয়োজন তখনই শেষ করার অনুমতি দেয়, পরে সমস্যা সমাধান না করে, কারণ আপনি প্রক্রিয়াটি শেষ করার জন্য পর্যাপ্ত সময় বরাদ্দ করেননি। আপনি মাল্টি থ্রেডিং দ্বারা আপনার প্রোগ্রামটি লক করা এড়াতে পারেন।
ওয়ান্ডার ওয়ার্কার

2
হ্যাঁ বড় ডেটা স্থানান্তরগুলির জন্য এটি সেট করা অর্থবোধ করে না। যদি আপনি কয়েক মিলিয়ন সারি স্থানান্তর করে থাকেন তবে ওটিয়েল এবং ব্ল্যাকহকডিজাইন কী বলছে তা বোঝা যায় না।
bluerubez

ডেটা-কেন্দ্রিক বিকাশের 20 বছরের মধ্যে, আমার কখনই এটি করার প্রয়োজন হয়নি। প্রায় সবসময়ই একটি যুক্তিসঙ্গত সহজ সমাধান রয়েছে যা আরও ভাল পারফরম্যান্স দেয় এবং কোনও একক প্রক্রিয়াটির জন্য সারাদিন একটি ডেটাবেজে নষ্ট হয়ে যাওয়ার সুযোগ তৈরি করে না। বেশিরভাগ ডিবি কার্যকারিতা সমস্যার সাথে টিউন করা যেতে পারে যেখানে তারা বেশ কয়েকটি ক্রমের দ্রুতি দ্রুত সম্পাদন করে। অর্থাৎ, এই প্রক্রিয়াটি আপনি শেষ করতে 3 ঘন্টা অপেক্ষা করছেন, সম্ভবত 3 মিনিট বা এমনকি 3 সেকেন্ডে সুর করা যেতে পারে।
b_levitt

25

CommandTimeoutদীর্ঘকাল চলমান এসকিউএল লেনদেনের জন্য আপনি এসকিউএল কমান্ডের সম্পত্তি সেট করতে পারেন।

আপনার এসকিউএল ক্যোয়ারীর দিকেও লক্ষ্য করা দরকার যা সময়সীমা শেষ করে দেয়।


হাই, "বা আপনার এসকিউএল ক্যোয়ারির দিকে নজর দেওয়া দরকার যে স্কেল সার্ভার ২০০৮ -" টাইমআউটটি ঘটাচ্ছে i
সিলভারলাইট

স্ট্যাক ট্রেসটি এটির দিকে নির্দেশ করছে বলে আপনাকে ডাটালায়ার.অনলাইন ব্যবহারকারীদের থেকে আপডেট করা হয়েছে Stঅনলাইন_সেশনএন্ড_অ্যান্ড_অনলাইন থেকে স্টোরড পদ্ধতি পরীক্ষা করার প্রয়োজন হতে পারে। লাইভ ডাটাবেসের একটি অনুলিপি পরীক্ষায় নিয়ে যান এবং প্রয়োজনীয় প্যারামিটারগুলিতে পাস করা স্টোরড প্রক্রিয়াটি চালান, যদি এটি শেষ হতে 30 সেকেন্ডের বেশি সময় লাগে তবে সে কারণেই আপনি একটি সময় বেরিয়ে আসছেন। আমি ধরে নিচ্ছি আপনার এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিওতে অ্যাক্সেস রয়েছে।
কেভ রিচি

হ্যাঁ, আমার স্কুয়েল সার্ভার ২০০৮ এ অ্যাক্সেস রয়েছে। আমার আপনার চেষ্টা করা উচিত।
সিলভারলাইট

যদি আপনি সমস্যার সঞ্চিত প্রক্রিয়াটি আবিষ্কার করেন তবে আপনি সঞ্চিত পদ্ধতিতে থাকা ক্যোয়ারীটি ডাটাবেস টিউনিং অ্যাডভাইজারের মাধ্যমে চালাতে পারেন যা আপনাকে কোনও সূচকের প্রয়োজন কিনা তা বোঝাতে পারে।
কেভ রিচি

12

যদিও পূর্ববর্তী সমস্ত প্রতিক্রিয়াগুলি এটিকে সম্বোধন করে তবে তারা সমস্ত কেস কভার করে না।

মাইক্রোসফ্ট সমর্থিত অপারেটিং সিস্টেমগুলির জন্য এই বিষয়টি স্বীকার করেছে এবং এটি ২০১১ সালে স্থির করেছে, সুতরাং যদি আপনি স্ট্যাকের ট্রেস পান তবে:

Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
at System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj, UInt32 error)
at System.Data.SqlClient.TdsParserStateObject.ReadSni(DbAsyncResult asyncResult, TdsParserStateObject stateObj)

আপনার .NET সমাবেশগুলি আপডেট করার দরকার হতে পারে।

মিরর করা ডাটাবেসের জন্য সংযোগ-পুনরায় চেষ্টা করা অ্যালগরিদমে ত্রুটির কারণে এই সমস্যাটি ঘটে occurs

যখন পুনরায় চেষ্টা-অ্যালগরিদম ব্যবহার করা হয়, তখন ডেটা সরবরাহকারী শেষ হওয়ার জন্য প্রথম পঠিত (স্নিরিডসিঙ্ক) কলটি অপেক্ষা করে। এসকিউএল সার্ভার চলমান ব্যাক-এন্ড কম্পিউটারে কলটি প্রেরণ করা হয় এবং অপেক্ষার সময়টি সংযোগের সময়-আউট মানকে 0.08 দ্বারা গুণিত করে গণনা করা হয়। তবে, প্রতিক্রিয়াটি ধীর হয়ে থাকলে এবং অপেক্ষার সময় শেষ হওয়ার আগে যদি প্রথম স্নিরিডসিঙ্ক কলটি সম্পন্ন না হয় তবে ডেটা সরবরাহকারী ভুলভাবে ডুমড স্টেটের সাথে একটি সংযোগ সেট করে sets

বিস্তারিত জানতে কেবি 2605597 দেখুন

https://support.microsoft.com/kb/2605597


9

হতে পারে এটি কারও জন্য কার্যকর হবে। আমি একই সমস্যার মুখোমুখি হয়েছিলাম এবং আমার ক্ষেত্রে কারণটি ছিল যে স্কেল কানেকশনটি খোলা হয়েছিল এবং প্রায় 2500 পুনরাবৃত্তির সাহায্যে লুপে যে পদ্ধতিটি কল করেছিলাম তা নিষ্পত্তি করা হয়নি। সংযোগ পুলটি ক্লান্ত হয়ে পড়েছিল। সঠিক নিষ্পত্তি সমস্যা সমাধান করে solved


এই! ঠিক এই। আমার সমস্যাটি হ'ল আমি পদ্ধতিগুলি তাদের জন্য অপেক্ষা না করেই আলাদা থ্রেডে গুলি চালাচ্ছিলাম (কারণ ব্যবহারকারীর সেই পদ্ধতির ফলাফল, পটভূমি স্ক্রিপ্টের প্রয়োজন হয় না)। নিষ্পত্তি না করে ( usingব্লকের ব্যবহার করা ) আমি এই সময়সীমাটি পেয়েছি। এটি দেখে মনে হয়েছে এটি সমাধান হবে।
কুলারবাইটস

আপনি কী সংযোগ পুল সর্বাধিক পৌঁছেছেন বা টাইমআউট সমাপ্তির সময় পেরিয়ে ত্রুটি পেয়েছেন? অপারেশন শেষ হওয়ার আগে সময়সীমা অতিক্রান্ত হয়েছে বা সার্ভার সাড়া দিচ্ছে না you কারণ আপনি যদি সর্বোচ্চ পুলে পৌঁছে যান, তবে এটি ফাঁস হওয়া সংযোগটি অনুসন্ধান করার জন্য অর্থবোধ করে। কিন্তু, আমি সার্ভার পাচ্ছি ত্রুটির প্রতিক্রিয়া জানাতে না।
জিভা সুব্বুরজ

8

আপনাকে কমান্ডটাইমআউট অ্যাট্রিবিউট সেট করতে হবে। আপনি DbContext শিশু শ্রেণিতে কমান্ডটাইমআউট অ্যাট্রিবিউট সেট করতে পারেন।

public partial class StudentDatabaseEntities : DbContext
{
    public StudentDatabaseEntities()
        : base("name=StudentDatabaseEntities")
    {
        this.Database.CommandTimeout = 180;
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }

    public virtual DbSet<StudentDbTable> StudentDbTables { get; set; }
}

7

আমি প্রায় 3 দিন এটির উপরে একই সমস্যার মুখোমুখি হয়েছি। আমি লক্ষ্য করেছি যে আমাদের রেকর্ডের সংখ্যা খুব বেশি নয় কারণ আমাদের প্রবীণ বিকাশকারী 2 টি চিত্র এবং ফিঙ্গারপ্রিন্ট ডাটাবেসে রাখে। আমি যখন এই হেক্সটিকে দীর্ঘ সময় নিয়ে যাওয়ার জন্য মানগুলি আনার চেষ্টা করি, তখন আমি আমার প্রক্রিয়াটি প্রায় 38 সেকেন্ডের মধ্যে চালিত করতে গড় সময় গণনা করি। ডিফল্ট কমান্ডটাইম 30 সেকেন্ড তাই আমার সঞ্চিত প্রক্রিয়াটি চালানোর জন্য গড় গড় সময়ের চেয়ে কম হয়। আমি আমার কমান্ডটাইমটি নীচের মত সেট করেছি

cmd.CommandTimeout = 50

এবং এটির কাজ ঠিক আছে তবে কখনও কখনও যদি আপনার ক্যোয়ারী 50 সেকেন্ডের বেশি সময় নেয় তবে এটি একই ত্রুটিটি প্ররোচিত করবে।


4

আমি সম্প্রতি এই ত্রুটির মুখোমুখি হয়েছি এবং কিছু সংক্ষিপ্ত তদন্তের পরে, এর কারণটি খুঁজে পেয়েছিলাম যে আমরা ডাটাবেস (1GB এর চেয়ে কম) হোল্ড করে ডিস্কে স্থান ছাড়িয়ে চলেছি।

আমি যখনই একই সার্ভারের আরও একটি ডিস্কে (.mdf এবং .ldf) ডাটাবেস ফাইলগুলি (.mdf এবং .ldf) এ স্থানান্তরিত হলাম ততক্ষণে একই পৃষ্ঠা (ক্যোয়ারী চালাচ্ছি) যা তিন সেকেন্ডের মধ্যেই শেষ হয়ে গেছে।

এই ত্রুটিটি সমাধান করার চেষ্টা করার সময়, তদন্ত করার জন্য অন্য একটি বিষয় হ'ল ডাটাবেস লগ ফাইলগুলির আকার। আপনার লগ ফাইলগুলি সঙ্কুচিত করার প্রয়োজন হতে পারে।


3

আমার কাছে sp_foo- তে বড় গণনা রয়েছে যা বড় সময় নেয় তাই আমি
এই সামান্য বিট কোডটি দিয়ে স্থির করেছিলাম

public partial class FooEntities : DbContext
{
   public FooEntities()
         : base("name=FooEntities")
    {
        this.Configuration.LazyLoadingEnabled = false;

        // Get the ObjectContext related to this DbContext
        var objectContext = (this as IObjectContextAdapter).ObjectContext;

        // Sets the command timeout for all the commands
        objectContext.CommandTimeout = 380;
    }

3

ডিফল্ট সময়সীমা 15 সেকেন্ড হয়, এটি পরিবর্তন করতে, 0 আনলিমিটেড, অন্য যে কোনও সংখ্যা সেকেন্ডের সংখ্যা।

কোডে

using (SqlCommand sqlCmd = new SqlCommand(sqlQueryString, sqlConnection))
   {
      sqlCmd.CommandTimeout = 0; // 0 = give it as much time as it needs to complete
      ...
    }

আপনার ওয়েব.কনফিগ-এ "কমান্ডের সময়সীমা = 0;" সময় শেষ করবেন না বা 1 ঘন্টা নীচে (3600 সেকেন্ড)

  <add name="ConnectionString" connectionString="Data Source=ServerName;User ID=UserName;Password=Password;Command Timeout=3600;" providerName="System.Data.SqlClient" />

2
এগুলি দুটি পৃথক সময়সীমা। আপনার প্রথম পরামর্শটি প্রশ্নের উত্তর দেয়। আপনার দ্বিতীয়টি কেবল তখনই কাজ করবে যদি সংযোগ সরবরাহকারী এটি সমর্থন করে, যা স্কেলক্লিয়েন্ট না করে। যে কোনও হারে, 0 এর টাইমআউট উত্পাদন ক্ষেত্রে কখনই ভাল ধারণা নয়। 30 সেকেন্ড হ'ল স্বাভাবিক ডিফল্ট।
সানক্যাট 2000

2

@ সিলভারলাইট .. এটি একটি ডেটাবেস অবজেক্টের সাথে স্পষ্টতই একটি সমস্যা। এটি একটি খারাপভাবে লিখিত জিজ্ঞাসা, বা সূচিগুলি অনুপস্থিত হতে পারে। তবে এখন পর্যন্ত আমি আপনাকে আপনার ডেটাবেস অবজেক্ট দিয়ে সমস্যাটি তদন্ত না করে টাইমআউট বাড়ানোর পরামর্শ দেব না

NovinMedia.Data.DbObject.RunProcedure(String storedProcName, IDataParameter[] parameters, Int32& rowsAffected) +209

পদ্ধতির নামটি সন্ধানের জন্য কোডের এই লাইনে একটি ব্রেকপয়েন্ট দিন এবং তার কার্য সম্পাদনের পরিকল্পনাটি দেখে পদ্ধতিটি অনুকূলিত করুন।

আপনি সঞ্চিত প্রক্রিয়া সম্পর্কে বিশদ পোস্ট না করা পর্যন্ত আমি আপনাকে আরও সাহায্য করতে পারি না।


সঞ্চিত পদ্ধতিটি কোনও অভিনব স্টাফ করে না। তবে প্রক্রিয়াটি সম্পাদন করার সময় অনলাইন ব্যবহারকারীদের টেবিলটি তালাবন্ধ হয়ে গেছে বলে মনে হচ্ছে। অ্যাপ্লিকেশন_স্টার্টে কী হচ্ছে তা দেখতে এসকিউএল প্রোফাইলার ব্যবহার করে দেখুন
অমিত রায় রায় শর্মা

2

চেষ্টা

EXEC SP_CONFIGURE 'remote query timeout', 1800
reconfigure
EXEC sp_configure

EXEC SP_CONFIGURE 'show advanced options', 1
reconfigure
EXEC sp_configure

EXEC SP_CONFIGURE 'remote query timeout', 1800
reconfigure
EXEC sp_configure

তারপরে আপনার সূচকটি পুনর্নির্মাণ করুন


8
আপনি কি আপনার সমাধান ব্যাখ্যা করতে পারেন?
Hp93

0

সময়সীমা শেষ হয়ে গেছে কারণ স্ক্যালকম্যান্ড.কম্যান্ডটাইমআউট সম্পত্তি হিসাবে সেট করা স্কেল ক্যোয়ারী আপনার চেয়ে বেশি সময় নিচ্ছে।

স্পষ্টতই আপনি এই সমস্যাটি সমাধান করতে কমান্ডটাইমআউট বাড়াতে পারেন তবে তা করার আগে আপনাকে অবশ্যই সূচি যোগ করে আপনার ক্যোয়ারীটি অনুকূল করতে হবে। আপনি যদি সত্যিকারের এক্সিকিউশন প্ল্যান সহ সিকিএল সার্ভার ম্যানেজমেন্ট স্টুডিওতে আপনার ক্যোয়ারী চালনা করেন তবে সিকিএল সার্ভার ম্যানেজমেন্ট স্টুডিও আপনাকে যথাযথ সূচক প্রস্তাব করবে। আপনি যদি আপনার ক্যোয়ারীটি অপ্টিমাইজ করতে পারেন তবে বেশিরভাগ ক্ষেত্রেই টাইমআউট ইস্যু থেকে মুক্তি পাবেন।


0

টিএলডিআর :

  1. অ্যাপ্লিকেশন এবং ডিবি সার্ভার উভয়কেই রিবুট করা দ্রুততম স্থিতি যেখানে ডেটা ভলিউম, নেটওয়ার্ক সেটিংস এবং কোড পরিবর্তন হয়নি। আমরা সবসময় নিয়ম হিসাবে এটি করি
  2. প্রতিস্থাপনের প্রয়োজন এমন হার্ড-ড্রাইভের ব্যর্থতার সূচক হতে পারে - সিস্টেমের বিজ্ঞপ্তিগুলি পরীক্ষা করুন

আমি প্রায়শই বিভিন্ন কারণে এই ত্রুটির মুখোমুখি হয়েছি এবং বিভিন্ন সমাধান পেয়েছি, যার মধ্যে রয়েছে:

  1. স্কেলবুল্ককপি ব্যবহার করার জন্য আমার কোডটি পুনরুদ্ধার করুন
  2. বিভিন্ন উত্তরে বর্ণিত বা অন্তর্নিহিত কারণগুলির জন্য পরীক্ষা করা ( যেমন ডেটা সম্পর্কিত হতে পারে না ) হিসাবে বাড়ানো টাইমআউট মানগুলি
  3. সংযোগের সময়সীমা (ডিফল্ট 15s) - সমাপ্তির আগে এসকিউএল সার্ভারের সাথে সংযোগ স্থাপনের জন্য অপেক্ষা করতে কতক্ষণ সময় লাগে - টিসিপি / পোর্ট সম্পর্কিত - সমস্যা সমাধানের চেকলিস্টের মধ্যে যেতে পারে (খুব কার্যকর এমএসডিএন নিবন্ধ)
  4. কমান্ড সময়সীমা (ডিফল্ট 30s) - ক্যোয়ারী কার্যকর করার জন্য / নেটওয়ার্ক ট্র্যাফিক সম্পর্কিত - - ক্যোয়ারি কার্যকর করার জন্য অপেক্ষা করতে কতক্ষণ সময় লাগে এটির একটি সমস্যা সমাধানের প্রক্রিয়াও রয়েছে (অন্য একটি খুব কার্যকর এমএসডিএন নিবন্ধ)
  5. সার্ভার (গুলি) - এর পুনরায় বুট করা - অ্যাপ্লিকেশন এবং ডিবি সার্ভার উভয় (পৃথক হলে) - যেখানে কোড এবং ডেটা পরিবর্তিত হয়নি, পরিবেশের অবশ্যই পরিবর্তন হওয়া উচিত - প্রথম জিনিসটি আপনাকে অবশ্যই করতে হবে। সাধারণত প্যাচগুলির কারণে ঘটে (অপারেটিং সিস্টেম, নেট ফ্রেমওয়ার্ক বা এসকিউএল সার্ভার প্যাচ বা আপডেট)। বিশেষত যদি টাইমআউট ব্যতিক্রমগুলি নীচের মতো প্রদর্শিত হয় (এমনকি যদি আমরা অ্যাজুরি ব্যবহার না করি):
    • System.Data.Entity.Core.EntityException: একটি ব্যতিক্রম উত্থাপিত হয়েছে যা সম্ভবত ক্ষণস্থায়ী ব্যর্থতার কারণে is আপনি যদি কোনও এসকিউএল অ্যাজুরি ডাটাবেসের সাথে সংযুক্ত হন তবে SQLlAzureExecutionStrategy ব্যবহার বিবেচনা করুন। ---> System.Data.Entity.Core.EntityCommandExecutionException: কমান্ড সংজ্ঞা কার্যকর করতে গিয়ে একটি ত্রুটি ঘটেছে। বিশদ জন্য অভ্যন্তরীণ ব্যতিক্রম দেখুন। ---> System.Data.SqlClient.SqlException: সার্ভার থেকে ফলাফল পাওয়ার সময় একটি পরিবহন-স্তরের ত্রুটি ঘটেছে। (সরবরাহকারী: টিসিপি সরবরাহকারী, ত্রুটি: 0 - সেমোফোরের সময়সীমা পেরিয়ে গেছে ---) ---> সিস্টেম.সংশ্লিষ্ট মডেল। উইন 32 এক্সসেপশন: সেমফোর সময়সীমা শেষ হয়ে গেছে

0

এছাড়াও নিশ্চিত হয়ে নিন যে আপনার কেবল কোনও লেনদেনের ব্যবস্থা নেই। :)

আমি আশেপাশে কয়েকটি পরীক্ষা করছিলাম এবং নিরাপদ থাকার জন্য একটি লেনদেন শুরু করেছিলাম তবে এটি কখনই বন্ধ হয়নি। আমি আশা করি ত্রুটিটি আরও সুস্পষ্ট হত তবে ওহ ভাল!


0

আমাদের খুব কষ্ট হয়েছে Timeout expired/max pool reached Sqlexception। ওয়ার্কআরাউন্ড হিসাবে এবং সার্ভার বা পরিষেবাটি পুনরায় চালু করতে বাধা দিতে আমরা MAX SERVER MEMORYএসকিউএল সার্ভারে ভেরিয়েবলটি সংশোধন করি (হয় এসকিউএল ম্যানেজমেন্ট স্টুডিও বা টি-এসকিউএল এর মাধ্যমে):

DECLARE @maxMem INT = 3000 --Max. memory for SQL Server instance in MB
EXEC sp_configure 'show advanced options', 1
RECONFIGURE

এটি আর না ঘটে অবধি সাময়িকভাবে সমস্যার সমাধান করে। আমাদের ক্ষেত্রে আমরা সন্দেহ করি যে এটি অ্যাপ্লিকেশন পর্যায়ে সংযোগ ফাঁসের সাথে করা উচিত।


0

আমরা সম্প্রতি SqlClient( Microsoft.Data.SqlClient) এর নুগেট সংস্করণে আপগ্রেড করেছি যা একটি বাগ রয়েছে । এই বাগটি 1.x চক্রের জীবদ্দশায় প্রবর্তিত হয়েছিল এবং এটি ইতিমধ্যে ঠিক করা হয়েছে। ফিক্সটি 2.0.0 প্রকাশে পাওয়া যাবে যা এই লেখার সময় উপলভ্য নয়। একটি পূর্বরূপ উপলব্ধ।

আপনি এখানে বিশদটি পরীক্ষা করতে পারেন: https://github.com/dotnet/SqlClient/issues/262

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.