বিবৃতি মুছে ফেলার উপর ডেডলক


11

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

আমি যা খুঁজছি তা হ'ল কেন আমি একটি মোছা / মোছার ডিডলক পাচ্ছি। এটি (আমার জ্ঞানের কাছে) বিভিন্ন পরামিতিগুলিতে চলছে।

কোন ধারনা? ধন্যবাদ।

deadlock-list
2014-05-20 07:30:09.66 spid25s      deadlock victim=process409048
2014-05-20 07:30:09.66 spid25s       process-list
2014-05-20 07:30:09.66 spid25s        process id=process409048 taskpriority=0 logused=0 waitresource=PAGE: 12:1:7127294 waittime=4352 ownerId=629860973 transactionname=DELETE lasttranstarted=2014-05-20T07:30:05.307 XDES=0x397219620 lockMode=U schedulerid=5 kpid=3792 status=suspended spid=150 sbid=0 ecid=3 priority=0 trancount=0 lastbatchstarted=2014-05-20T07:30:05.307 lastbatchcompleted=2014-05-20T07:30:05.307 clientapp=QSQL25 hostname=MORRIS hostpid=1528 isolationlevel=read committed (2) xactid=629860973 currentdb=12 lockTimeout=4294967295 clientoption1=671088672 clientoption2=128056
2014-05-20 07:30:09.66 spid25s         executionStack
2014-05-20 07:30:09.66 spid25s          frame procname=adhoc line=1 stmtstart=68 sqlhandle=0x020000000b887a18f75d0aa07c25a9b8630fca696aa0e5d2
2014-05-20 07:30:09.66 spid25s     DELETE FROM dbo.UserDetailsData WHERE        (Username = @P1) AND (UserDate = @P2)     
2014-05-20 07:30:09.66 spid25s          frame procname=unknown line=1 sqlhandle=0x000000000000000000000000000000000000000000000000
2014-05-20 07:30:09.66 spid25s     unknown     
2014-05-20 07:30:09.66 spid25s         inputbuf
2014-05-20 07:30:09.66 spid25s        process id=process432e08 taskpriority=0 logused=0 waitresource=PAGE: 12:1:7127916 waittime=2648 ownerId=629859744 transactionname=DELETE lasttranstarted=2014-05-20T07:30:04.833 XDES=0x4c3426b50 lockMode=U schedulerid=6 kpid=5988 status=suspended spid=146 sbid=0 ecid=3 priority=0 trancount=0 lastbatchstarted=2014-05-20T07:30:04.833 lastbatchcompleted=2014-05-20T07:30:04.820 clientapp=QSQL25 hostname=MORRIS hostpid=1528 isolationlevel=read committed (2) xactid=629859744 currentdb=12 lockTimeout=4294967295 clientoption1=671088672 clientoption2=128056
2014-05-20 07:30:09.66 spid25s         executionStack
2014-05-20 07:30:09.66 spid25s          frame procname=adhoc line=1 stmtstart=68 sqlhandle=0x020000000b887a18f75d0aa07c25a9b8630fca696aa0e5d2
2014-05-20 07:30:09.66 spid25s     DELETE FROM dbo.UserDetailsData WHERE        (Username = @P1) AND (UserDate = @P2)     
2014-05-20 07:30:09.66 spid25s          frame procname=unknown line=1 sqlhandle=0x000000000000000000000000000000000000000000000000
2014-05-20 07:30:09.66 spid25s     unknown     
2014-05-20 07:30:09.66 spid25s         inputbuf
2014-05-20 07:30:09.66 spid25s        process id=process39ea562c8 taskpriority=0 logused=0 waitresource=PAGE: 12:1:7127916 waittime=4352 ownerId=629860973 transactionname=DELETE lasttranstarted=2014-05-20T07:30:05.307 XDES=0x13e0e4b50 lockMode=U schedulerid=2 kpid=7124 status=suspended spid=150 sbid=0 ecid=1 priority=0 trancount=0 lastbatchstarted=2014-05-20T07:30:05.307 lastbatchcompleted=2014-05-20T07:30:05.307 clientapp=QSQL25 hostname=MORRIS hostpid=1528 isolationlevel=read committed (2) xactid=629860973 currentdb=12 lockTimeout=4294967295 clientoption1=671088672 clientoption2=128056
2014-05-20 07:30:09.66 spid25s         executionStack
2014-05-20 07:30:09.66 spid25s          frame procname=adhoc line=1 stmtstart=68 sqlhandle=0x020000000b887a18f75d0aa07c25a9b8630fca696aa0e5d2

5
না, SELECT / UPDATE এর বাইরে অন্যান্য পরিস্থিতিতে একটি অচলাবস্থা দেখা দিতে পারে। আপনার যা দরকার তা হ'ল দুটি প্রক্রিয়া যার প্রত্যেকটিরই অপরটির হাতে থাকা একটি সংস্থান দরকার। (1) মোছা বিবৃতিগুলি কি আরও বড় লেনদেনের অংশ? (২) আপনি ক্রেডি ভুল ত্রুটির লগ লেখার পরিবর্তে কোথাও অচলিত এক্সএমএল পোস্ট করতে পারেন?
অ্যারন বার্ট্র্যান্ড

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

আমি কীভাবে এক্সএমএল পাব? এসকিউএল সার্ভার ত্রুটি লগগুলি থেকে ত্রুটি পেয়েছে। বিবৃতি বিভিন্ন পরামিতি সঙ্গে ডাকা হয়। আমরা সম্প্রতি বেশ কয়েকটি ফিল্টার সূচক যুক্ত করেছি যা ইউজারডেট ফিল্ডে ফিল্টার করে।
K09

প্রোফাইলারে ডেডলক গ্রাফ ইভেন্টটি ধরুন। তারপরে, এটি ধরার পরে, সারিটিতে ডানদিকে ক্লিক করুন -> ইভেন্টের ডেটা বের করুন -> এটিকে একটি .xdl হিসাবে কোথাও সংরক্ষণ করুন এবং এর লিখিত সামগ্রী (এটি একটি এক্সএমএল) পেস্টবিনে পোস্ট করুন (বা অন্য কোথাও অনুরূপ)।
মারিয়ান

1
হাই, এক্সএমএল এখানে পোস্ট ... আশা করি এটি সাহায্য করবে! dl.dropboxusercontent.com/u/16953128/DeadlockTest.xdl
K09

উত্তর:


14

আমি যা খুঁজছি তা হ'ল কেন আমি একটি মোছা / মোছার ডিডলক পাচ্ছি।

এটি অচলাবস্থার দেখা দেয় কারণ:

  1. spid 54 ecid 0একটি আপডেট ( U) পৃষ্ঠা লক অন অর্জন করেPAGE: 12:1:5147422
  2. spid 166 ecid 3Uএকই পৃষ্ঠায় একটি আপডেট ( ) পৃষ্ঠা লক অনুরোধ , এবং অবরুদ্ধ করা হয়েছে
  3. spid 54 ecid 2Uএকই পৃষ্ঠায় একটি আপডেট ( ) পৃষ্ঠা লক অনুরোধ ...

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

এটি বলেছিল, কেন অচলাবস্থা ঘটে কেন আপনার সত্যিকারের খুব বেশি চিন্তা করা উচিত নয় , গুরুত্বপূর্ণ প্রশ্নটি হ'ল আপনি কীভাবে এড়াতে পারেন। উত্তরটি হ'ল এর জন্য একটি কার্যকর অ্যাক্সেসের পথ সরবরাহ করা DELETE। বিবৃতিতে সারিগুলি সন্ধান করা দরকার WHERE Username = @P1 AND UserDate = @P2, সুতরাং আপনার এই কলামগুলিতে একটি সূচি কী করা উচিত।

এবং অবশ্যই আপনার যেমন একটি সূচক আছে। আসল প্রশ্নটি কেন আপনার সমস্যা পরে আপনি ফিল্টার ইনডেক্স যোগ ঘটছে শুরু হয়।

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

আপনি এই সম্পর্কে আরও বিশদ এবং এই ব্লগ পোস্টে একটি কাজের উদাহরণ খুঁজে পেতে পারেন ।

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

উত্তরটি নিম্নলিখিত একটি করতে হবে:

  1. ফিল্টার করা সূচকগুলি সরান
  2. ফিল্টারড ইনডেক্স কী যুক্ত করুন / বিদ্যমান নাম / তারিখ সূচীতে কলামগুলি অন্তর্ভুক্ত / প্রিডিট করুন
  3. একটি বিস্তৃত আপডেট পরিকল্পনা জোর করে (এটি করার কোনও সমর্থিত উপায় নেই )
  4. স্ন্যাপশট বিচ্ছিন্নকরণের অধীনে ক্যোয়ারী চালান (আরসিএসআই নয়)

বিকল্প 2 আমার দৃ strong় পছন্দ হবে।

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

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