স্লিপিং এসপিআইডি অন্যান্য লেনদেনগুলিতে অবরুদ্ধ


16

আমরা যে কয়েকটি ব্লকিংয়ের মুখোমুখি হয়েছি তা সনাক্ত করতে আমার সত্যিই সমস্যা হচ্ছে।

রুট SPID স্থিতি অবরুদ্ধ করে 'ঘুমন্ত', cmd কমান্ড 'কম্যান্ড AWAITING' করা হয়, এবং sqltextহয় SET TRANSACTION ISOLATION LEVEL READ COMMITTED

আমি যখন অবরুদ্ধ লেনদেনগুলি গণনা প্রতিবেদনের মাধ্যমে শীর্ষস্থানীয় লেনদেনগুলি দেখি, এসকিউএল-এর বিবৃতি অবরুদ্ধ করা হয় '-'।

আমি এসকিউএল-তে একটি ট্রেস সম্পাদন করেছি এবং যখন ব্লকিংয়ের ফলে রুট ব্লক করা এসপিআইডিটি সনাক্ত করা হয় তবে এটি আমাকে কোথাও নিয়ে যায়নি। শেষ ট্রেস স্টেটমেন্ট sqltextউপরের মত একই SET TRANSACTION ISOLATION LEVEL READ COMMITTED

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

সমাধান: আমাদের মধ্যে খুব কম ব্যবহৃত স্টোরেজ পদ্ধতিতে একটি সন্নিবেশের সাথে ত্রুটি ছিল (কলামগুলির সংখ্যা মেলে না), তবে ঠিক কী ঘটছে তা নিয়ে আমরা এখনও বিভ্রান্ত।

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

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


আমি ধরে নিচ্ছি যে এসপিআইডি ব্লক করা হোস্টের নামটি কোনও উপকারে আসেনি?
জন সেগেল

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

1
TRY / CATCH সংকলন ত্রুটিগুলি ধরবে না এবং কোনও মিলহীন কলাম সন্নিবেশ করানো যেমন সংকলন ত্রুটি হবে। এটি এক্সএক্স: সম্পূর্ণ প্রোফাইলার ইভেন্টগুলিকেও কখনও ট্রিগার করতে পারে না।
রিমাস রুসানু

1
এটি আসলে এই ক্ষেত্রে কোনও সংকলন ত্রুটি নয় কারণ প্রতিভা বিকাশকারী [অন্য পরিবর্তনযোগ্য] থেকে সেন্সট ইনটোর [টেবিল] নির্বাচন করুন এবং এটি পিয়ারের মধ্যে ধরা পড়েনি। আমি কোল্ডফিউশন থেকে একযোগে 3 টি সেশনে 1000 বার বিকাশের জন্য এসপিআরসি চালিয়েছি এবং এটি প্রোডাকশনের মতো কোনও লেনদেন কখনও ছাড়েনি left
ব্র্যাড

উত্তর:


10

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

সুতরাং, আপনাকে SET XACT_ABORT চালু বা কিছু ক্লায়েন্ট রোলব্যাক কোড যুক্ত করতে হবে

দেখুন SQL সার্ভার লেনদেন সময়সীমা সমাপ্ত সব রক্তাক্ত বিস্তারিত জানার জন্য


আমাদের সমস্ত স্প্রোকগুলিতে TRY / ক্যাচ ব্লক এবং বিগইন ট্রান / কমিট ট্রান / রোলব্যাক ট্রান বিবৃতি রয়েছে, রোলব্যাক ক্যাচে রয়েছে। XACT_ABORT এর কি এখনও কোনও প্রভাব থাকবে?
ব্র্যাড

@ ব্র্যাড: হ্যাঁ আমার লিঙ্কটি দেখুন।
কমান্ডটাইমআউটে

জিবিএন: ধন্যবাদ আমি এখনও বিভ্রান্ত আমাদের সংযোগগুলি কখনই টাইমআউট (0) এ সেট করা নেই। সুতরাং আপনি বলছেন যে আমরা যদি সংযোগগুলি পুনরায় ব্যবহার করি, এবং কোনও সংযোগ একটি ত্রুটিযুক্ত একটি স্প্রোক চালায় (যার ট্রাই / ক্যাচ এবং ট্রান ব্লক রয়েছে), এটি কোনওভাবেই ক্যাচ ব্লকে রোলব্যাক চালাতে পারে না এভাবে টেবিলগুলি লক করে এবং লেনদেন চালিয়ে যায় খুলবেন? আমার কাছে তা বোঝা যায় না।
ব্র্যাড

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

আমি মনে করি না আমাদের একটি কমান্ডটাইমআউট নির্দিষ্ট করা আছে। আমাদের সমস্ত সঞ্চিত পদ্ধতি sqlstress ব্যবহার করে পরীক্ষা করছে এবং 10 ব্যবহারকারীর 10 টি পুনরাবৃত্তিতে (ন্যূনতম) 1000 1000 এর অধীনে সম্পাদন করতে হবে। আমি এখনও যা ঘটেছে তা নিয়ে খুব বিভ্রান্ত হয়েছি, তবে যা আমরা পেয়েছি তাতে সমস্যাটিই আমি আপডেট করছি।
ব্র্যাড

9

কার্যকর হওয়া শেষ বিবৃতিটি দেখতে sys.dm_exec_connifications- এ সর্বাধিক_সেন্ট_সকিএল_হ্যান্ডল ব্যবহার করুন।

SELECT  t.text,
        QUOTENAME(OBJECT_SCHEMA_NAME(t.objectid, t.dbid)) + '.'
        + QUOTENAME(OBJECT_NAME(t.objectid, t.dbid)) proc_name,
        c.connect_time,
        s.last_request_start_time,
        s.last_request_end_time,
        s.status
FROM    sys.dm_exec_connections c
JOIN    sys.dm_exec_sessions s
        ON c.session_id = s.session_id
CROSS APPLY sys.dm_exec_sql_text(c.most_recent_sql_handle) t
WHERE   c.session_id = 72;--your blocking spid

সেই স্পিডের জন্য কোনও উন্মুক্ত লেনদেন আছে কিনা তাও পরীক্ষা করে দেখুন

SELECT  st.transaction_id,
        at.name,
        at.transaction_begin_time,
        at.transaction_state,
        at.transaction_status
FROM    sys.dm_tran_session_transactions st
JOIN    sys.dm_tran_active_transactions at
        ON st.transaction_id = at.transaction_id
WHERE   st.session_id = 72;--your blocking spid

আপনি DBCC INPUTBUFFER(spid)এক্সিকিউট করা শেষ এসকিউএল দেখতেও ব্যবহার করতে পারেন।
মাইক ফাল

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

আমার প্রথম নির্বাচনটি আপনাকে প্রক্রিয়া নামও দেয়, যদি বিবৃতিটি প্রকৃতপক্ষে কোনও পদ্ধতির অংশ হয়।
সেবাস্তিয়ান মেইন

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

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

4

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


ডিবিসিসি ওপেনট্রেনের জন্য ধন্যবাদ। এটি আমাকে বলবে না যে ব্লক করা পিআইডি-র একটি উন্মুক্ত লেনদেন রয়েছে, তবে আরও বিশদ পাওয়া যায় না। sp_Woisactive অবরুদ্ধ প্রক্রিয়াতে একই তথ্য ফেরত দেয় যেহেতু আমি নিজেরাই পেতে সক্ষম হয়েছি। 'সেট ট্রান্সএশন আইসোলেশন লেভেল রিড কমিটি' ব্যতীত আর কী চলছে সে সম্পর্কে এখনও বিশদ নেই
ব্র্যাড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.