ভ্যাকুয়াম / অটোভ্যাকুয়াম অপারেশন করতে কত সময় লাগবে?


18

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

ডেটাবিয়ান পোস্টগ্রেএসকিউএল 8.4 এ একটি ডেবিয়ান 6.0 এএমডি 64 সিস্টেমে 16 গিগাবাইট র‍্যাম নিয়ে চলে।

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

সম্পাদনা:

আমি বুলেট-প্রুফ সমাধান খুঁজছি না। মৃত টিপলস বা প্রয়োজনীয় আই / ও বাইটগুলির সংখ্যার জন্য কেবল একটি মোটামুটি ইঙ্গিতটি সিদ্ধান্ত নেওয়ার পক্ষে যথেষ্ট। কখন VACUUMশেষ হবে তার কোনও ক্লু না থাকা সত্যিই বিরক্তিকর ।

আমি দেখেছি যে pg_catalog.pg_stat_all_tablesমৃত tuples সংখ্যা জন্য একটি কলাম আছে। সুতরাং এটি অনুমান করা সম্ভব, এমনকি যদি এর ANALYZEআগে কোনও টেবিলে থাকে তবে। অন্যদিকে autovacuum_vacuum_thresholdএবং autovacuum_vacuum_scale_factorসেটিংস একাই প্রমাণ করে যে পোস্টগ্রিস নিজেই টেবিলগুলিতে পরিবর্তনের পরিমাণ সম্পর্কে কিছু জানে এবং সম্ভবত এটি ডিবিএর হাতেও রাখে।

কোন ক্যোয়ারী চালানো হবে তা সম্পর্কে আমি নিশ্চিত নই, কারণ আমি যখন চালনা VACUUM VERBOSEকরি তখন দেখি যে কেবল টেবিলই নয়, সেগুলির সূচকগুলিও প্রক্রিয়াজাত হচ্ছে।

উত্তর:


35

আমার পোস্টগ্রিজ এসকিউএল (8.3) এ আমি এই কৌশলটি ব্যবহার করি:

  1. আমি টেবিলের ডিস্ক আকার ব্যবহার করে পাই pg_total_relation_size()- এর মধ্যে সূচি এবং টোস্ট আকার অন্তর্ভুক্ত, যা এটি VACUUMপ্রক্রিয়া করে। এটি আমাকে কয়টি বাইট VACUUMপড়তে হবে তার ধারণা দেয় ।
  2. আমি VACUUMটেবিলের উপর দৌড় ।
  3. আমি খুঁজে pidএর VACUUM(প্রক্রিয়া pg_catalog.pg_stat_activity)।
  4. লিনাক্স শেলটিতে আমি রান করি while true; do cat /proc/123/io | grep read_bytes; sleep 60; done( 123পিডটি কোথায় ) - এটি আমাকে এখনও পর্যন্ত ডিস্ক থেকে প্রক্রিয়া দ্বারা পড়া বাইটগুলি দেখায়।

এটি আমাকে দ্বারা প্রতি মিনিটে কয়টি বাইট প্রসেস করা হয় (পড়ুন) সম্পর্কে মোটামুটি ধারণা দেয় VACUUM। আমি অনুমান করি যে VACUUMঅবশ্যই পুরো টেবিলটি পড়তে হবে (ইনডেক্স এবং টোস্ট সহ), যার ডিস্ক আকারটি আমি পদক্ষেপ 1 থেকে জানি know

আমি অনুমান করি যে টেবিলটি যথেষ্ট বড় তাই এর পৃষ্ঠাগুলির সিংহভাগই অবশ্যই ডিস্ক থেকে পড়তে হবে (তারা পোস্টগ্রিসের শেয়ারকৃত মেমরিতে উপস্থিত নেই), তাই read_bytesক্ষেত্রটি প্রগতি কাউন্টার হিসাবে ব্যবহারের জন্য যথেষ্ট উপযুক্ত।

যতবার আমি এটি করেছি, প্রক্রিয়াটি দ্বারা পঠিত মোট বাইটগুলি মোট সম্পর্কের আকারের চেয়ে 5% এর বেশি নয়, সুতরাং আমার ধারণা এই পদ্ধতিটি আপনার পক্ষে যথেষ্ট ভাল।


কদর্য :) এটি কি পরবর্তী সংস্করণগুলির জন্যও কাজ করে? এবং, আরও গুরুত্বপূর্ণ, অটোভ্যাকুমের জন্য?
dezso

আমি এটি নতুন সংস্করণের জন্য চেষ্টা করে দেখিনি। এটি VACUUM FULL9.0+ এ কাজ করা উচিত , কারণ এটি টেবিলটি সম্পূর্ণরূপে পুনর্লিখন করে। এটি নিয়মিত VACUUMজন্যও কাজ করা উচিত , তবে আমি এখনও এটি পরীক্ষা করি নি। জন্য autovacuumতাহলে আপনাকে দেওয়া টেবিলের উপর autovacuum কর্মী প্রক্রিয়ায় ধরা পেরেছি এটা কাজ করবে, কিন্তু আমি কিভাবে এই অর্জনে জানি না।
রোমান হকি

কীভাবে আরডিএস দিয়ে এটি অর্জন করবেন তার জন্য আপনার কোনও পরামর্শ আছে? আরডিএস ব্যবহার করার সময় স্বাভাবিকভাবেই আমাদের একটি লিনাক্স শেলের অ্যাক্সেস নেই তবে আমরা এটিরও অনুমান করতে সক্ষম হতে চাই।
jwg2s

@ jwg2s "আরডিএস" বলতে আপনার অর্থ কী? আমাজনের ডাটাবেস পরিষেবা? যদি তা হয় তবে আমি দুর্ভাগ্যক্রমে এর সাথে পরিচিত নই :-( সম্ভবত তাদের সমর্থন সাহায্য করবে
রোমান হক 18

1
ভিজুয়াম পূর্ণ সহ পিজি 10 তে ভাল কাজ করার জন্য মনে হচ্ছে।
ডিলান ইয়ং

9

এটি নির্ধারণ করা খুব কঠিন। আপনি আরও আক্রমণাত্মক হতে বা হালকা হতে স্বতঃব্যাকিউমিং টিউন করতে পারেন । তবে যখন হালকাতে সেট হয়ে যায় এবং এটি পিছনে থাকে এবং বেস I / O বোঝা খুব বেশি হয়, এটি ঘটতে পারে যে এটি কখনই সঠিক শূন্যস্থানে পৌঁছায় না - তবে আপনি প্রক্রিয়াটি চলমান এবং চলমান এবং চলমান দেখবেন। তদুপরি, পরবর্তীকালে পোস্ট্রেএসকিউএল সংস্করণগুলিতে অটোভ্যাকুয়াম ক্ষমতাগুলি অনেক উন্নত হয়েছে, এটি কেবলমাত্র তাদের মধ্যে একটিতে স্থানান্তরিত করার পক্ষে যথেষ্ট (সম্ভবত 9.2 অতি সাম্প্রতিক সংস্করণ হিসাবে)।

অগ্রগতি বারটি একটি ভাল ধারণা শোনায় তবে আমি ধারণা করি এটি অর্থবহভাবে প্রয়োগ করা এত সহজ নয়। আপনার টেবিলগুলিতে যেমন অবিচ্ছিন্ন বোঝা থাকে এটি সম্ভবত সম্ভব যে অগ্রগতি স্পষ্টতই পিছনের দিকে চলে যাচ্ছে (মানে মরা সারি গণনা / শতাংশ হ্রাসের পরিবর্তে বৃদ্ধি পায়) - তাহলে আপনি কোন উপসংহারটি আঁকবেন?


2
আমি কিছু না করে পিছিয়ে গেলেও কোনও ধরণের অগ্রগতি সূচকটি দেখতে পছন্দ করি।
জাডেহে

3
VACUUM ANALYZE VERBOSEএটি কনসোলে অন্তত কিছু ক্রিয়াকলাপ ছাপায় যেমন এটি জিনিস। কিছুক্ষণ কয়েক ঘন্টা আটকে আছে কিনা তা ভেবে কেবল স্থিতিশীল প্রম্পটে ঘুরে দেখাই ভাল।
ভুয়া নাম

প্রশ্নটি "ভ্যাকুয়াম / অটোভ্যাকুম" সম্পর্কে জিজ্ঞাসা করে। VACUUMউপরেরগুলি কেবল অটোভ্যাকুয়ামের জন্য নয়, তবে এটি এখনও কিছু।
ভুয়া নাম

@ ফেকনাম এহ, আমি প্রশ্নটি ভুলভাবে পড়েছি - ম্যানুয়াল শূন্যতার অংশটি মিস করেছি missed দুঃখিত, আমি আমার মন্তব্য মুছে ফেলছি।
dezso

3

আমাদের উত্পাদনে বৃহত্তম টেবিলগুলির মধ্যে একটিতে এই লগ ছিল:

pages: 0 removed, 1801722 remain
tuples: 238912 removed, 42582083 remain, 1396 are dead but not yet removable
buffer usage: 9477565 hits, 3834218 misses, 2220101 dirtied
avg read rate: 2.976 MB/s, avg write rate: 1.723 MB/s
system usage: CPU 68.47s/177.49u sec elapsed 10065.08 sec

এটি এখন পর্যন্ত সবচেয়ে খারাপ সংস্থান ব্যবহার, অন্য সমস্ত সারণী 2 টিও কম কম নিয়েছে।

এই ধরণের লগগুলি দেখতে আপনার এটি সম্পাদন করা উচিত:

alter system set log_autovacuum_min_duration TO 5; 

(5 এমএসের জন্য), কনফিগারেশন ফাইলটি পুনরায় লোড করুন।


3

আমি এই পোস্টটি এবং এই পোস্টটিকে সহায়ক বলে মনে করেছি, তবে অন্যরা যেমন উল্লেখ করেছেন, শূন্যতার সামগ্রিক অগ্রগতি গণনা করা কঠিন হতে পারে, যেহেতু প্রক্রিয়াটিতে কয়েকটি পৃথক অপারেশন জড়িত।

আমি এই কোয়েরিটি ভ্যাকুয়ামের টেবিল স্ক্যানিংয়ের অগ্রগতি পর্যবেক্ষণ করতে ব্যবহার করি যা বেশিরভাগ কাজের কাজ বলে মনে হচ্ছে:

SELECT heap_blks_scanned/cast(heap_blks_total as numeric)*100 as heap_blks_percent, progress.*, activity.query
FROM pg_stat_progress_vacuum AS progress
INNER JOIN pg_stat_activity AS activity ON activity.pid = progress.pid;

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

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