বনাম বনাম মুছে দিন


35

আমি কমান্ড DELETEএবং TRUNCATEকমান্ডের মধ্যে পার্থক্য সম্পর্কে একটি বৃহত্তর বোঝার চেষ্টা করছি । ইন্টার্নালগুলি সম্পর্কে আমার বোঝার রেখাটি বরাবর কিছু যায়:

DELETE-> ডাটাবেস ইঞ্জিন প্রাসঙ্গিক ডেটা পৃষ্ঠাগুলি এবং সারি সন্নিবেশ করা সমস্ত সূচি পৃষ্ঠা থেকে সারি সন্ধান করে এবং সরিয়ে দেয়। সুতরাং, মুছে ফেলা যত বেশি সূচী হয় তত বেশি।

TRUNCATE -> কেবল টেবিলের সামগ্রী মুছে ফেলার জন্য এটি আরও কার্যকর বিকল্প হিসাবে তৈরি করে সমস্ত টেবিলের ডেটা পৃষ্ঠাগুলি সরিয়ে দেয়।

উপরের দিকটি ধরে নেওয়া সঠিক (দয়া করে আমাকে সংশোধন করুন):

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

2
এ সম্পর্কিত তত্ক্ষণাত্-- র ইউটিলিটি সম্পর্কে এই প্রশ্নের উত্তর DELETEএবং এর সাথে সম্পর্কিত কিছু তথ্য রয়েছে । এই উত্তরে বর্ণিত কৌশলটি ব্যবহার করে উভয় কমান্ডের প্রভাবগুলি অধ্যয়ন করতে আপনি নিজে লগের চারপাশে খনন করতে পারেন । TRUNCATETRUNCATEDROP
নিক চ্যামাস

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

5
@idstam TRUNCATEআবার ঘূর্ণিত করা যেতে পারে। নিক যে প্রশ্নটি যুক্ত করেছেন তার উত্তরে এটি কভার করেছেন ।
মার্ক স্টোরী-স্মিথ

কাটা কাটানোর জন্য "পরিবর্তিত টেবিল" অনুমতি প্রয়োজন (এই অর্থে যে ট্রান্সকেটটি মোছার পরিবর্তে প্লাগ ইন হয়)।
ক্রোকুসেক

উত্তর:


58

মুছে ফেলুন -> ডাটাবেস ইঞ্জিনটি প্রাসঙ্গিক ডেটা পৃষ্ঠাগুলি এবং সারিটি প্রবেশ করা সমস্ত সূচি পৃষ্ঠা থেকে সারিটি সন্ধান করে এবং সরিয়ে দেয়। সুতরাং, মুছে ফেলা যত বেশি সূচী হয় তত বেশি।

হ্যাঁ, যদিও এখানে দুটি বিকল্প রয়েছে। বেস টেবিল মোছার সঞ্চালন করে একই অপারেটরের দ্বারা অন-ক্লাস্টারযুক্ত সূচিগুলি থেকে সারিগুলি মুছে ফেলা হতে পারে। এটি সংকীর্ণ (বা প্রতি-সারি) আপডেট পরিকল্পনা হিসাবে পরিচিত:

প্রতি সারি মোছা

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

প্রতি সূচক মোছা

ট্র্যাঙ্কেট -> সারণিতে সমস্ত টেবিলের ডেটা পৃষ্ঠাগুলি সরিয়ে ফেলুন এটি একটি সারণীর বিষয়বস্তু মুছে ফেলার জন্য আরও কার্যকর বিকল্প হিসাবে তৈরি করে se

হ্যাঁ। TRUNCATE TABLEবিভিন্ন কারণে আরও দক্ষ:

  1. কম লক প্রয়োজন হতে পারে। ছাঁটাই সাধারণত টেবিল স্তরে একক স্কিমা সংশোধন লক প্রয়োজন (এবং প্রতিটি পরিমাণে একচেটিয়া লকগুলি অবনমিত)। মুছে ফেলা হ্রাস করতে পারে এমন একটি নিম্ন (সারি বা পৃষ্ঠা) গ্রানুলারিটিতে লকগুলি পাশাপাশি কোনও পৃষ্ঠাতে বিলোপযুক্ত একচেটিয়া লকগুলি অর্জন করতে পারে ।
  2. কেবল ছাঁটাইটি গ্যারান্টি দেয় যে সমস্ত পৃষ্ঠাগুলি একটি টেবিল থেকে সরিয়ে ফেলা হয়েছে। মুছে ফেলা খালি পৃষ্ঠাগুলি একটি স্তূপে ছেড়ে দিতে পারে এমনকি যদি একটি বিশেষ টেবিল লক ইঙ্গিত নির্দিষ্ট করা থাকে (উদাহরণস্বরূপ যদি ডাটাবেসের জন্য একটি সারি-সংস্করণ বিচ্ছিন্নকরণ স্তর সক্ষম করা থাকে)।
  3. কাটা কাটা সর্বদা ন্যূনতম লগড (ব্যবহারের ক্ষেত্রে পুনরুদ্ধারের মডেল নির্বিশেষে)। লেনদেনের লগে কেবল পৃষ্ঠা বিলোপ অপারেশনগুলি রেকর্ড করা হয়।
  4. কাণ্ডটি স্থগিত ড্রপ ব্যবহার করতে পারে যদি বস্তুটি 128 এক্সটেন্ট বা আকারে বড় হয়। মুলতুবি ড্রপ এর অর্থ একটি ব্যাকগ্রাউন্ড সার্ভার থ্রেড দ্বারা আসল বিচ্ছিন্নতার কাজটি তাত্পর্যপূর্ণভাবে সঞ্চালিত হয়।

বিভিন্ন পুনরুদ্ধার পদ্ধতিগুলি প্রতিটি বিবৃতিকে কীভাবে প্রভাবিত করে? আদৌ কোন প্রভাব আছে কি?

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

মোছার সময়, সমস্ত সূচি স্ক্যান করা হয় বা কেবল যেখানে সারি রয়েছে? আমি ধরে নেব যে সমস্ত সূচি স্ক্যান হয়েছে (এবং সন্ধান করা হয়নি?)

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

প্রশস্ত পরিকল্পনা 2

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

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

আউটপুট তালিকার বিশদ

কমান্ডগুলি প্রতিলিপি করা হয় কিভাবে? এসকিউএল কমান্ড কি প্রতিটি গ্রাহককে প্রেরণ এবং প্রক্রিয়াজাত করা হয়? নাকি এসকিউএল সার্ভার এর চেয়ে কিছুটা বেশি বুদ্ধিমান?

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

সম্পর্কিত পড়া: ডেটা পরিবর্তন করে এমন টি-এসকিউএল কোয়েরিগুলির অনুকূলকরণ

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