ভ্যাকুয়াম ফুল এবং ক্লাস্টারের মধ্যে পোস্টগ্রিএসকিউএল পার্থক্য


13

আমার কাছে একটি টেবিল রয়েছে যাতে 200 জিবি আকারের ডেটা এবং এটির 6 টি সূচক দ্বারা 180 গিগাবাইট আকার ধারণ করা হয়। এটি 30% স্ফীতিযুক্ত, তাই আমি এটি দখল করা অযাচিত স্থানটি পুনরায় দাবি করতে চাই। এটি job_id_idএক্স সূচকে গুচ্ছযুক্ত ।

তাহলে স্পেসটি পুনরায় দাবি করতে আমার কি clusterকমান্ড বা vacuum fullকমান্ড ব্যবহার করা দরকার ?

  1. এই দুটি কমান্ডের মধ্যে পার্থক্য কী?

  2. কি vacuum fullঅর্ডার কিছু কলাম হিসাবে একই দ্বারা clusterকমান্ড?

  3. উভয় আদেশে সূচিটি আবার তৈরি করা হয়েছে?

  4. আমার ক্ষেত্রে কোনটি দ্রুত হবে?

PostgreSQL ডাটাবেসের সংস্করণ 9.1


1
হ্যাঁ, সূচিগুলি পুনরায় তৈরি করা হবে। যা দ্রুত কিছু বিষয়গুলির উপর নির্ভর করে, আমি কল্পনা করি। তবে একটি জিনিস নিশ্চিত: 'কোনও কোনও কলামের শূন্যতা পূর্ণ আদেশ' এর মতো কিছুই নেই।
dezso

1
আমি আরও উল্লেখ করতে পারি যে ভ্যাকুয়াম কোনও লেনদেনের অভ্যন্তরে চলতে পারে না যা অনেক ক্ষেত্রে ক্লাস্টারকে আরও ভাল বিকল্প (এবং কখনও কখনও একমাত্র বিকল্প) করে তোলে যা অনুরূপ ফলাফল দেয়।
oᴉɹǝɥɔ

উত্তর:


8

কী CLUSTERকরে তা যাচাই করতে , আমি পূর্বের পরীক্ষা থেকে একটি টেবিলে নিয়েছিলাম যা মূলত প্রথম 10 মিলিয়ন ধনাত্মক পূর্ণসংখ্যার সমন্বয় করে। আমি ইতিমধ্যে কিছু সারি মুছে ফেলেছি এবং অন্য একটি কলামও রয়েছে তবে এটি কেবল প্রকৃত টেবিলের আকারকেই প্রভাবিত করে, তাই এটি আকর্ষণীয় নয়।

প্রথমত, VACUUM FULLটেবিলে চালিয়ে fkaআমি এর আকার নিয়েছি:

\dt+ fka
                    List of relations
 Schema | Name | Type  |  Owner   |  Size  | Description 
--------+------+-------+----------+--------+-------------
 public | fka  | table | test     | 338 MB | 

তারপরে টেবিলের একেবারে প্রথম থেকেই ডেটাটির শারীরিক ক্রমটি দেখুন:

SELECT *, ctid FROM fka ORDER BY ctid LIMIT 5;

 id  | col1 |  ctid   
-----+------+---------
   2 | 2    | (0,1)
   3 | 3    | (0,2)
   4 | 4    | (0,3)
   5 | 5    | (0,4)
   6 | 6    | (0,5)

এখন কয়েকটি সারি মুছুন:

DELETE FROM fka WHERE id % 10 = 5;
--DELETE 1000000

এর পরে, রিপোর্ট করা টেবিলের আকার পরিবর্তন হয়নি। সুতরাং আসুন এখন দেখুন কি CLUSTERকরে:

CLUSTER fka USING fka_pkey;

SELECT *, ctid FROM fka ORDER BY ctid LIMIT 5;

 id  | col1 |  ctid   
-----+------+---------
   2 | 2    | (0,1)
   3 | 3    | (0,2)
   4 | 4    | (0,3)
   6 | 6    | (0,4)
   7 | 7    | (0,5)

অপারেশনের পরে টেবিলের আকার 338 থেকে 296 এমবিতে পরিবর্তিত হয়েছে। ctidপৃষ্ঠায় টিপলের শারীরিক স্থান বর্ণনা করে এমন কলামটি থেকে আপনি দেখতে পাচ্ছেন যে সারি মিলানোর কোনও ফাঁক নেই id = 5

যেহেতু টিপলগুলি পুনরায় সাজানো হয়েছিল, তত সূচিগুলি পুনরায় তৈরি করা উচিত ছিল যাতে তারা সঠিক জায়গাগুলির দিকে ইঙ্গিত করে।

সুতরাং পার্থক্যটি দেখতে পাওয়া যায় যা VACUUM FULLসারিগুলি অর্ডার করে না। যতদূর আমি জানি, দুটি কমান্ড ব্যবহার করার পদ্ধতিতে কিছুটা পার্থক্য রয়েছে তবে ব্যবহারিক দৃষ্টিকোণ থেকে এটি মনে হয় প্রধান (কেবল?) পার্থক্য।


ctidকলামটি কী তা নিশ্চিত ছিলাম না । দেখা যাচ্ছে এটি এমন একটি সিস্টেম কলাম যা এর সারণির মধ্যে সারিটির শারীরিক অবস্থান বর্ণনা করে। postgresql.org/docs/current/ddl-system-colouts.html
Gajus

8

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

http://www.postgresql.org/docs/9.1/static/sql-vacuum.html

CLUSTERপোস্টগ্র্রেএসকিউএলকে সূচিপত্র_নাম দ্বারা নির্দিষ্ট সূচকগুলির উপর ভিত্তি করে টেবিল_নাম দ্বারা নির্দিষ্ট টেবিলটি ক্লাস্টার করার নির্দেশ দেয়। সূচীটি অবশ্যই টেবিলের নামতে সংজ্ঞায়িত করা উচিত। যখন কোনও টেবিলটি ক্লাস্টার করা হয়, তখন এটি সূচকের তথ্যের ভিত্তিতে শারীরিকভাবে পুনঃক্রম হয় এবং তার উপরে একটি অ্যাকসেস এক্সক্লুসিভ লক অর্জিত হয়।

http://www.postgresql.org/docs/9.1/static/sql-cluster.html

এছাড়াও ইন্টারেস্টিং : হ'ল-এ-রাইন্ডেক্স-পরে-ক্লাস্টার

তবে সম্ভবত আপনার যা দরকার তা হ'ল একটি REINDEXসূচক যা সূচকটির পুরাতন অনুলিপি প্রতিস্থাপন করে সূচির টেবিলে সঞ্চিত ডেটা ব্যবহার করে একটি সূচক পুনঃনির্মাণ করে।

http://www.postgresql.org/docs/9.1/static/sql-reindex.html


1
ওহো! REINDEX সম্পর্কে খুব সুন্দর টিপ! আমি ভ্যাকুয়াম এবং ক্লাস্টার উভয় দ্বারা কয়েকটি টেবিল সঙ্কুচিত করে চলেছি (এটি লাইভ করার জন্য সময় এবং প্রভাবগুলির তুলনা করার চেষ্টা করছি) এবং এখন আমার বৃহত্তম অবজেক্টগুলি আসলে সূচকগুলি।
মাইকে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.