এখানে বেশ কয়েকটি ভুল ধারণা রয়েছে:
নাল বিটম্যাপ হয় না গাদা tuple হেডার অংশ। প্রতি ডকুমেন্টেশন:
একটি স্থির আকারের শিরোলেখ রয়েছে (বেশিরভাগ মেশিনে 23 বাইট দখল করা), তার পরে একটি alচ্ছিক নাল বিটম্যাপ ...
আপনার 32 টি অপ্রয়োগযোগ্য কলাম দুটি কারণে সন্দেহজনক নয়:
নাল বিটম্যাপটি সারি প্রতি যুক্ত করা হয় এবং কেবলমাত্র সারিটিতে কমপক্ষে একটি আসল NULLমান থাকে। নলাবল কলামগুলির সরাসরি প্রভাব নেই, কেবল আসল NULLমানগুলি। যদি নাল বিটম্যাপ বরাদ্দ করা হয় তবে এটি সর্বদা সম্পূর্ণ বরাদ্দ হয় (সমস্ত বা কিছুই নয়)। নাল বিটম্যাপের আসল আকারটি প্রতি কলামে 1 বিট, পরবর্তী বাইট পর্যন্ত গোল হয় । প্রতি বর্তমান স্যুইস কোড:
#define BITMAPLEN(NATTS) (((int)(NATTS) + 7) / 8)
নাল বিটম্যাপটি হ্যাপ টিপল শিরোনামের পরে বরাদ্দ করা হয় এবং তার পরে একটি Oচ্ছিক ওআইডি এবং তারপরে ডেটা সারি করা হয়। একটি ওআইডি বা সারি ডেটার শুরু t_hoffশিরোনাম দ্বারা নির্দেশিত হয় । প্রতি মন্তব্য উত্স কোড :
মনে রাখবেন যে t_hoff অবশ্যই MAXALIGN এর একাধিক হতে হবে।
হ্যাপ টিপল শিরোলেখের পরে একটি ফ্রি বাইট রয়েছে, যা 23 বাইট দখল করে। সুতরাং 8 টি কলাম পর্যন্ত সারিগুলির নাল বিটম্যাপ কার্যকরভাবে কোনও অতিরিক্ত ব্যয় ছাড়াই আসে। সারণীতে নবম কলামের সাথে আরও একটি typically৪ টি কলাম সরবরাহ করার জন্য আরও t_hoffএকটি MAXALIGN(সাধারণত 8) বাইট উন্নত করা হয়েছে । সুতরাং পরবর্তী সীমানা 72 কলামে হবে।
পোস্টগ্রিসএসকিউএল ডাটাবেস ক্লাস্টারের নিয়ন্ত্রণ তথ্য প্রদর্শন করতে ( MAXALIGNউদাহরণ সহ ), উদাহরণস্বরূপ একটি ডেবিয়ান মেশিনে পোস্টগ্রাস 9.3 ইনস্টল করার জন্য:
sudo /usr/lib/postgresql/9.3/bin/pg_controldata /var/lib/postgresql/9.3/main
আপনার উদ্ধৃত সম্পর্কিত উত্তরগুলিতে আমি নির্দেশাবলী আপডেট করেছি ।
আপনার সমস্ত ALTER TABLEবক্তব্য পুরো টেবিলের পুনর্লিখনকে (যা সম্ভবত এটি করে, কোনও ডেটা টাইপ পরিবর্তন করে) ট্রিগার করে, 250 কে আসলেই তেমন কিছু না এবং কোনও অর্ধপথের শালীন মেশিনে কয়েক সেকেন্ডের ব্যাপার হবে (যদি না সারি অস্বাভাবিকভাবে বড় হয়) । 10 মিনিট বা তারও বেশি সম্পূর্ণ ভিন্ন সমস্যা নির্দেশ করে। আপনার বক্তব্যটি সম্ভবত টেবিলে একটি লক পাওয়ার জন্য অপেক্ষা করছে।
এন্ট্রিগুলির ক্রমবর্ধমান সংখ্যার pg_stat_activityঅর্থ আরও উন্মুক্ত লেনদেন - টেবিলের একযোগে অ্যাক্সেস নির্দেশ করে (সম্ভবত:) যা অপারেশন শেষ হওয়ার জন্য অপেক্ষা করতে হবে।
অন্ধকারে কয়েকটি শট
সম্ভাব্য টেবিল ফোটা পরীক্ষা করুন, একটি নম্র VACUUM mytableবা আরও আক্রমণাত্মক চেষ্টা করুন VACUUM FULL mytable- যা একই সমঝোতার সমস্যাগুলির মুখোমুখি হতে পারে, যেহেতু এই ফর্মটিও একটি এক্সক্লুসিভ লক অর্জন করে। পরিবর্তে আপনি pg_repack চেষ্টা করতে পারেন ...
আমি সূচকগুলি, ট্রিগারগুলি, বিদেশী কী বা অন্যান্য সীমাবদ্ধতাগুলি বিশেষত কলামের সাথে জড়িতদের দ্বারা সম্ভাব্য সমস্যাগুলি পর্যবেক্ষণ করে শুরু করব। বিশেষত কোনও দূষিত সূচক জড়িত থাকতে পারে? চেষ্টা করুন REINDEX TABLE mytable;বা DROPতাদের সকল এবং ALTER TABLE একই লেনদেনের পরে তাদের আবার যুক্ত করুন ।
রাতে বা যখনই খুব বেশি বোঝা নেই তখন কমান্ড চালানোর চেষ্টা করুন।
একটি ব্রুট ফোর্স পদ্ধতি হ'ল সার্ভারের অ্যাক্সেস বন্ধ করা, তারপরে আবার চেষ্টা করুন:
এটি পিন করতে সক্ষম না হয়ে বর্তমান সংস্করণে আপগ্রেড করা বা বিশেষত আসন্ন 9.4 এ সহায়তা করতে পারে। বড় টেবিলের জন্য এবং লকিংয়ের বিশদের জন্য বেশ কয়েকটি উন্নতি হয়েছে। তবে আপনার ডিবিতে যদি কিছু ভাঙা থাকে তবে আপনার সম্ভবত প্রথমে এটি বের করা উচিত।
SET NOT NULLপ্রকারটি পরিবর্তন করে না, এটি কেবল একটি সীমাবদ্ধতা যুক্ত করে - তবে সীমাবদ্ধতার বিষয়টি অবশ্যই টেবিলের বিপরীতে পরীক্ষা করা উচিত এবং এর জন্য একটি পূর্ণ টেবিল স্ক্যান প্রয়োজন requires 9.4 দুর্বল লকগুলি নিয়ে এর মধ্যে কয়েকটি ক্ষেত্রে উন্নতি করে তবে এটি এখনও বেশ হেভিওয়েট।