এসকিউএল সার্ভারের স্টেটমেন্টগুলি এসকিউএল সার্ভার ২০০৮ আর 2-র মধ্যে মাঝেমধ্যে ধীর হয়


13

আমাদের গ্রাহকদের একজন, আমাদের অ্যাপ্লিকেশনটিতে কিছু পারফরম্যান্স সমস্যা রয়েছে। এটি একটি .NET 3.5 ওয়েব অ্যাপ্লিকেশন যা এসকিউএল সার্ভার ডাটাবেসে ডেটা গ্রহণ এবং আপডেট করে। বর্তমানে আমাদের উত্পাদন পরিবেশে উইন্ডোজ 2008 আর 2 মেশিনটিকে সামনের প্রান্ত হিসাবে এবং পিছনের প্রান্তে একটি এসকিউএল সার্ভার 2008 আর 2 ক্লাস্টার নিয়ে গঠিত। আমাদের অ্যাপ্লিকেশনটি ডাটাবেসের সাথে সংযোগ করতে COM + এবং MSDTC ব্যবহার করে।

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

সমস্যাটি হ'ল আমি যখন এসকিউএল ম্যানেজমেন্ট স্টুডিওতে সরাসরি ডাটাবেসে এই স্টোরেজ পদ্ধতিগুলি চালিত করি তখন কখনও কখনও তারা দীর্ঘ সময় নেয় (প্রায় 7/8 সেকেন্ড), অন্য সময় তারা দ্রুত হয় (1 সেকেন্ডের নীচে)। আমি জানি না কেন এটি হয় এবং এটি আমাকে বাদাম চালায়, কারণ এসকিউএল মেশিন (4 কোর, 32 জিবি) অন্য কোনও অ্যাপ্লিকেশন ব্যবহার করছে না, এবং এই অনুসন্ধানগুলি চালাতে বেশি সময় নেওয়া উচিত নয়।

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

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

WITH Waits AS
    (SELECT
        wait_type,
        wait_time_ms / 1000.0 AS WaitS,
        (wait_time_ms - signal_wait_time_ms) / 1000.0 AS ResourceS,
        signal_wait_time_ms / 1000.0 AS SignalS,
        waiting_tasks_count AS WaitCount,
        100.0 * wait_time_ms / SUM (wait_time_ms) OVER() AS Percentage,
        ROW_NUMBER() OVER(ORDER BY wait_time_ms DESC) AS RowNum
    FROM sys.dm_os_wait_stats
    WHERE wait_type NOT IN (
        'CLR_SEMAPHORE', 'LAZYWRITER_SLEEP', 'RESOURCE_QUEUE', 'SLEEP_TASK',
        'SLEEP_SYSTEMTASK', 'SQLTRACE_BUFFER_FLUSH', 'WAITFOR', 'LOGMGR_QUEUE',
        'CHECKPOINT_QUEUE', 'REQUEST_FOR_DEADLOCK_SEARCH', 'XE_TIMER_EVENT',  'BROKER_TO_FLUSH',
        'BROKER_TASK_STOP', 'CLR_MANUAL_EVENT', 'CLR_AUTO_EVENT',     'DISPATCHER_QUEUE_SEMAPHORE',
        'FT_IFTS_SCHEDULER_IDLE_WAIT', 'XE_DISPATCHER_WAIT', 'XE_DISPATCHER_JOIN', 'BROKER_EVENTHANDLER',
        'TRACEWRITE', 'FT_IFTSHC_MUTEX', 'SQLTRACE_INCREMENTAL_FLUSH_SLEEP',
        'BROKER_RECEIVE_WAITFOR', 'ONDEMAND_TASK_QUEUE', 'DBMIRROR_EVENTS_QUEUE',
        'DBMIRRORING_CMD', 'BROKER_TRANSMITTER', 'SQLTRACE_WAIT_ENTRIES',
        'SLEEP_BPOOL_FLUSH', 'SQLTRACE_LOCK')
    )
SELECT
    W1.wait_type AS WaitType, 
    CAST (W1.WaitS AS DECIMAL(14, 2)) AS Wait_S,
    CAST (W1.ResourceS AS DECIMAL(14, 2)) AS Resource_S,
    CAST (W1.SignalS AS DECIMAL(14, 2)) AS Signal_S,
    W1.WaitCount AS WaitCount,
    CAST (W1.Percentage AS DECIMAL(4, 2)) AS Percentage,
    CAST ((W1.WaitS / W1.WaitCount) AS DECIMAL (14, 4)) AS AvgWait_S,
    CAST ((W1.ResourceS / W1.WaitCount) AS DECIMAL (14, 4)) AS AvgRes_S,
    CAST ((W1.SignalS / W1.WaitCount) AS DECIMAL (14, 4)) AS AvgSig_S
FROM Waits AS W1
    INNER JOIN Waits AS W2 ON W2.RowNum <= W1.RowNum
GROUP BY W1.RowNum, W1.wait_type, W1.WaitS, W1.ResourceS, W1.SignalS, W1.WaitCount,    W1.Percentage
HAVING SUM (W2.Percentage) - W1.Percentage < 95; -- percentage threshold
GO

আমি যা জানতে পেরেছি তা এখানে:

  • আমি ডিবিসিসি এসকিউএলপিআরএফ (প্রায় 1 বা 2 ঘন্টা পরে) ব্যবহার করে পরিসংখ্যানগুলি পুনরায় সেট করার পরে, আমার সবচেয়ে বেশি অপেক্ষা করার ধরণগুলি হ'ল SOS_SCHEDULER_YIELD এবং WRITELOG
  • সময়ের সাথে সাথে (প্রায় 1 দিনের মৃত্যুদন্ড কার্যকর হওয়ার পরে), ডাটাবেসে সর্বাধিক ঘটে যাওয়া ওয়েটের ধরণগুলি হ'ল সিএক্সপ্যাকেট (% 67%) এবং ওএইলডিবি (১%%), যদিও প্রত্যেকটির জন্য অপেক্ষা করার গড় সময় দীর্ঘ হয় না। আমি আরও লক্ষ্য করেছি যে এসকিউএল প্রোফাইলারে চিহ্নিত হওয়া দীর্ঘ চলমান বিবৃতিগুলি সঞ্চিত প্রক্রিয়াগুলিতে কল যা একাধিক রেজাল্ট (প্রায়ই 3) ফেরত দেয়। এখানে কি প্যারালাইলেজমের সমস্যা হতে পারে? এই সমস্যাটির কারণ কিনা তা চিহ্নিত করার চেষ্টা করার কোন উপায় আছে কি?
  • আমি কোথাও পড়েছি যে লিখিত সার্ভারের মতো OLEDB সংস্থানগুলিতে কল করার কারণে OLEDB অপেক্ষা করতে পারে। ইনডেক্সিং সার্ভিস মেশিন (এমএসআইডিএক্সএস) এর সাথে সংযোগ স্থাপনের জন্য আমাদের একটি লিঙ্কযুক্ত সার্ভার রয়েছে তবে দীর্ঘকাল চলমান হিসাবে চিহ্নিত কোনও বিবৃতি সেই লিঙ্কযুক্ত সার্ভারটি ব্যবহার করে না।
  • আমার কাছে উচ্চতর গড় অপেক্ষা সময়টি এলসিকে_এম_এক্স টাইপের অপেক্ষা (প্রায় 1.5 সেকেন্ড গড়) এর জন্য, তবে এই অপেক্ষার প্রকারগুলি অন্যান্য ধরণের তুলনায় খুব ঘন ঘন ঘটে না (উদাহরণস্বরূপ, 64 এলসিকে_এম_এক্স 10,823 সিক্সপ্যাক্যাট অপেক্ষা একই সময়ের জন্য অপেক্ষা করে) )।
  • একটি জিনিস আমি লক্ষ্য করেছি যে এমএসডিটিসি পরিষেবা ক্লাস্টার নয়। এসকিউএল সার্ভার পরিষেবা ক্লাস্টার্ড তবে এমএসডিটিসি নয়। এর কারণে কোনও পারফরম্যান্স হিট হতে পারে? আমরা এমএসডিটিসি ব্যবহার করছি কারণ আমাদের অ্যাপ্লিকেশনটি ডেটাবেস অ্যাক্সেস করতে এন্টারপ্রাইজ পরিষেবাদি (ডিসিওএম) ব্যবহার করে তবে সার্ভারগুলি আমাদের দ্বারা ইনস্টল করা হয়নি এবং আমাদের ক্লায়েন্টের দ্বারা কনফিগার করা হয়নি।

কেউ কি আমাকে এই ডেটাটি আরও কিছু বোঝার জন্য সহায়তা করতে পারে? কি ঘটতে পারে তা বুঝতে কেউ আমাকে সাহায্য করতে পারেন? চেষ্টা করার এবং জিনিসগুলি বের করার জন্য আমি সার্ভারে কিছু করতে পারি? আমার কি অ্যাপ্লিকেশন ডেভলপমেন্ট টিমের সাথে কথা বলা উচিত?

উত্তর:


4

আপনার সমস্যার বিশদ ব্যাখ্যার জন্য ধন্যবাদ (আসলে সেরা উত্সাহিত প্রশ্নগুলির মধ্যে একটি)।

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

http://sqlfool.com/2009/04/a-look-at-missing-indexes/

http://troubleshootingsql.com/2009/12/30/how-to-find-out-the-missing-indexes-on-a-sql-server-2008-or-2005-instance-along-with-the- তৈরি-সূচক-কমান্ড /

এটিতেও স্কোয়াবলব্লগ.কম-এ জোনাথন কেহিয়াসের পোস্টটি দেখুন।

এছাড়াও, প্যারামিটার স্নিফিং এ একবার দেখুন।

http://sommarskog.se/query-plan-mysteries.html

http://pratchev.blogspot.com/2007/08/parameter-sniffing.html

এটি আপনার প্রয়োজনের জন্য প্রতিযোগিতামূলক উত্তর নয় তবে একটি ভাল সূচনা পয়েন্ট। আপনার আরও বিশদ বিবরণ প্রয়োজন হলে আমাদের জানান।


1

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

উদাহরণস্বরূপ (অবশ্যই সরলীকৃত):

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

এসকিউএল সার্ভার প্রথমবার সঞ্চিত প্রক্রিয়াটি কার্যকর করার সময় ইনপুট পরামিতিগুলির উপর ভিত্তি করে একটি কোয়েরি পরিকল্পনা তৈরি করবে। সুতরাং, যদি কোয়েরি প্ল্যানটি এমন যুক্তিতে নির্মিত হয় যা "প্রোডাক্টকোড" সমান ব্যবহার করে এবং আপনি "প্রোডাক্টটাইপ" সমান হিসাবে জিজ্ঞাসা করছেন এটি একটি মিল নয় এমন কোয়েরি পরিকল্পনা এবং সম্ভবত পুরো টেবিল স্ক্যানের ফলাফল results

আপনি স্টোরেজ পদ্ধতির শীর্ষে " উইন্ডো রিকম্পিল " রাখার চেষ্টা করতে পারেন । পদ্ধতি তৈরি করুন (লেনদেন-এসকিউএল)

আমি এটি বর্ণনা করার সর্বোত্তম উপায়টি নিম্নরূপ:

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


exec()ফাংশন ব্যবহার করা পর্যবেক্ষণ আচরণ ব্যাখ্যা করবে। এই ক্ষেত্রে ব্যবহার করে sp_executesqlস্বাভাবিকভাবে গতিশীল এসকিউএল স্টেটমেন্ট সমস্যা সমাধান করা হয়েছে।
আজিহ

1

যদি এসএসএমএস এবং অ্যাপ্লিকেশনে কোয়েরিগুলি মধ্যবর্তী সময়ে দ্রুত এবং ধীরগতিতে চলতে থাকে তবে আপনার কাছে কোনও পরিসংখ্যান বা প্যারামিটার স্নিফিংয়ের সমস্যা থাকতে পারে।

আমি এই সঞ্চিত পদ্ধতিগুলি সম্পাদন করব, তারপরে রুট অপারেটরের বৈশিষ্ট্যগুলি টানানোর জন্য কার্যকরকরণ পরিকল্পনাটি পর্যালোচনা করব (প্রতিটি বিবৃতিতে বাম দিকে সবুজ নোড)।

বাস্তবায়নের পরিকল্পনায় সারিগুলির আনুমানিক সংখ্যা কত, বনাম কতটি আসল সারি ফিরিয়েছিল?

সংকলিত প্যারামিটারটি কি সত্যিকারের ক্যোয়ারী প্যারামিটারের সাথে মেলে?

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

এক্সিকিউশন পরিকল্পনার পছন্দগুলি এসকিউএল পরিসংখ্যানের সাথে নিবিড়ভাবে যুক্ত, তাই আপনার পরিসংখ্যানগুলি নিয়মিতভাবে পুনর্নির্মাণ করা ভাল ধারণা idea

আপনার যদি কোনও সঞ্চিত প্রক্রিয়া থাকে যা কখনও কখনও সরবরাহিত প্যারামিটারের উপর নির্ভর করে অল্প পরিমাণে ডেটা বা বিপুল পরিমাণে ডেটা ফেরত দেয় তবে আপনার প্যারামিটার স্নিফিংয়ের সমস্যা হতে পারে।

যদি আপনার পরিসংখ্যান পুনর্নির্মাণ সমস্যাটি সমাধান না করে তবে আপনি সঞ্চিত পদ্ধতিতে সর্বাধিক ব্যয়বহুল বিবৃতি (গুলি) চালাতে পারেন OPTION (RECOMPILE)


0

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

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