tl; dr: প্রথম প্রক্রিয়াটি ডেটা পড়ার পরে পড়ার পরে হিন্ট বিট সেট করে। এটি পৃষ্ঠাটিকে নোংরা করবে, লেখার ক্রিয়াকলাপ তৈরি করবে। অন্য জিনিসটি VACUUM
(তবে অন্যান্য কমান্ড নয়) হ'ল পৃষ্ঠাকে যথাযথভাবে দৃশ্যমান হিসাবে চিহ্নিত করে। VACUUM
শেষ পর্যন্ত টিপলগুলি হিমায়িত করতে টেবিলে আঘাত করতে হবে।
Sertোকানোর পরে যে কাজটি করা দরকার তা আসলে পরিষ্কার-পরিচ্ছন্ন নয়, অন্তত অন্য কাজের অর্থে VACUUM
সাধারণত হয় না। আমি বিশদে যাওয়ার আগে নোট করুন যে এই উত্তরটি বর্তমান (অচ্ছন্ন) 9.6 কোডের উপর ভিত্তি করে আছে এবং আমি স্ট্রিমিংয়ের প্রতিরূপের প্রভাবগুলি উপেক্ষা করছি, যদিও এটির দৃশ্যমানতার উপর প্রভাব ফেলতে পারে।
এমভিসিসির কারণে, পোস্টগ্রিস যখনই মূল্যায়ন করে যে কোনও কোলের কাছে টিউপলটি দৃশ্যমান হওয়া উচিত কি না, এটি অবশ্যই বিবেচনা করতে হবে যে লেনদেনটি টিপল তৈরি করেছে (এক্সমিন লুকানো ক্ষেত্রে রেকর্ড করা হয়েছে) এবং কিছু অন্যান্য মানদণ্ড সহ committed এই চেকটি ব্যয়বহুল, সুতরাং যত তাড়াতাড়ি জানা গেল যে সমস্ত লেনদেনের জন্য একটি লেনদেন দৃশ্যমান তা এই টিপল শিরোনামে একটি "ইঙ্গিত বিট" সেট করা আছে। সেই বিটের সেটিংটি পৃষ্ঠাটি dirties, যার অর্থ এটি ডিস্কে লিখতে হবে। এটি পড়ার পরের কমান্ডটি SELECT
হ'ল হঠাৎ করে প্রচুর লেখার ট্র্যাফিক তৈরি করে দিলে এটি খুব বিভ্রান্ত হতে পারে । VACUUM
সন্নিবেশ সক্রিয় হওয়ার পরে একটি চালানো তা এড়ানো হবে। আর একটি গুরুত্বপূর্ণ পার্থক্য হ'লVACUUM
সর্বদা কোনও পৃষ্ঠায় ইঙ্গিত দেওয়া হবে (যতক্ষণ না এটি পৃষ্ঠায় ক্লিনআপ লক পেয়েছে), তবে অন্যান্য কমান্ডগুলি কেবলমাত্র কমান্ড শুরুর আগে সন্নিবেশ করানো লেনদেনের ইঙ্গিত দিবে ।
এই সমস্ত ইঙ্গিত বিট লেখার একটি গুরুত্বপূর্ণ বিষয় হ'ল VACUUM
থ্রোটল করা যেতে পারে (এবং অটোভ্যাকুমটি ডিফল্টরূপে থ্রোটলড হয়)। অন্যান্য কমান্ড থ্রোটলড নয় এবং যত দ্রুত সম্ভব নোংরা ডেটা তৈরি করবে।
VACUUM
পৃষ্ঠাগুলি সমস্ত-দৃশ্যমান হিসাবে চিহ্নিত করার একমাত্র পদ্ধতি, যা কিছু ক্রিয়াকলাপের জন্য গুরুত্বপূর্ণ পারফরম্যান্স বিবেচনা করে (উল্লেখযোগ্যভাবে, কেবল সূচকগুলি কেবল স্ক্যান করে)। আপনি যদি একটি বড় সন্নিবেশ করান তবে খুব সম্ভবত এমন যে অনেকগুলি পৃষ্ঠা রয়েছে যা নতুন inোকানো টিপলস ছাড়া কিছুই নেই। VACUUM
এই পৃষ্ঠাগুলিগুলি সমস্ত-দৃশ্যমান হিসাবে চিহ্নিত করতে পারে, তবে কেবল তখনই যখন প্রাচীনতম চলমান লেনদেন VACUUM
তথ্য সন্নিবেশ করানো লেনদেনের চেয়ে নতুন ছিল ।
এমভিসিসি কীভাবে কাজ করে তার কারণে, আগে 2 বিলিয়ন ডলারের বেশি লেনদেন tোকানো টুপলগুলি অবশ্যই " হিমায়িত " হিসাবে চিহ্নিত করতে হবে । ডিফল্টরূপে অটোভ্যাকুয়াম প্রতি 200 এম লেনদেন করতে এটি শুরু করে। একটি বাল্ক সন্নিবেশের পরে ভ্যাকুয়াম_ফ্রিজে_মিনি_এজ 0 তে সেট করে ম্যানুয়াল শূন্যতা চালানো তার প্রভাব হ্রাস করতে সহায়তা করতে পারে। আরও আক্রমণাত্মকভাবে, আপনি VACUUM FREEZE
tableোকানোর পরে টেবিলের উপর দৌড়াতে পারেন । পরের ফ্রিজ স্ক্যানটি কখন ঘটবে তা "ঘড়ির রিসেট" করবে।
আপনি যদি সুনির্দিষ্ট বিশদ জানতে চান HEAPTUPLE_LIVE
তবে HeapTupleSatisfiesVacuum()
ভিতরে কল করার পরে কেসটি একবার দেখুন lazy_scan_heap()
। HeapTupleSatisfiesVacuum()
নিজেও দেখুন এবং এর সাথে তুলনা করুন HeapTupleSatisfiesMVCC()
।
আমার আরও দুটি উপস্থাপনা রয়েছে যা আকর্ষণীয় হতে পারে। প্রথম ভিডিওটি http://www.pgcon.org/2015/schedule/events/829.en.html থেকে পাওয়া যায় , যখন দ্বিতীয় ভিডিওটি (যা আমি কিছুটা ভাল বলে মনে করি) https://www.youtube এ পাওয়া যায়। কম / দেখেছেন? V = L8nErzxPJjQ
EXPLAIN (ANALYZE, BUFFERS) outputs. But, if I understand things correctly, some of the hint bits (at least
* COMMITTED` এবং*INVALID
) তে কিছু অদ্ভুত পৃষ্ঠাগুলিও ব্যাখ্যা করে এবং (ইতিমধ্যে) ইতিমধ্যেCOMMIT
বাROLLBACK
, দ্বারা ঠিক করা যেতে পারে ?