নির্বাচন কি ভ্যাকুয়ামের মতো মৃত সারিগুলি সরিয়ে ফেলবে?


9

আমি মশকরা করছি VACUUMএবং কিছু অপ্রত্যাশিত আচরণ লক্ষ্য করেছি যেখানে SELECTকোনও টেবিল থেকে সারিগুলিকে আইএনএস করা কাজটি হ্রাস করার VACUUMপরে মনে হচ্ছে wards

পরীক্ষার ডেটা

দ্রষ্টব্য: স্বতঃব্যাকিউম অক্ষম

CREATE TABLE numbers (num bigint);
ALTER TABLE numbers SET (
  autovacuum_enabled = 'f',
  toast.autovacuum_enabled = 'f'
);

INSERT INTO numbers SELECT generate_series(1, 5000);

বিচার ঘ

এখন আমরা সমস্ত সারিটিতে একটি আপডেট চালনা করি,

UPDATE numbers SET num = 0;

এবং যখন আমরা চালাই VACUUM (VERBOSE) numbers;আমরা পেতে,

INFO:  vacuuming "public.numbers"
INFO:  "numbers": removed 5000 row versions in 23 pages
INFO:  "numbers": found 5000 removable, 5000 nonremovable row versions in 45 out of 45 pages
DETAIL:  0 dead row versions cannot be removed yet, oldest xmin: 6585
There were 0 unused item pointers.

বিচার 2

এখন আমরা অন্যটি ইস্যু UPDATEকরি তবে এবার আমরা SELECTপরে যুক্ত করব,

UPDATE numbers SET num = 1;
SELECT * FROM numbers;

এবং যখন আমরা চালাই VACUUM (VERBOSE) numbers;আমরা পেতে,

INFO:  vacuuming "public.numbers"
INFO:  "numbers": removed 56 row versions in 22 pages
INFO:  "numbers": found 56 removable, 5000 nonremovable row versions in 45 out of 45 pages
DETAIL:  0 dead row versions cannot be removed yet, oldest xmin: 6586
There were 56 unused item pointers.

ঠিক এখানে কি ঘটছে? আমার দ্বিতীয় সংস্করণটি কেন এটি চালিত SELECTপৃষ্ঠাগুলি থেকে মৃত টিপলগুলি সরিয়ে দেওয়ার পরে চলে VACUUM?

আমি ম্যাকোস 10.14.5 এ পোস্টগ্রিস 11.3 চালাচ্ছি।


2
আপনার কমান্ডগুলি চালানোর জন্য আপনি কোন ক্লায়েন্ট ব্যবহার করেন? এটিতে স্বতঃশক্তি সক্ষম করা আছে?
মোস্তাকসিও

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

@ মুস্তাচিয়ো আমি এই রুটি স্ক্রিপ্ট দিয়ে অ্যাক্টিভেকর্ড ব্যবহার করে এই পরীক্ষাগুলি করেছি, যা হুডের নীচে পিজি রত্ন ব্যবহার করে। আমি বিশ্বাস করি ডিফল্টরূপে অটোমোমিট সক্ষম করা হয়েছে কারণ আপনার কোনও COMMIT দেওয়ার দরকার নেই যদি না স্পষ্টভাবে BEGIN ব্যবহার করা হয়।
rafbm

উত্তর:


5

থেকে / R / পোস্টগ্রি এই পোস্টটি একটি থেকে Laurenz সালে Albe দ্বারা উত্তর মনে হচ্ছে যে গাদা শুধু tuples (গরম) আপডেট দায়ী করা যেতে পারে। মধ্যে HOT আপডেটের বর্ণনা থেকেsrc/backend/access/heap/README.HOT

কার্যকরভাবে, পৃষ্ঠাটি প্রায় পূর্ণ (<10% ফ্রি) হয়ে গেলে বাফার ক্লিনআপ লকটি অধিগ্রহণ করা যায় যখন স্থান পুনরুদ্ধার টিপল পুনরুদ্ধারের সময় ঘটে। এর অর্থ এটি UPDATE, DELETEএবং SELECTস্থান পুনরুদ্ধার ট্রিগার করতে পারে, তবে প্রায়শই INSERT ... VALUESএটির কারণটি হয় না কারণ এটি একটি সারি পুনরুদ্ধার করে না।

উদ্ধৃতিটি মূল উত্তরে নয়, তবে বাকীটি উদ্ধৃতি,

এই তত্ত্বকে সমর্থন বা খণ্ডন করতে, নিম্নলিখিত কোয়েরিটি চালান:

SELECT n_tup_upd, n_tup_hot_upd
FROM pg_stat_user_tables
WHERE schemaname = 'public' AND relname = 'TABLE_NAME';

যদি n_tup_hot_updশূন্যের চেয়ে বড় হয় তবে আমরা একটি মামলা পেয়েছি।


এখন আমরা কথা বলছি. +1
মোস্তাক্সিয়ো

হট একটি ভাল ব্যাখ্যা বলে মনে হচ্ছে। যদি আমি CREATE INDEX idx_numbers ON numbers USING btree (num), ভ্যাকুয়াম আউটপুট পরিবর্তিত হয় INFO: "numbers": removed 5000 row versions in 45 pages। তবে নোট করুন যে সূচক-কম n_tup_hot_updদৃশ্যে সর্বদা 0 হয়, উভয়ই আপডেট এবং নির্বাচন এবং নির্বাচন এবং ভ্যাকুয়ামের মধ্যে থাকে। আমি SELECT pg_sleep(10)প্রতিটি বিবৃতিটির মধ্যে দৌড়ানোর বিষয়টিও নিশ্চিত করেছিলাম যাতে পরিসংখ্যানগুলি আপ টু ডেট থাকে (আমি দেখতে পাচ্ছি seq_scan: 2, একটি আপডেটের জন্য এবং একটি নির্বাচনের জন্য)।
রাফবিএম

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

1

আন-ইনডেক্সেড টেবিলের বিশেষ ক্ষেত্রে, হ্যাঁ, নির্বাচনগুলি ভ্যাকুয়াম (মৃত সারি সরিয়ে দেওয়ার ক্ষেত্রে) হিসাবে একই কাজ করতে পারে।


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