নিয়মিত ভ্যাকুয়াম অ্যানালাইজ কি 9.1 এর নিচে প্রস্তাবিত?


38

আমি উবুন্টুতে PostgreSQL 9.1 ব্যবহার করছি। VACUUM ANALYZEতবুও নির্ধারিত সুপারিশ করা হয়, বা অটোভ্যাকুয়াম সমস্ত প্রয়োজন যত্ন নিতে যথেষ্ট?

যদি উত্তরটি "এটি নির্ভর করে", তবে:

  • আমার কাছে একটি লার্জি ডাটাবেস রয়েছে (30 জিআইবি সংক্ষেপিত ডাম্প আকার, 200 জিআইবি ডেটা ডিরেক্টরি)
  • আমি ডাটাবেসে ইটিএল করি, প্রতি সপ্তাহে প্রায় 3 মিলিয়ন সারি আমদানি করি
  • সর্বাধিক ঘন ঘন পরিবর্তনগুলির সাথে সারণীগুলি সমস্ত মাস্টার টেবিল থেকে উত্তরাধিকার সূত্রে প্রাপ্ত হয়, মাস্টার সারণীতে কোনও ডেটা থাকে না (ডেটা ভাগ করে সপ্তাহে করা হয়)
  • আমি প্রতি ঘন্টার রোলআপগুলি তৈরি করি এবং সেখান থেকে প্রতিদিন, সাপ্তাহিক এবং মাসিক প্রতিবেদনগুলি তৈরি করি

আমি জিজ্ঞাসা করছি কারণ নির্ধারিতটি VACUUM ANALYZEআমার প্রতিবেদনের উপর প্রভাব ফেলছে। এটি 5 ঘন্টারও বেশি সময় ধরে চলে এবং আমি এই সপ্তাহে দু'বার এটি মেরে ফেলেছিলাম, কারণ এটি নিয়মিত ডাটাবেস আমদানিকে প্রভাবিত করে। check_postgresডাটাবেসে কোনও উল্লেখযোগ্য ব্লাট রিপোর্ট করে না, সুতরাং এটি আসলে কোনও সমস্যা নয়।

দস্তাবেজগুলি থেকে, অটোভ্যাকুয়ামের পাশাপাশি লেনদেনের আইডি মোড়কের যত্ন নেওয়া উচিত। প্রশ্ন দাঁড়িয়েছে: আমার এখনও কি দরকার VACUUM ANALYZE?


ঠিক আছে, আমি 'না' বলব, তবে এই উত্তরটি বিশদভাবে বর্ণনা করার জন্য (উদাহরণস্বরূপ অটোভ্যাকুম প্যারামিটার সেট করা) একটি প্রতিরূপ ডিবিতে কিছু পরীক্ষার প্রয়োজন হবে।
dezso

উত্তর:


32

অস্থায়ী টেবিলগুলিতে কেবল আপডেট বা মুছে ফেলা সারিগুলিতে ভ্যাকিউম প্রয়োজন। স্পষ্টতই আপনি প্রচুর INSERTs করছেন তবে বর্ণনা থেকে এটা স্পষ্ট হয় না যে আপনি প্রচুর আপডেট বা ডিলিটও করছেন।

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

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

তবে সর্বদা তাজা পরিসংখ্যান পাওয়ার জন্য অপ্টিমাইজারটির জন্য বিশ্লেষণ চালিয়ে যান।


4
অটোভ্যাকুমও বিশ্লেষণের যত্ন নেয়। একটি বাল্ক আপডেট / ইনসার্ট / মোছার মধ্যে অবিলম্বে একটি বড় ম্যানুয়াল চালানো এবং তাত্ক্ষণিকভাবে বড় প্রশ্নগুলি অনুসরণ করা ভাল ধারণা। যদিও ভাল পরামর্শের জন্য +1।
এরউইন ব্র্যান্ডসেটেটার

N_dead_tup এবং বন্ধুদের পয়েন্টারটির জন্য ধন্যবাদ আমার কাছে রোলআপ টেবিল রয়েছে যার উপর আমি প্রায়শই (ঘণ্টায়) হাজার হাজার সারিটি ধ্বংস এবং পুনরায় তৈরি করি। আমি মানগুলি যথাযথভাবে পরীক্ষা করব। উত্তরটি সর্বদা "মনিটর করুন, ভাবেন, অভিনয় করুন" যাইহোক :)
ফ্রান্সোয়েস বিউসোলিল

25

আমি আপনার প্রশ্নে এমন কিছুই দেখছি যা autovacuumযত্ন নেবে না। এটি মূলত আপনার লেখার ক্রিয়াকলাপের প্যাটার্নের উপর নির্ভর করে । আপনি প্রতি সপ্তাহে 3 মিলিয়ন নতুন সারি উল্লেখ করেছেন , তবে INSERT(বা COPY) সাধারণত টেবিল এবং সূচক ব্লাট তৈরি করে না। ( autovacuumশুধুমাত্র কলামের পরিসংখ্যান , দৃশ্যমান মানচিত্র এবং কিছু ছোটখাটো কাজের যত্ন নিতে হবে )। UPDATEএবং DELETEটেবিল এবং সূচক ব্লাটের প্রধান কারণ, বিশেষত যখন এলোমেলো সারিগুলিকে লক্ষ্য করে। আপনার প্রশ্নের মধ্যে আমি এর কোনও দেখতে পাচ্ছি না।

autovacuumঅনেক দূর এগিয়ে গেছে এবং পোস্টগ্রিস 9.1 বা তার পরেও দুর্দান্ত কাজ করছে। আমি autovacuumসেটিংস এ একবার তাকান । যদি ভ্যাকুয়ামিং আপনার কাজের চাপের সাথে হস্তক্ষেপ করে, তবে "ব্যয় ভিত্তিক ভ্যাকুয়াম বিলম্ব" এ একবার দেখুন । ম্যানুয়াল শূন্যতা বিরল ব্যতিক্রম হওয়া উচিত।

আপনার যদি এলোমেলো UPDATEগুলি প্রচুর পরিমাণে থাকে তবে আপনি এখনই FILLFACTORএইচওটি আপডেটের অনুমতি দিতে এবং প্রয়োজনীয়তা হ্রাস করতে 100 এর চেয়ে কম কিছুতে সেট করতে চাইতে পারেন VACUUM। হট আপডেটে আরও:

এছাড়াও নোট করুন, অস্থায়ী টেবিলগুলির জন্য ম্যানুয়াল VACUUMএবং প্রয়োজন ANALYZE। আমি ম্যানুয়ালটিCREATE TABLE উদ্ধৃত করেছি :

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


6

আমি সম্মত হয়েছি যে অটো বৈশিষ্ট্যগুলি ব্যবহার করে এটি ডাটাবেস প্রশস্ত করে চালানোর পরিবর্তে সবচেয়ে ভাল, বেশিরভাগ ক্ষেত্রে প্রতি টেবিলের সুর করা প্রয়োজন।

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

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

আপনি অটো ভ্যাকুয়াম ট্যাবে গুইতে প্রতি টেবিল সেটিংসে যেতে পারেন এবং সেখানে ভ্যাকুয়ামের স্বাধীনভাবে সেট করতে পারেন এমন সেটিংস বিশ্লেষণ করতে দেখবেন।

সেটিংসটি পুনরায় স্থান সারণীতে শেষ হয় এবং কোয়েরির সাথে দেখা যায়

SELECT c.relname, c.reloptions FROM pg_class c where reloptions is not null

এবং সেখানে আক্রমণাত্মক বিশ্লেষণের একটি নমুনার মান হতে পারে

{autovacuum_enabled=true,autovacuum_analyze_threshold=10,autovacuum_analyze_scale_factor=.01}

শেষবার কখন আপনার টেবিলগুলি স্বয়ংক্রিয় বিশ্লেষণের ক্যোয়ারী পেয়েছে To

select 
    relname, 
    n_dead_tup, 
    n_tup_ins, 
    n_tup_upd, 
    n_tup_del, 
    last_autoanalyze, 
    autoanalyze_count 
from pg_stat_user_tables 
where last_autoanalyze is not null 
order by last_autoanalyze desc;

2
আপনি যদি তা না করেন ANALYZE, তবে পোস্টগ্রিএসকিউএল কীভাবে জানবে যে পরিসংখ্যান বদলেছে? এবং আপনি কীভাবে এটি নির্ধারণ করতে পারেন যে এটি বেশ ANALYZEদীর্ঘ সময় নেয়? একই সাথে, আপনি উপরে কোন জিইউআই উল্লেখ করেছেন তা পুরোপুরি পরিষ্কার না হলেও আপনি যে নির্দিষ্ট প্রতি-সারণীর সেটিংস ব্যবহার করতে পারেন তা সঠিক।
dezso
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.