বাদ দেওয়া ডাটাবেসের পরে ডিস্কের স্থান খালি করা


12

আমি একটি ডেভ সিস্টেমে কাজ করছি, এবং আমি একটি ডাটাবেসে পুনরুদ্ধার করছি, "foo" বলুন, যা আমি দেব উদ্দেশ্যে ব্যবহার করছি। যেহেতু আমি কিঙ্কসটির মধ্য দিয়ে কাজ করছি, আমি সবেমাত্র ড্রপ ডেটাবাসে ফু চালিয়ে যাচ্ছি। তবে, আমি দ্রুত বুঝতে পারি যে আমি আমার ডিস্কের সমস্ত স্থান খেয়ে ফেলেছি। বিষ্ঠা।

ভ্যাকুয়াম কি সম্পূর্ণ লজিক্যাল ডাটাবেস থেকে পূর্বে ফেলে রাখা ডাটাবেস থেকে স্থান ফাঁকা করে দেয় (ফু)? আমি এটি অন্য একটি লজিকাল ডাটাবেস থেকে চেষ্টা করেছি এবং ফ্রি স্পেসটি পুনরুদ্ধার করা হয়েছিল, তবে আমি মনে করি না যে আমি তৈরি করা সমস্ত ডেটাব্যাস / ড্রপ ডেটাবেস কলগুলির জন্য অ্যাকাউন্ট করা যথেষ্ট ছিল। এটি হতে পারে যে লজিকাল ডেটাবেসটি আমি এসেছি তা ভ্যাকুয়ামই সরিয়ে নিয়েছে।

মোট ডেটাবেস আরম্ভ না করে সেই জায়গাটিকে পুনরায় দাবি করার উপায় থাকতে হবে?

সম্পাদনা

সুতরাং আমি প্রায় এই পদক্ষেপগুলি অনুসরণ করে একটি ব্যাকআপ থেকে ডাটাবেসটিকে পুনরায় পুনঃনির্নিযুক্ত করেছি । পুনরুদ্ধারের পরে, আমি ডিস্কে একটি টন জায়গা পুনরায় দাবী করেছি! এটি আপাতত কাজ করে, তবে কীভাবে একটি ড্রপ ডাটাবেস ক্লিনআপ করা যায় সে সম্পর্কিত কোনও সহায়তা এখনও কার্যকর হবে useful

সম্পাদনা 2

সুতরাং আমি এই সমস্যাটি সম্পর্কে আরও কিছু তথ্য সংগ্রহ করতে পেরেছি ... উদাহরণ হিসাবে আমি এনেছি:

Initial partition size:
                       Size   Used  Avail Use% Mounted on
                        25G   8.1G    16G  35% /apps1

After creating my new database and populating it:
                        25G    18G   6.4G  73% /apps1

After Dropping the database using "DROP database mydb" from a separate logical DB:
                        25G    13G    11G  56% /apps1

সুতরাং এটি আমার কাছে উপস্থিত হয়েছে যে নতুন ডিবি ডিস্কে .6 9.6 গিগাবাইট নিয়েছে। তবে এটিকে বাদ দেওয়ার পরে, পুনরুদ্ধার করা ডিস্কের স্থানটি কেবলমাত্র ~ 4.6G দ্বারা বৃদ্ধি পেয়েছে। সুতরাং, প্রায় 5 গিগাবাইট জায়গা রয়েছে যা আমাকে অবাক করে দেয় যে কী চলছে !?

আমি যখন পুনরায় বিনোদন করি, জনবহুল করি এবং আবার ছেড়ে যাই তখন এটি এই চক্রটি অব্যাহত রাখে।

"ড্রপ ডেটাবেস" কমান্ড জারি হওয়ার পরে কি কারও কি ধারণা আছে?


হয়তো এটিও লক্ষণীয় যে আমি সংরক্ষণাগারটি চালু করেছি। এটি প্রদর্শিত হয় যে ওয়াল সংরক্ষণাগার ফাইলগুলি যে লিখনে লিখিত হচ্ছে সে স্থানটি বরং বড়। আমি এটি নিবিড়ভাবে পর্যবেক্ষণ করি না। সম্ভবত আমি উপরে তালিকাভুক্ত একই পদ্ধতিটি চেষ্টা করব এবং সমস্ত স্থান পুনরায় দাবি করা হয়েছে কিনা তা দেখতে সেই ডিরেক্টরিতে একটি "ডু" চালাবো। আমি আবার রিপোর্ট করব।
Jmoney38

আমি ধরে নিচ্ছি ভ্যাকুয়াম তখন কি কাজে আসে না?
রজারডপ্যাক

উত্তর:


6

sudo lsof| grep deletedকোনও পোস্টগ্রাসএসকিউএল প্রক্রিয়া উপস্থিত রয়েছে কিনা তা চেষ্টা করে দেখুন । এই কমান্ডটি মুছে ফেলা হয়েছে এমন ফাইলগুলির সন্ধান করে তবে এর ফাইল বর্ণনাকারী এখনও কোনও প্রক্রিয়াতেই খোলা আছে। আরেকটি পার্শ্ব প্রতিক্রিয়া হ'ল এটি df -hএবং du -sh /পৃথক। এটি কারণ duফাইল সিস্টেমটি দেখে এবং সমস্ত ফাইলের আকার dfযোগ করে এবং দৈহিক ডিভাইসে দেখায়।

আমার সবেমাত্র একটি ডাটাবেস নিয়ে একটি সমস্যা হয়েছে যা একটির পরে কোনও স্থান ছাড়েনি DROP tableএবং এটিই কারণ ছিল।

আমার জানা একমাত্র সমাধান হ'ল ডেটাবেস পুনরায় চালু করা। হতে পারে আপনি পুনরায় লোড (সাইনআপ) প্রেরণের চেষ্টা করতে পারেন।


2
lsof | grep deletedটিপ ভালো ছিল; এতে যোগ করুন যে ফাইলগুলি প্রকাশের জন্য আপনাকে কেবল কোন পোস্টগ্রাফিক্যাল সেশন এখনও সক্রিয় রয়েছে তা নির্ধারণ করতে হবে এবং তাদের হত্যা করতে হবে। আমার ক্ষেত্রে, 500+ সক্রিয় সংযোগগুলির মধ্যে, প্রায় সব IDLE বা COMMIT- এ, একককে হত্যা করা, সাথে পাওয়া যায় SELECT * FROM pg_stat_activityএবং আনলাইজে আটকে থাকে, মোছা ফাইলগুলি মুক্ত করার জন্য যথেষ্ট। 00 জিবি মুক্তি পেয়েছে।
অ্যালেক্স উত্তর-কীগুলি

5

আমার বোধগম্যতা হল আপনি যখন কোনও ডাটাবেস ফেলে রাখেন তখন এটি এবং এটির ফাইলগুলি চলে যায়।

আপনি যদি টেবিলস্পেস ব্যবহার না করেন তবে প্রতিটি ডাটাবেসের নিজস্ব উপ-ডিরেক্টরিতে $ পিজিডিটিএ / বেসের অধীনে এর ডেটা থাকা উচিত। উদাহরণস্বরূপ (পোস্টগ্রিজ ব্যবহারকারী হিসাবে) আমার একটি সার্ভার ব্যবহার করে:

-bash-3.2$ cd $PGDATA/base

-bash-3.2$ ls | wc -l
9

-bash-3.2$ du -sh `ls`
6.9M    1
6.7M    12690
6.9M    12698
11M     16391
341M    17339
3.8G    17341
11M     17343
6.8M    19047
8.0K    pgsql_tmp

এখন, আমরা যদি একটি নতুন ডাটাবেস তৈরি করি তবে $ পিজিডিটিএ / বেসের অধীনে আরও একটি উপ-ডিরেক্টরি থাকতে হবে:

-bash-3.2$ createdb foo

-bash-3.2$ ls | wc -l
10

-bash-3.2$ du -sh `ls`
6.9M    1
6.7M    12690
6.9M    12698
11M     16391
341M    17339
3.8G    17341
11M     17343
6.8M    19047
6.9M    83637
8.0K    pgsql_tmp

আমরা যা দেখতে পাই তা হল (G পিজিডিটিএ / বেস / 83637 নতুন ডাটাবেসের সাব-ডিরেক্টরি)।

সেই ডাটাবেসটি ফেলে দেওয়ার সাথে সাথে ডেটা ফাইলগুলি মুছে ফেলা উচিত:

-bash-3.2$ dropdb foo

-bash-3.2$ ls wc -l
9

-bash-3.2$ du -sh `ls`
6.9M    1
6.7M    12690
6.9M    12698
11M     16391
341M    17339
3.8G    17341
11M     17343
6.8M    19047
8.0K    pgsql_tmp

আমরা যা প্রত্যাশা করব - G পিজিডিটিএ / বেস / 83637 ডিরেক্টরিটি চলে গেছে, শূন্যতার কিছুই থাকতে হবে না।

আপনি কি নিশ্চিত যে আপনার ডিস্কের জায়গা খেয়ে অন্য কিছু নেই? আপনার অন্য একটি ডাটাবেস? লগ ফাইল?

আপনি যা চেষ্টা করতে পারেন তা হ'ল:

-bash-3.2$ cd $PGDATA
-bash-3.2$ du -sh `ls` > ../pre_sizes

আপনার বিভিন্ন ডাটাবেস স্টাফ তৈরি করুন, তৈরি করুন, ছেড়ে দিন এবং তারপর:

-bash-3.2$ du -sh `ls` > ../post_sizes

ডিস্কের স্পেস কোথায় যাচ্ছে সে সম্পর্কে কিছু ধারণা পেতে।


আমি আপনার মত একই ফলাফলগুলি দেখতে পাচ্ছি - যেমন আমি যখন টেবিলটি যুক্ত করি তখন নতুন ডিবি বেস ডিরেক্টরিতে উপস্থিত হয় এবং আমি যখন এটি সরিয়ে ফেলি, এটি চলে যায়। তবে, ডিরেক্টরিটি পুরো আকারের আকারের (যেমন ~ 9.6 গিগাবাইট) অন্তর্ভুক্ত বলে মনে হচ্ছে না
Jmoney38

@ জেমনি ৩৩ - এজন্য আমি lsডেটাবেস অ্যাড / ড্রপ করার আগে এবং পিজিডিটিএ ডিরেক্টরিতে du পিজিডিটিএ ডিরেক্টরিতে "ডু-শশ " করার পরামর্শ দিয়েছিলাম যা অন্য ডিরেক্টরিগুলি লাফিয়ে ও সীমানা বৃদ্ধি পাচ্ছে তা চিহ্নিত করা উচিত।
gsiems

@ জেমনি 38 - যদি আমি অনুমান করতেই পারি তবে আমি বলব যে পার্থক্যটি $ পিজিডিটিএ / পিজি_লগ এবং / অথবা $ পিজিডিটিএ / পিজি_এক্সলগ ডিরেক্টরিতে পাওয়া যাবে। লগ ফাইলগুলি ক্লাস্টারের জন্য থাকে এবং আপনি যখন কোনও ডেটাবেস ড্রপ করেন তখন কাটা পড়ে না।
gsiems
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.