চেকপয়েন্ট বা কমিট ডিস্কে লিখেছেন?


12

আসুন, পুরো পুনরুদ্ধার মোড ডেটাবেস সহ এসকিউএল সার্ভার2008 আর 2 এবং উচ্চতর জন্য বলি।

আমি সর্বদা চিন্তা করতাম :

  1. যখন কোনও লেনদেন হয় (COMMIT), তখন লেনদেনটি র‌্যামে লেনদেনের লগে লেখা হয়।

  2. যখন একটি চেকপয়েন্ট আসে (কিছু সময় এবং / অথবা কিছু লেনদেন এবং অন্যান্য মাপদণ্ডের পরে), সর্বশেষ CHECKPOINT এবং বর্তমানের মধ্যে লেনদেনগুলি ডিস্কে লিখিত হয়।

  3. যখন একটি ব্যাকআপ লগ হয়, তখন ডেটা এমডিএফ ফাইলে লেখা হয়।

আমি কি সঠিক? আমার কিছু কলেজি বলেছে যে আমি ভুল, এবং বিওএল দিয়েও সঠিক উত্তর খুঁজে পাওয়া শক্ত।

ধন্যবাদ!


উত্তর:


20

দুর্ভাগ্যক্রমে COMMIT কীভাবে কাজ করে সে সম্পর্কে এখনও পর্যন্ত উত্তরে বেশ কয়েকটি ত্রুটি রয়েছে, তাই আমি আরও একটি যুক্ত করব। দেখুন এটা কিভাবে কাজ করে: বব Dorr এর SQL সার্ভার ইনপুট / আউটপুট উপস্থাপনা বিস্তারিত জানার জন্য এবং এসকিউএল সার্ভার 2000, I / O বুনিয়াদি । এটা যেভাবে কাজ করে:

  • সমস্ত সম্পূর্ণরূপে লগ করা ডেটা (পরিবর্তনগুলি) ঠিক নিম্নলিখিত ক্রমটিতে ঘটে ( এসকিউএল সার্ভার কীভাবে একটি অনুসন্ধান চালায়: বোঝার ডেটা বোঝার জন্য দেখুন ):

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

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

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

ন্যূনতম লগ হওয়া ক্রিয়াকলাপের জন্য লেখকরা আলাদাভাবে কাজ করেন, অপারেশনগুলি যা সর্বনিম্ন লগড করা যায় তা দেখুন । মোটামুটিভাবে সর্বনিম্ন লগ করা ক্রিয়াকলাপগুলি নিম্নলিখিত হিসাবে সরলীকৃত:

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

8

যখন কোনও লেনদেন হয় (COMMIT), তখন লেনদেনটি র‌্যামে লেনদেনের লগে লেখা হয়।

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

যখন একটি চেকপয়েন্ট আসে (কিছু সময় এবং / অথবা কিছু লেনদেন এবং অন্যান্য মাপদণ্ডের পরে), সর্বশেষ CHECKPOINT এবং বর্তমানের মধ্যে লেনদেনগুলি ডিস্কে লিখিত হয়।

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

যখন একটি ব্যাকআপ লগ হয়, তখন ডেটা এমডিএফ ফাইলে লেখা হয়।

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

আমি চাই আপনি নীচের লিঙ্কগুলি পড়ুন

এসকিউএল সার্ভারে লগিং এবং পুনরুদ্ধার বোঝা ইতিমধ্যে চিহ্নিত দ্বারা চিহ্নিত করা

এসকিউএল সার্ভার ২০০৮ অভ্যন্তরীণ এবং সমস্যা সমাধানের বই

লেনদেন লগ আর্কিটেকচার এবং পরিচালনা


ঠিক আছে, পরিষ্কার মনে হচ্ছে। কেবল সুনিশ্চিত হওয়ার জন্য: যখন কোনও কমিট ঘটে তখন আপনি বলেন এটি লেনদেনের লগে লেখা হয়েছে; আপনার অর্থ বাফার বা ডিস্ক (এলডিএফ)?
প্যাটাটার

এটি সর্বদা প্রথমে ক্যাশে লগ করতে এবং তারপরে পরে ডিস্কে লেনদেন লগতে ফ্লাশ করা হবে। আমি লেনদেন লগ পরিচালনার লিঙ্ক যুক্ত করেছি দয়া করে ওয়াল কীভাবে কাজ করে তার জন্য এটি উল্লেখ করুন
শ্যাঙ্কি

"যদি কোনও পৃষ্ঠা মেমরির আপডেট হওয়ার সময় এসকিউএল সার্ভার ক্র্যাশ হয় তবে ডাব্লু ওয়াল নিশ্চিত করে যে ডিবি ইঞ্জিন লেনদেনের লগটি পড়তে পারে এবং লেনদেনটি রোলব্যাক করতে পারে।" লেনদেন প্রতিশ্রুতিবদ্ধ না হলে এটি কেবল সত্য। যদি এটি ইতিমধ্যে প্রতিশ্রুতিবদ্ধ থাকে তবে কিছুই ফিরিয়ে আনা যাবে না। লেনদেনের লগের তথ্য ডেটা ফাইল আপডেট করার জন্য ব্যবহৃত হয়। এমনকি বাফারটি ক্রাশের আগে ডেটা ফাইলটিতে লেখা না থাকলেও।
चमत्कार 173

@ মিরাকল: আমি অনুমান করি যে পৃষ্ঠাটি আপডেট করা হচ্ছে যা কোর্স লেনদেনের নির্দিষ্ট লেনদেনের সাথে সম্পর্কিত যা প্রতিশ্রুতিবদ্ধ ছিল না।
শানকি

4

নীচে আপনার জন্য বিষয়গুলি পরিষ্কার করে দেবে:

যখন কোনও লেনদেন হয় (COMMIT), তখন লেনদেনটি র‌্যামে লেনদেনের লগে লেখা হয়।

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

যখন একটি চেকপয়েন্ট আসে (কিছু সময় এবং / অথবা কিছু লেনদেন এবং অন্যান্য মাপদণ্ডের পরে), সর্বশেষ CHECKPOINT এবং বর্তমানের মধ্যে লেনদেনগুলি ডিস্কে লিখিত হয়।

যখন একটি ব্যাকআপ লগ হয়, তখন ডেটা এমডিএফ ফাইলে লেখা হয়।

নির্দেশ করে :

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