এমএস এসকিএল সার্ভার 2005 এ মোট ওপেন / অ্যাক্টিভ সংযোগের সংখ্যা নির্ধারণ করার পদ্ধতি


90

আমার পিএইচপি / এমএস এসকিএল সার্ভার 2005 / উইন 2003 অ্যাপ্লিকেশন মাঝে মধ্যে খুব প্রতিক্রিয়াশীল হয়ে যায়, মেমরি / সিপিইউ ব্যবহার স্পাইক করে না। আমি যদি এসকিএল পরিচালন স্টুডিও থেকে কোনও নতুন সংযোগ খোলার চেষ্টা করি, তবে এটি কেবল ওপেন সংযোগ ডায়ালগ বাক্সে স্তব্ধ হয়ে যায়। কীভাবে সক্রিয় সংযোগের এমএস স্কুয়েল সার্ভার 2005 এর মোট সংখ্যা নির্ধারণ করতে হয়

উত্তর:


269

এটি প্রতিটি ডিবিতে সংযোগের সংখ্যা দেখায়:

SELECT 
    DB_NAME(dbid) as DBName, 
    COUNT(dbid) as NumberOfConnections,
    loginame as LoginName
FROM
    sys.sysprocesses
WHERE 
    dbid > 0
GROUP BY 
    dbid, loginame

এবং এটি মোট দেয়:

SELECT 
    COUNT(dbid) as TotalConnections
FROM
    sys.sysprocesses
WHERE 
    dbid > 0

আপনার যদি আরও বিশদ প্রয়োজন হয় তবে চালান:

sp_who2 'Active'

দ্রষ্টব্য: ব্যবহৃত এসকিউএল সার্ভার অ্যাকাউন্টটির জন্য 'সিসাদমিন' ভূমিকা দরকার (অন্যথায় এটি ফলাফল হিসাবে কেবল একটি একক সারি এবং একটি গণনা প্রদর্শন করবে)


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

8
এটি গ্রহণযোগ্য হওয়া উচিত নয়, বা সর্বোচ্চ ভোট দেওয়া উত্তরটিও এটি সহজভাবে ভুল। আপনি যদি লগ ইন করে থাকেন তবে কেবলমাত্র ফিরে আসা সংখ্যার উপর নির্ভর করতে পারবেন sa। আপনি যদি নন-সা ব্যবহারকারী হিসাবে লগ ইন করেন তবে আপনি 1 টি দেখতে পাবেন এবং এটি প্রকৃত সংযোগগুলির প্রতিনিধি হবে না।
আজহ

4
@ আজেহ: এটি বোঝা যাচ্ছে যে এই কাজটি করার জন্য আপনার কাছে পর্যাপ্ত অনুমতি রয়েছে। আপনার মন্তব্য অপ্রয়োজনীয়।
মিচ গম

4
@ আইবিবাসারা: এটি অন্তর্নিহিত। আপনি কেন কোনও নন-অ্যাডমিন এমন তথ্য দেখতে সক্ষম হবেন বলে আশা করবেন?
মিচ গম 6

4
পার্টিতে দেরীতে .. তবে .. sysadminপ্রয়োজনীয় ভূমিকা (মন্তব্য সম্পাদনা) আমার বোতাম সংরক্ষণ করেছিল saved আমি সঠিক পার্মস পেয়েছি ধরে ধরে 1 পেয়ে চলেছি। ভাই! স্থির এবং sovled। জয় : অর্থ_সেতু উইংস:
খাঁটি.ক্রোম

7

@ জওয়ালকারজর যেমন উল্লেখ করেছেন, আপনার কোডগুলিতে সংযোগগুলি নিষ্পত্তি করা উচিত (যদি সংযোগ পুলিং সক্ষম করা থাকে তবে সেগুলি কেবল সংযোগ পুলে ফিরে আসবে)। এটি করার নির্ধারিত উপায়টি ' using' বিবৃতিটি ব্যবহার করে :

// Execute stored proc to read data from repository
using (SqlConnection conn = new SqlConnection(this.connectionString))
{
    using (SqlCommand cmd = conn.CreateCommand())
    {
        cmd.CommandText = "LoadFromRepository";
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("@ID", fileID);

        conn.Open();
        using (SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
        {
            if (rdr.Read())
            {
                filename = SaveToFileSystem(rdr, folderfilepath);
            }
        }
    }
}

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

5

প্রতিটি সংযোগ পুলের জন্য সঠিক গণনা পেতে এটি ব্যবহার করুন (প্রতিটি ব্যবহারকারী / হোস্ট প্রক্রিয়া একই সংযোগের স্ট্রিং ব্যবহার করে ধরে নিবেন)

SELECT 
DB_NAME(dbid) as DBName, 
COUNT(dbid) as NumberOfConnections,
loginame as LoginName, hostname, hostprocess
FROM
sys.sysprocesses with (nolock)
WHERE 
dbid > 0
GROUP BY 
dbid, loginame, hostname, hostprocess

4

আমি জানি এটি পুরানো, তবে ভেবেছিলাম আপডেট করা ভাল ধারণা হবে। যদি একটি সঠিক গণনা প্রয়োজন হয়, তবে কলাম ECID সম্ভবত ফিল্টার করা উচিত। সমান্তরাল থ্রেড সহ একটি এসপিআইডি সিসপ্রসেসিতে একাধিকবার প্রদর্শিত হতে পারে এবং ইসিআইডি = 0 ফিল্টার করে প্রতিটি এসপিআইডি জন্য প্রাথমিক থ্রেড ফিরিয়ে দেয়।

SELECT 
    DB_NAME(dbid) as DBName, 
    COUNT(dbid) as NumberOfConnections,
    loginame as LoginName
FROM
    sys.sysprocesses with (nolock)
WHERE 
    dbid > 0
    and ecid=0
GROUP BY 
    dbid, loginame

1

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

http://www.c-sharpcorner.com/UploadFile/dsdaf/ConnPooling07262006093645AM/ConnPooling.aspx


0

দেখুন sp_ যা আপনাকে সংযোগের সংখ্যাটি দেখার চেয়ে আরও বিশদ দেয়

আপনার ক্ষেত্রে আমি এই জাতীয় কিছু করব

 DECLARE @temp TABLE(spid int , ecid int, status varchar(50),
                     loginname varchar(50),   
                     hostname varchar(50),
blk varchar(50), dbname varchar(50), cmd varchar(50), request_id int) 
INSERT INTO @temp  

EXEC sp_who

SELECT COUNT(*) FROM @temp WHERE dbname = 'DB NAME'

0

এমএস এসকিউএল জ্ঞান ভিত্তিক - ওপেন এসকিউএল ডাটাবেস সংযোগ (গুলি) কীভাবে জানবেন এবং কোন হোস্টের উপরে রয়েছে।

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

SELECT DB_NAME(dbid) as DBName, hostname ,COUNT(dbid) as NumberOfConnections
FROM sys.sysprocesses with (nolock) 
WHERE dbid > 0 
and len(hostname) > 0 
--and DB_NAME(dbid)='master' /* Open this line to filter Database by Name */
Group by DB_NAME(dbid),hostname
order by DBName

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