আমি কীভাবে এএসপি.এনইটি এবং এসকিউএল সার্ভারের মধ্যে একটি সংযোগ পুল সমস্যার সমাধান করতে পারি?


211

গত কয়েক দিন আমরা আমাদের ওয়েবসাইটে এই ত্রুটি বার্তাটি দেখতে পাচ্ছি:

"টাইমআউটটির মেয়াদ শেষ হয়ে গেছে pool পুল থেকে সংযোগ পাওয়ার আগে সময়সীমা অতিক্রান্ত হয়েছিল This এটি ঘটতে পারে কারণ সমস্ত পুলের সংযোগ ব্যবহৃত হয়েছিল এবং সর্বাধিক পুলের আকার পৌঁছেছিল।"

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

  • আমি কীভাবে এটি সমাধান করতে পারি?

  • আমার কি এই পুলটি সম্পাদনা করতে হবে?

  • আমি কীভাবে এই পুলের সর্বাধিক সংযোগের সম্পাদনা করতে পারি?

  • উচ্চ ট্র্যাফিক ওয়েবসাইটের জন্য প্রস্তাবিত মান কী?


হালনাগাদ:

আইআইএস-এ আমার কি কিছু সম্পাদনা করা দরকার?

হালনাগাদ:

আমি দেখতে পেয়েছি যে সক্রিয় সংযোগগুলির সংখ্যা 15 থেকে 31 এর মধ্যে যে কোনও জায়গায় রয়েছে এবং আমি দেখতে পেয়েছি যে এসকিউএল সার্ভারে কনফিগার করা সংযোগগুলির সর্বাধিক অনুমোদিত সংখ্যা 3200 সংযোগেরও বেশি, 31 খুব বেশি বা এএসপি.নেট কনফিগারেশনে আমার কিছু সম্পাদনা করা উচিত? ?


আমি সঠিকভাবে মনে রাখলে সর্বোচ্চ পুলের আকারের ডিফল্ট 100 হয়। বেশিরভাগ ওয়েব সাইটগুলি ভারী বোঝার অধীনে 50 টিরও বেশি সংযোগ ব্যবহার করে না - আপনার প্রশ্নগুলি শেষ হতে কত দিন লাগে তার উপর নির্ভর করে। সংযোগ স্ট্রিংয়ে স্বল্প মেয়াদী
স্থিরতা

কত? উদাহরণস্বরূপ এটি 200 করুন?
আমর এলগারি

3
আমি মনে করি যে সমস্যার কারণ কী তা আপনার সত্যই অনুসন্ধান করা উচিত। আপনার প্রশ্নগুলি (বা তাদের মধ্যে কিছু) খুব দীর্ঘ চলছে?
স্প্ল্যাটনে

আসল কারণটি হতে পারে, একটি ক্যোয়ারী যা কার্যকর করতে অনেক সময় নিচ্ছে, আমি তাতে অনুসন্ধান করব, ধন্যবাদ
আমর এলগারি

1
আমি আশা করি আপনি সমস্যাটি খুঁজে পেতে পারেন। একটি পরামর্শ: আপনি যদি এসকিউএল সার্ভার ব্যবহার করেন তবে "এসকিউএল প্রোফাইলার" চেষ্টা করুন এবং দীর্ঘ প্রশ্নের সন্ধান করুন: sql-server-performance.com/articles/per/…
স্প্ল্যাটনে

উত্তর:


218

বেশিরভাগ ক্ষেত্রে সংযোগ পুলিংয়ের সমস্যা "সংযোগ ফাঁস" এর সাথে সম্পর্কিত। আপনার অ্যাপ্লিকেশন সম্ভবত এটির ডাটাবেস সংযোগগুলি সঠিক এবং ধারাবাহিকভাবে বন্ধ করে না। আপনি যখন সংযোগগুলি খোলা রাখেন, ততক্ষণ পর্যন্ত তারা নেট Finalize()পদ্ধতিতে কল করে N নেট আবর্জনা সংগ্রহকারী আপনার জন্য বন্ধ না করে ।

আপনি নিশ্চিত করতে চান যে আপনি সত্যই সংযোগটি বন্ধ করছেন । উদাহরণস্বরূপ নিম্নলিখিত কোড একটি সংযোগ লিক কারণ হবে, যদি মধ্যবর্তী কোড .Openএবং Closeএকটি ব্যতিক্রম ছোঁড়ার:

var connection = new SqlConnection(connectionString);
connection.Open();
// some code
connection.Close();                

সঠিক উপায়টি হ'ল:

var connection = new SqlConnection(ConnectionString);
try
{
     connection.Open();
     someCall (connection);
}
finally
{
     connection.Close();                
}

অথবা

using (SqlConnection connection = new SqlConnection(connectionString))
{
     connection.Open();
     someCall(connection);
}

যখন আপনার ফাংশন কোনও শ্রেণি পদ্ধতি থেকে কোনও সংযোগ ফেরত দেয় তা নিশ্চিত করে নিন যে আপনি এটি স্থানীয়ভাবে ক্যাশে রেখেছেন এবং তার Closeপদ্ধতিটি কল করেছেন । আপনি এই কোডটি ব্যবহার করে একটি সংযোগ ফাঁস করবেন উদাহরণস্বরূপ:

var command = new OleDbCommand(someUpdateQuery, getConnection());
result = command.ExecuteNonQuery();
connection().Close(); 

প্রথম কল থেকে ফিরে আসা সংযোগটি getConnection()বন্ধ হচ্ছে না। আপনার সংযোগটি বন্ধ করার পরিবর্তে, এই লাইনটি একটি নতুন তৈরি করে এবং এটি বন্ধ করার চেষ্টা করে।

আপনি যদি ব্যবহার করেন SqlDataReaderবা ক OleDbDataReader, এগুলি বন্ধ করুন। যদিও সংযোগটি বন্ধ করা নিজেই কৌতূহল অনুভব করে, আপনার ডেটা রিডার অবজেক্টগুলি স্পষ্টভাবে বন্ধ করার জন্য অতিরিক্ত প্রচেষ্টা করুন যখন আপনি সেগুলি ব্যবহার করেন।


এমএসডিএন / এসকিউএল ম্যাগাজিনের " কেন একটি সংযোগ পুল ওভারফ্লো হয়? " এই নিবন্ধটি অনেক বিবরণ ব্যাখ্যা করে এবং কিছু ডিবাগ করার কৌশল প্রস্তাব করে:

  • চালান sp_whoবা sp_who2। এই সিস্টেম সঞ্চিত পদ্ধতিগুলি sysprocessesসিস্টেম সারণী থেকে তথ্যগুলি ফেরত দেয় যা সমস্ত কার্য প্রক্রিয়া সম্পর্কিত স্থিতি এবং তথ্য দেখায়। সাধারণত, আপনি প্রতি সংযোগে একটি সার্ভার প্রক্রিয়া আইডি (এসপিআইডি) দেখতে পাবেন। আপনি যদি সংযোগ স্ট্রিংয়ে অ্যাপ্লিকেশন নামের যুক্তি ব্যবহার করে আপনার সংযোগটির নাম দিয়েছেন তবে আপনার কাজের সংযোগগুলি খুঁজে পাওয়া সহজ হবে।
  • TSQL_Replayখোলা সংযোগগুলি সনাক্ত করতে এসকিউএলপ্রফিলার টেম্পলেট সহ এসকিউএল সার্ভার প্রোফাইলার ব্যবহার করুন । আপনি যদি প্রোফাইলারের সাথে পরিচিত হন তবে এই পদ্ধতিটি স্প_ও ব্যবহার করে ভোট দেওয়ার চেয়ে সহজ।
  • পুল এবং সংযোগগুলি পর্যবেক্ষণ করতে পারফরম্যান্স মনিটর ব্যবহার করুন। আমি এই পদ্ধতিটি মুহুর্তে আলোচনা করি।
  • কোডে পারফরম্যান্স কাউন্টারগুলি পর্যবেক্ষণ করুন। কাউন্টারগুলি বের করার জন্য রুটিনগুলি ব্যবহার করে বা নতুন .NET পারফরম্যান্স কাউন্টার নিয়ন্ত্রণ ব্যবহার করে আপনি আপনার সংযোগ পুলের স্বাস্থ্য এবং প্রতিষ্ঠিত সংযোগগুলির সংখ্যা পর্যবেক্ষণ করতে পারেন।

4
একটি ছোট সংশোধন: জিসি কখনই কোনও সামগ্রীর ডিসপোজ পদ্ধতিটিকে কল করে না, কেবলমাত্র এটির চূড়ান্তকরণকারী (যদি থাকে তবে)। চূড়ান্তকরণকারী তখন প্রয়োজনে ডিসপোজে একটি "ফ্যালব্যাক" কল করতে পারে, যদিও আমি নিশ্চিত নই যে এসকিএলসিঙ্কশন এটি করে কিনা।
লুক এইচ

1
যখন ম্যাক্স পুলের আকার 50 সেট করতে হয় এবং আমাদের কেবল কয়েকজন ব্যবহারকারী থাকে তখন কি কোনও ধরনের পারফরম্যান্স অবক্ষয় হয়?
মাহেশ শর্মা

37

.NET ফ্রেমওয়ার্ক v4.6.1 ইনস্টল করার পরে একটি দূরবর্তী ডাটাবেসে আমাদের সংযোগগুলি এই পরিবর্তনের কারণে তত্ক্ষণাত সময় শেষ হতে শুরু করে ।

TransparentNetworkIPResolutionসংযোগের স্ট্রিংয়ে কেবলমাত্র পরামিতি যুক্ত করে এটি মিথ্যাতে সেট করতে ঠিক করতে :

সার্ভার = myServerName; ডাটাবেস = myDataBase; Trusted_Connection ট্রু =; TransparentNetworkIPResolution মিথ্যা =


এক্ষেত্রে সমস্যাটি হচ্ছে "পুল থেকে সংযোগ প্রাপ্তির আগে সময়সীমা পেরিয়ে গেছে"। আপনার সংযোগের স্ট্রিং এটিকে সমাধান করেছে, বা এটি একটি পৃথক হ্যান্ডশেকিংয়ের সমস্যা ছিল?
FBryant87

1
আমি যা মনে করি তা থেকে এটি একই প্রশ্নের মধ্যে ঠিক একই ত্রুটি বার্তা ছিল। .NET ফ্রেমওয়ার্ক v4.6.1 এ আপডেট করার সাথে সাথেই এটি ঘটেছে।
আজবিভেন

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

13

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


13

আপনি কি ডেটা রেইডারগুলির জন্য চেক করেছিলেন যা সংযোগ বা কোনও ডেটারিয়েডার বন্ধ করার আগে বন্ধ করা হয়নি এবং প্রতিক্রিয়াপ্রাপ্ত ireনির্দেশগুলি। পুনর্নির্দেশের আগে আপনি যখন সেগুলি বন্ধ করবেন না তখন সংযোগগুলি খোলা থাকে।


3
+1 - অথবা ডেটা রাইডারগুলি ফিরিয়ে ফাংশনগুলি - আপনি তাদের তৈরি ফাংশনের বাইরে সংযোগ কখনও বন্ধ হবে না ...
স্প্ল্যাটনে

1
আপনার ফাংশন আয় SqlDataReader আপনি DataTable তা সর্বোচ্চ পুকুর আকার উত্থাপন চেয়ে রূপান্তর ভালো হন
লাইভ-প্রেম

10

আমরা আমাদের ওয়েবসাইটেও সময়ে সময়ে এই সমস্যার মুখোমুখি হই। আমাদের ক্ষেত্রে দোষী হ'ল আমাদের পরিসংখ্যান / সূচীগুলি পুরানো। এর ফলে পূর্ববর্তী দ্রুত চলমান ক্যোয়ারি (অবশেষে) ধীর এবং সময় শেষ হয়ে যায়।

কোয়েরি দ্বারা প্রভাবিত টেবিলগুলিতে পরিসংখ্যান আপডেট করার এবং / অথবা সূচিগুলি পুনর্নির্মাণের চেষ্টা করুন এবং দেখুন এটি সহায়তা করে কিনা।


3
আমি মনে করি যে এটি ব্যাখ্যা করবে কারণ কেন একটি কোয়েরি সময় শেষ হতে পারে, তবে আমি মনে করি না যে কোনও সংযোগ প্রাপ্তির চেষ্টা করার সময় সময় শেষ হওয়ার কারণ কেন এটি ব্যাখ্যা করবে।
ডাঃগ্রিফ

1
এটি এমন হতে পারে যে খারাপ সূচকের সাহায্যে প্রশ্নগুলি আরও বেশি সময় নেয় এবং একই সাথে আরও সংযোগ ব্যবহৃত হয়।
লসমনোস

1
একটি ডিবিতে এসপি_প্লেডেস্ট্যাটাসের সাথে সমস্ত পরিসংখ্যান আপডেট করার পরে আমার জন্য কাজ করেছেন: এক্সইসি এসপি_আপডেস্টেটস;
বোটাং

6

আপনি সংযোগের স্ট্রিংয়ে নির্দিষ্ট করে MinPoolSize=xyzএবং সর্বনিম্ন এবং সর্বাধিক সর্বাধিক পুলের আকার নির্দিষ্ট করতে পারেন MaxPoolSize=xyz। সমস্যার এই কারণটি অবশ্য আলাদা জিনিস হতে পারে।


3
ম্যাক্সপুলসাইজ প্রস্তাবিত কি?
আমর এলগারি

2
সম্ভবত, আপনার যাওয়ার জন্য সর্বোত্তম উপায় হ'ল যদি আপনার বিশেষ প্রয়োজনীয়তা না থাকে এবং আপনি আপনার নির্দিষ্ট কেসের জন্য একটি ভাল পুলের আকার জানেন না তবে তা নির্দিষ্ট করে দেওয়া নয়
মেহরদাদ আফশারি

1
দ্রষ্টব্য: আমি পরীক্ষা করে দেখেছি যে আমার ডিবিতে সক্রিয় সংযোগগুলি প্রায় 22 টি লাইভ রয়েছে, এটি কি খুব বেশি?
আমর এলগারি

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

5

আমার .NET অ্যাপ্লিকেশনগুলির মধ্যে কয়েকটি তৃতীয় পক্ষের ডেটা স্তর ব্যবহার করার সময় আমিও এই সমস্যার মুখোমুখি হয়েছি। সমস্যাটি ছিল যে স্তরটি সঠিকভাবে সংযোগগুলি বন্ধ করে নি।

আমরা স্তরটি ছুঁড়ে ফেলেছি এবং একটি তৈরি করেছি যা সর্বদা সংযোগগুলি বন্ধ করে দেয় এবং নিষ্পত্তি করে দেয়। তার পর থেকে আমরা আর ত্রুটিটি পাই না।


আমরা এলএলবিএল ব্যবহার করছি এবং ওয়েবসাইটটি 2 বছর ধরে চলছে এবং শেষ কয়েক দিন এই জাতীয় কাজ শুরু করেছে।
আমর এলগারি

5

সময়সীমা শেষ সমস্যা সমাধানের জন্য আপনি এটিও চেষ্টা করতে পারেন:

আপনি আপনার webconfig করার httpRuntime না জুড়ে থাকলে, যে যোগ মধ্যে <system.web>ট্যাগটি

<sytem.web>
     <httpRuntime maxRequestLength="20000" executionTimeout="999999"/>
</system.web>

এবং

আপনার সংযোগের স্ট্রিংটি এভাবে পরিবর্তন করুন;

 <add name="connstring" connectionString="Data Source=DSourceName;Initial Catalog=DBName;Integrated Security=True;Max Pool Size=50000;Pooling=True;" providerName="System.Data.SqlClient" />

শেষ ব্যবহার

    try
    {...} 
    catch
    {...} 
    finaly
    {
     connection.close();
    }

3

এটি মূলত অ্যাপ্লিকেশনটিতে সংযোগ বন্ধ না হওয়ার কারণে। সংযোগের স্ট্রিংয়ে "মিনিপুলসাইজ" এবং "ম্যাক্সপুলসাইজ" ব্যবহার করুন।


3

আমার ক্ষেত্রে, আমি ডেটা রিডার অবজেক্টটি বন্ধ করছিলাম না।

        using (SqlCommand dbCmd = new SqlCommand("*StoredProcedureName*"))
        using (dbCmd.Connection = new SqlConnection(WebConfigurationAccess.ConnectionString))
            {
            dbCmd.CommandType = CommandType.StoredProcedure;

            //Add parametres
            dbCmd.Parameters.Add(new SqlParameter("@ID", SqlDbType.Int)).Value = ID;
.....
.....
            dbCmd.Connection.Open();
            var dr = dbCmd.ExecuteReader(); //created a Data reader here
            dr.Close();    //gotta close the data reader
            //dbCmd.Connection.Close(); //don't need this as 'using' statement should take care of this in its implicit dispose method.
            }

2

আপনি যদি জটিল লিগ্যাসি কোড নিয়ে কাজ করছেন যেখানে একটি সাধারণ (..) {.. using ব্যবহার করা সম্ভব নয় - যেমনটি আমি ছিলাম - আপনি এই এসও প্রশ্নে পোস্ট করা কোড স্নিপেটটি নির্ধারণের উপায়টির জন্য দেখতে চাইতে পারেন সংযোগটি তৈরি করার কল স্ট্যাক যখন কোনও সংযোগ সম্ভাব্যভাবে ফাঁস হয় (একটি সেট টাইমআউট পরে বন্ধ হয় না)। এটি ফাঁসের কারণ স্পষ্ট করা মোটামুটি সহজ করে তোলে।


2

স্কেল সংযোগটি খুব বেশি বার ইনস্ট্যান্ট করবেন না। এক বা দুটি সংযোগ খুলুন এবং সেগুলি পরবর্তী সমস্ত বেকার ক্রিয়াকলাপের জন্য ব্যবহার করুন।

দেখে মনে হচ্ছে Disposeসংযোগগুলি আইএন করার সময়ও ব্যতিক্রম ছুঁড়ে দেওয়া হয়েছে।


2

পোস্ট করা সমাধানগুলি ছাড়াও ...

লিগ্যাসি কোডের 1000 পৃষ্ঠাগুলি নিয়ে কাজ করার ক্ষেত্রে, প্রতিটি একাধিকবার সাধারণ গেটআরএসকে কল করে, সমস্যাটি সমাধানের আরও একটি উপায় এখানে রয়েছে:

একটি বিদ্যমান সাধারণ ডিএলএল-তে আমরা কমান্ডবিহেভিয়ার.ক্লসসিঙ্কশন বিকল্পটি যুক্ত করেছি:

    static public IDataReader GetRS(String Sql)
    {
        SqlConnection dbconn = new SqlConnection(DB.GetDBConn());
        dbconn.Open();
        SqlCommand cmd = new SqlCommand(Sql, dbconn);
        return cmd.ExecuteReader(CommandBehavior.CloseConnection);   
    }

তারপরে প্রতিটি পৃষ্ঠায় যতক্ষণ আপনি ডেটা রিডার বন্ধ করবেন ততক্ষণ সংযোগটি স্বয়ংক্রিয়ভাবে বন্ধ হয়ে যায় তাই সংযোগ ফাঁসগুলি প্রতিরোধ করা হয়।

    IDataReader rs = CommonDLL.GetRS("select * from table");
    while (rs.Read())
    {
        // do something
    }
    rs.Close();   // this also closes the connection

2

আমার ঠিক একই সমস্যা ছিল এবং উত্সটি খুঁজতে আমাকে কী সাহায্য করেছে তা ভাগ করতে চেয়েছিলাম: আপনার সংযোগের স্ট্রিংয়ে অ্যাপ্লিকেশন নাম যুক্ত করুন এবং তারপরে এসকিউএল সার্ভারের সাথে মুক্ত সংযোগটি চালিত করুন

select st.text,
    es.*, 
    ec.*
from sys.dm_exec_sessions as es
    inner join sys.dm_exec_connections as ec on es.session_id = ec.session_id
    cross apply sys.dm_exec_sql_text(ec.most_recent_sql_handle) st
where es.program_name = '<your app name here>'

1

এই সমস্যাটি আমার কোডটিতে ছিল। আমি কিছু উদাহরণ কোড পেস্ট করব যা আমি ত্রুটির নীচে এসেছি। পুল থেকে সংযোগ পাওয়ার আগে মেয়াদ উত্তীর্ণ হয়ে গেছে। এটি ঘটতে পারে কারণ সমস্ত পুলযুক্ত সংযোগগুলি ব্যবহারে ছিল এবং সর্বাধিক পুলের আকার পৌঁছেছিল।

 String query = "insert into STATION2(ID,CITY,STATE,LAT_N,LONG_W) values('" + a1 + "','" + b1 + "','" + c1 + "','" + d1 + "','" + f1 + "')";
    //,'" + d1 + "','" + f1 + "','" + g1 + "'

    SqlConnection con = new SqlConnection(mycon);
    con.Open();
    SqlCommand cmd = new SqlCommand();
    cmd.CommandText = query;
    cmd.Connection = con;
    cmd.ExecuteNonQuery();
    **con.Close();**

আপনি প্রতিটি এবং একবার সংযোগ বন্ধ করতে চান। এর আগে আমি আমাদের ঘনিষ্ঠভাবে সংযোগ করিনি কারণ এর ফলে আমি ত্রুটি পেয়েছি। ঘনিষ্ঠ বিবৃতি যোগ করার পরে আমি এই ত্রুটিটি এসেছি


0

আপনি আপনার কোডে সংযোগ ফাঁস করেছেন। আপনি এগুলি বন্ধ করে দিয়েছেন তা প্রমাণ করার জন্য আপনি ব্যবহার করার চেষ্টা করতে পারেন।

 Using (SqlConnection sqlconnection1 = new SqlConnection(“Server=.\\SQLEXPRESS ;Integrated security=sspi;connection timeout=5”)) {
                          sqlconnection1.Open();
                          SqlCommand sqlcommand1 = sqlconnection1.CreateCommand();
                          sqlcommand1.CommandText = raiserror (‘This is a fake exception’, 17,1)”;
                          sqlcommand1.ExecuteNonQuery();  //this throws a SqlException every time it is called.
                          sqlconnection1.Close(); //Still never gets called.
              } // Here sqlconnection1.Dispose is _guaranteed_

https://blogs.msdn.microsoft.com/angelsb/2004/08/25/connection-pooling-and-the-timeout-expired-exception-faq/


0

এই সমস্যাটি আমি এর আগেও সম্মুখীন হয়েছি। এটি ফায়ারওয়ালের সমস্যা হিসাবে শেষ হয়েছিল being আমি কেবল ফায়ারওয়ালে একটি নিয়ম যুক্ত করেছি। আমাকে পোর্ট খুলতে হয়েছিল 1433যাতে এসকিউএল সার্ভারটি সার্ভারের সাথে সংযোগ স্থাপন করতে পারে।


0

এটা ব্যবহার কর:

finally
{
    connection.Close();
    connection.Dispose();
    SqlConnection.ClearPool();
}

12
হতে পারে আমি এর বিন্দুটি মিস করছি SqlConnection.ClearPool, কিন্তু এমন কি যে কেবলমাত্র আপনার বর্তমান সংযোগটি সংযোগ পুলটিতে ছেড়ে দেওয়া বন্ধ করে দেয়? আমি ভেবেছিলাম দ্রুত সংযোগের অনুমতি দেওয়ার জন্য সংযোগ পুলের ধারণা। প্রতিটি সময় পুলটি সংযোগটি শেষ হওয়ার সাথে সাথে শেষ করার অর্থ হ'ল পুল থেকে অতিরিক্ত বাছাইয়ের পরিবর্তে প্রত্যেক সময় একটি নতুন সংযোগ তৈরি করা দরকার? কীভাবে এবং কেন এই কৌশলটি কার্যকর তা দয়া করে ব্যাখ্যা করুন।
দিব

0

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

  1. রিমোট ডেস্কটপ ব্যবহার করে আপনার সার্ভারে লগ ইন করুন
  2. আমার কম্পিউটার (উইন্ডোজ - ই) খুলুন এবং সি: \ ইনপপব \ ভোস্টস [ডোমেন] \ httpdocs এ যান
  3. ওয়েবকনফিগ ফাইলটিতে ডাবল ক্লিক করুন। ফাইল স্ট্রাকচারটি এক্সটেনশানগুলি লুকানোর জন্য সেট করা থাকলে এটি কেবল ওয়েব হিসাবে তালিকাভুক্ত হতে পারে। এটি ভিজ্যুয়াল বেসিক বা অনুরূপ সম্পাদক খুলবে।
  4. আপনার সংযোগ স্ট্রিংগুলি সন্ধান করুন, এগুলি নীচের উদাহরণগুলির অনুরূপ দেখাবে:

    "যুক্ত নাম =" সাইটস্যাক্ল্যাভার সার্ভার "সংযোগের স্ট্রিং =" সার্ভার = (স্থানীয়); ডাটাবেস = ডিবি নাম; uid = dbuser; pwd = dbpassword; পুলিং = সত্য; সংযোগ আজীবন = 120; সর্বাধিক পুলের আকার = 25; ""

5. প্রয়োজনীয় পুলের আকারে সর্বোচ্চ পুলের আকার = এক্স মান পরিবর্তন করুন।

  1. আপনার ওয়েবকনফিগ ফাইলটি সংরক্ষণ এবং বন্ধ করুন।

0

নিশ্চিত হয়ে নিন যে আপনি সংযোগ পুলের জন্য সঠিক সেটিংস সেট আপ করেছেন। আমি নিম্নলিখিত নিবন্ধে যেমন ব্যাখ্যা করেছি এটি অত্যন্ত গুরুত্বপূর্ণ: https://medium.com/@dewanwaqas/configurations-that-significantly-improves-your-app-performance-built-used-sql-server-and-net- ed044e53b60 আপনি যদি এটিকে অনুসরণ করেন তবে আপনি আপনার অ্যাপ্লিকেশনটির কার্য সম্পাদনে এক বিরাট উন্নতি দেখতে পাবেন।


0

আমার ক্ষেত্রে আমার অসীম লুপ ছিল (একটি সম্পত্তি থেকে ডেটাবেস থেকে মূল্য পাওয়ার চেষ্টা করে) যা কয়েকশত বর্গ সংযোগ খোলার চেষ্টা করে।

সমস্যার পুনরুত্পাদন করার চেষ্টা করুন:

while (true)
{
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        connection.Open();
        someCall(connection);
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.