অটোভ্যাকুম চালু থাকলে আমি কি আমার পোস্টগ্রিএসকিউএল ডাটাবেসটিকে ম্যানুয়ালি ভ্যাকিউম করব?


15

আমি এমন একটি সফটওয়্যার ব্যবহার করি যা একটি বড় পোস্টগ্র্যাস এসকিউএল ডাটাবেস তৈরি করে (এতে এক মিলিয়ন সারি যুক্ত একটি টেবিল রয়েছে) এবং বিকাশকারীরা বলেছিলেন আমার VACUUMএবং ANALYZEপর্যায়ক্রমে হওয়া উচিত । তবে PostgreSQL ডাটাবেস ডিফল্ট autovacuumচালু আছে।

আমার কি আদৌ শূন্যতা / বিশ্লেষণ করা উচিত? লাভ কি কি? স্বয়ংক্রিয় এবং ম্যানুয়াল শূন্যতার মধ্যে পার্থক্য কী

উদাহরণস্বরূপ, প্যাগাডমিন 3-এ, আমার কাছে এটি রয়েছে:
এখানে চিত্র বর্ণনা লিখুন

উত্তর:


12

আমি ইটিএলের সাথে একমত যে কোনও সংক্ষিপ্ত উত্তর নেই। আকার কেবল একমাত্র বিষয় নয় - আমরা ভারী বোঝার অধীনে বেশ কয়েকটি বড় পোস্টগ্রিজ এসকিউএল ওয়ালটিপি ডাটাবেসগুলি (কিছু টেবিল> 100.000.000 সারি সহ) চালাই এবং বর্তমানে আমরা কেবল অটোভ্যাকুমের উপর নির্ভর করি।

তবুও, দুটি জিনিস আমার কাছে গুরুত্বপূর্ণ বলে মনে হচ্ছে:

  • একটি sensক্যমত্য বলে মনে হচ্ছে, অটোভ্যাকুমটি কখনই বন্ধ করা উচিত নয় , যদি না আপনার ডাটাবেসে খুব ভাল সংজ্ঞায়িত কাজের চাপ থাকে এবং আপনি কী করছেন তা আপনি সঠিকভাবে জানেন না। তবে, স্বাভাবিকভাবেই, আপনি অতিরিক্ত VACUUMএবং / অথবা ANALYZEরান করতে পারেন ।

  • অতিরিক্ত VACUUMরান বিবেচনা করার আগে , আমি অটোভ্যাকুম কীভাবে বজায় রাখে তা পরীক্ষা করে দেখব। কোনও টেবিল অনুসন্ধানের মাধ্যমে pg_stat_user_tablesএবং স্বতঃশক্তির প্রান্তিকের বাইরে কিনা তা আপনি পরীক্ষা করতে পারেন pg_class। আমি অন্য একটি থ্রেডে এই জাতীয় একটি কোয়েরি পোস্ট করেছি, এটি আগ্রহী হতে পারে: পোস্টগ্র্রেএসকিউএলে আগ্রাসী অটোভ্যাকুম

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

পোস্টগ্র্রেএসকিউএল ডকুমেন্টেশনের কয়েকটি অংশ (সবচেয়ে দুর্দান্ত) যেটি আমাকে সহায়ক বলে মনে হয়েছে:


7

অটোভ্যাকুয়ামটি খুব ভালভাবে এটি কভার করা উচিত, যদি না আপনি কিছু ভুলভাবে কনফিগার করেন। অন্যান্য উত্তরগুলি ইতিমধ্যে এটি কভার করে।

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

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


4

এটির কোনও সংক্ষিপ্ত উত্তর নেই কারণ এটি অনেকগুলি ফ্যাক্টরের উপর নির্ভর করে। সিস্টেমটি কি ধীর? অটো-ভ্যাকুয়ামটি কি আসলে এই ছকটিকে স্পর্শ করছে? প্রভৃতি

এখানে এই বিষয়ে কিছু ভাল লিঙ্ক আছে:

একটি সুস্পষ্ট সিদ্ধান্ত নেওয়ার জন্য ডাটাবেস নিজেই বোঝা এবং কী চলছে সে সম্পর্কে আরও বিশদ প্রয়োজন।


1

আমি মনে করি না আপনি নিজেই শূন্যতার দরকার, যদি না আপনি পারফরম্যান্সের অবনতি দেখতে না পান। যাইহোক, আমি দৃ recommend়ভাবে আপনার শূন্যতা এবং অটোভ্যাকুয়াম সেটিংস পর্যালোচনা করার এবং এটি আপনার প্রয়োজনীয়তার সাথে সামঞ্জস্য করার পরামর্শ দেব

আপনার বর্তমান সেটিংস দেখতে, এই কোয়েরিটি চালান:

SELECT *
FROM pg_settings 
WHERE name LIKE '%vacuum%'

বেশিরভাগ ক্ষেত্রগুলি স্ব-ব্যাখ্যামূলক তবে এখানে তাদের উপর নথিপত্র রয়েছে: https://www.postgresql.org/docs/current/static/runtime-config-autovacuum.html

আমি বলব, যে আপনার লক্ষ্যটি অবিচ্ছিন্নভাবে আবর্জনা পরিষ্কার করার জন্য অটোভ্যাকুয়ামটি কনফিগার করা উচিত, তবে অটোভাকুমটি অবিচ্ছিন্নভাবে চালনা করবেন না

সর্বাধিক গুরুত্বপূর্ণ সেটিংস হ'ল:

  • অটোভ্যাকুয়াম_ভ্যাকুয়াম_স্কেল_ফ্যাক্টর - ক্লুপআপ ট্রিগার হওয়ার আগে মৃত হতে পারে এমন শতকরা শতাংশ নির্ধারণ করে। ডিফল্ট মান = 0.2
  • অটোভ্যাকুয়াম_ভ্যাকুয়াম_ থ্রেসহোল্ড - ক্লিনআপ ট্রিগার হওয়ার আগে ন্যূনতম মৃত টুপলের সংখ্যা। ডিফল্ট মান = 50

থ্রেশহোল্ড ছোট টেবিলগুলির জন্য প্রায়শই ক্লিনআপ প্রক্রিয়াটি ট্রিগার করা রোধ করতে সহায়তা করে।

আপনার খুব বড় টেবিল না থাকলে ডিফল্ট সেটিংস ঠিক আছে। সোজা কথায়, যদি আপনার যদি টেবিলটি 100 গিগাবাইট লাগে তবে আপনি অটোভ্যাকুয়াম ট্রিগার হওয়ার আগেই 20 গিগাবাইট আবর্জনা সংগ্রহ করতে যাচ্ছেন। সুতরাং, আমি সাধারণত স্কেল ফ্যাক্টর কম সেট করার পরামর্শ দিই। আপনার নিজের জন্য কতটা নিচু করা উচিত। আমি আমার বর্তমান প্রকল্পে 0.05 ব্যবহার করি

থ্রেশহোল্ডগুলিও বাড়ানো যেতে পারে। অনেক অ্যাপ্লিকেশনগুলিতে বেশ কয়েকটি টেবিল থাকে যা ঘন ঘন আপডেট হয় এবং 50 টি টিউপস তেমন হয় না। এটি 1000 কে বাড়িয়ে দেওয়া কোনও সমস্যার কারণ হতে পারে না, তবে অবশ্যই আপনার নিজের ক্ষেত্রে বিবেচনা করা উচিত

আপনি স্বতঃব্যাকিউম টিউন করতে পারেন এবং আপনার কয়েকটি টেবিলের জন্য আলাদা সেটিংস রাখতে পারেন

ALTER TABLE your_table SET (autovacuum_vacuum_scale_factor = 0.05);

আপনি যদি স্কেল_ ফ্যাক্টর এবং থ্রেশহোল্ডগুলি কনফিগার করেন তবে আপনার ঠিক আছে। আপনিও বৃদ্ধি পেতে পারেন autovacuum_vacuum_cost_limitযা ডিফল্টরূপে সমান হয় vacuum_cost_limitযা 200 এ সেট করা থাকে This এটি শূন্যতার একটি খুব গুরুত্বপূর্ণ বৈশিষ্ট্য, যা এটি সমস্ত উত্স খেয়ে ফেলতে দেয় না এবং শূন্যতার প্রক্রিয়া চলাকালীন আপনার অ্যাপ্লিকেশনটিকে ডেটা দিয়ে পরিচালনা করতে দেয় তবে ডিফল্ট মানটি খুব কম। এটি 1000 এ বাড়িয়ে দেওয়া কোনও তাত্পর্যপূর্ণ বিলম্বের কারণ না হওয়া উচিত, তবে ভ্যাকুয়াম প্রক্রিয়াটি আরও দ্রুত শেষ করতে দেয়

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

আশা করি এইটি কাজ করবে!

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