PostgreSQL প্রাথমিক ডাটাবেস আকার


12

আমার প্রশ্নের 2 অংশ আছে।

  1. PostgreSQL এ কোনও ডাটাবেসের প্রাথমিক আকার নির্দিষ্ট করার কোনও উপায় আছে কি?
  2. যদি তা না থাকে, সময়ের সাথে সাথে ডাটাবেস বাড়লে আপনি কীভাবে খণ্ডন করবেন?

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

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

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

কোন পয়েন্টার?

সমাধান

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

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

এটি কীভাবে ফিল ফ্যাক্টরের সাথে সম্পর্কিত? 100 এর টেবিল ডিফল্ট ফিল ফ্যাক্টরটি টেবিল পৃষ্ঠাগুলি সম্পূর্ণরূপে প্যাক করে, যার ফলশ্রুতিতে আপডেট করা সারিগুলি রাখার জন্য টেবিল পৃষ্ঠার মধ্যে কোনও স্থান নেই, অর্থাৎ আপডেট হওয়া সারিগুলি মূল সারি থেকে আলাদা টেবিল পৃষ্ঠায় স্থাপন করা হবে। এটি পারফরম্যান্সের জন্য খারাপ, যেমন আমার অভিজ্ঞতা দেখায়। আমার সংক্ষিপ্ত টেবিলগুলি খুব ঘন ঘন আপডেট হওয়ার সাথে সাথে (1500 সারি / সেকেন্ড পর্যন্ত), আমি 20 এর ফিল ফ্যাক্টর সেট করতে পছন্দ করেছি, সারণির 20% সন্নিবেশ করা সারি ডেটার জন্য এবং 80% আপডেট ডেটার জন্য থাকবে for এটি অতিরিক্ত মাত্রায় মনে হতে পারে, আপডেট হওয়া সারিগুলির জন্য প্রচুর পরিমাণে স্থান সংরক্ষিত থাকার অর্থ হল যে আপডেট হওয়া সারিগুলি মূল পৃষ্ঠার একই পৃষ্ঠায় থাকে এবং অটোভ্যাকুয়াম ডিমন অপ্রচলিত সারিগুলি সরাতে চালানোর সময় কোনও টেবিল পৃষ্ঠা পূর্ণ হয় না।

আমার ডাটাবেসটিকে "ঠিক" করতে, আমি নিম্নলিখিতগুলি করেছি।

  1. আমার সংক্ষিপ্ত টেবিলগুলির ফিল ফ্যাক্টরটি 20 এ সেট করুন T আপনি তৈরির সময় টেবিল তৈরির জন্য প্যারামিটারটি পাস করার মাধ্যমে, বা অল্টার টেবিলের মাধ্যমে সত্যের পরে এটি করতে পারেন। আমি নিম্নলিখিত plpgsql কমান্ড জারি করেছি:ALTER TABLE "my_summary_table" SET (fillfactor = 20);
  2. এটি একটি ভ্যাকুয়াম পূর্ণ ইস্যু করেছে, কারণ এটি টেবিল ফাইলটির সম্পূর্ণ নতুন সংস্করণ লিখেছে এবং এভাবে জড়িত হয়ে নতুন ফিল ফ্যাক্টরের সাথে একটি নতুন টেবিল ফাইলটি লিখে

আমার পরীক্ষাগুলি পুনরুদ্ধার করে, যখন অনেক মিলিয়ন সারি থাকা আমার প্রয়োজন তত পরিমাণে ডাটাবেস বৃহত্তর হলেও আমি কোনও কার্যকারিতা হ্রাস পাচ্ছি না।

টিএল; ডিআর - ফাইল বিভাজন কারণ ছিল না, এটি ছিল টেবিল স্পেস বিভাজন। আপনার নির্দিষ্ট ব্যবহারের ক্ষেত্রে উপযুক্ত হওয়ার জন্য এটি টেবিলের ফিল ফ্যাক্টরটি টুইট করে প্রশমিত করা হয়।


আমি সন্দেহ করি যে এটি ফাইল রাইজিং অপারেশন। আমার ধারণা সূচকগুলি বজায় রাখার ফলে সন্নিবেশগুলি ধীর হয়ে যায়। পিজি মেলিং তালিকায় এটি নিয়ে একটি বর্তমান আলোচনা রয়েছে (যদিও সমাধান ছাড়াই): postgresql.1045698.n5.nabble.com/…
a_horse_with_no_name

উত্তর:


4
  1. এর নিকটবর্তী কোনও জিনিস নয় যখন আপনি সার্ভারটি --with-segsize স্যুইচ দিয়ে সংকলন করেন, এটি যদি আপনার টেবিলটি একটি গিগের চেয়ে বেশি স্থান গ্রহণ করে এবং আপনার ফাইল সিস্টেমটি কোনও একক ফাইলকে একটি গিগের ওপরে হ্যান্ডেল করতে পারে তবে এটি সাহায্য করতে পারে। যদি আপনার 20 জিগ অন্তর্ভুক্ত করা হয় তবে আপনি যদি এই স্যুইচটি ব্যবহার না করেন তবে 20 টি ফাইল তৈরি করতে হবে। যদি আপনার ফাইল সিস্টেমটি একটি গিগের উপরে কোনও ফাইল পরিচালনা করতে পারে তবে আপনি এটিকে কেবলমাত্র একটি বড় মূল্যে সেট করতে পারেন সম্ভবত কিছু সুবিধা, সবচেয়ে খারাপ ক্ষেত্রে একটি ছোট সুবিধা see

  2. দেখে নিন এ পিচকারি http://www.postgresql.org/docs/9.1/static/sql-cluster.html এবং FILLFACTOR http://www.postgresql.org/docs/9.1/static/sql-createtable.html , http://www.postgresql.org/docs/9.1/static/sql-createindex.html

নোট করুন যে ফিল্ড্যাক্টর টেবিল এবং সূচি উভয় ক্ষেত্রে প্রয়োগ করা যেতে পারে।


5

খেলার আরও একটি জিনিস রয়েছে যা এখনও আপনার সমীকরণগুলিতে প্রবেশ করে নি: HOT আপডেট । সম্পর্কিত উত্তর:

FILLFACTORযতটুকু কম মনে 20 হয় সেট সেট করা অতিরিক্ত। এটি তার আকারের পাঁচগুণ পর্যন্ত টেবিলটি ফোটায়। যদি HOT আপডেটগুলি কাজ করে তবে আপনার সাধারণত কম হওয়া উচিত নয় ।

ব্যতিক্রমগুলি রয়েছে: HOT আপডেটগুলি কেবল পূর্ববর্তী লেনদেনগুলি থেকে একই বা সমবর্তীগুলির দ্বারা নয়, মৃত টিপলগুলি পুনরায় ব্যবহার করতে পারে। অতএব, ভারী একযোগে লোড বা দীর্ঘ লেনদেন একই বারে একই সারিগুলি আপডেট করে এমন নিম্ন (বা এমনকি নিম্ন) সেটিংসের ওয়ারেন্ট করতে পারে।

যদি আপনার কাছে বড় আপডেট থাকে, একবারে টেবিলের বৃহত অংশগুলি পরিবর্তন করা যায় তবে আপনি সেগুলি কয়েকটি অংশে বিভক্ত করতে চাইতে পারেন, আদর্শভাবে কেবলমাত্র ডেটা পৃষ্ঠায় স্থানীয়ভাবে উপযুক্ত হিসাবে একবারে অনেকগুলি সারি পরিবর্তন করা। তবে এটি অনুমান করা এবং নিয়ন্ত্রণ করা শক্ত।

নোট করুন যে পরিবর্তিত কলামগুলি কোনওভাবেই সূচকগুলিতে জড়িত নেই (ডাটা হিসাবে বা আংশিক সূচীতে শর্ত হিসাবে নয়) কেবলমাত্র হট আপডেটগুলি কাজ করে । আপনি সম্ভবত আপডেট হওয়া কলামগুলিতে সূচকগুলি সহ HOT আপডেটগুলি ব্লক করছেন। যদি সেগুলি ব্যয়যোগ্য হয় তবে এগুলি ছাড়া আপনি আরও সামগ্রিক পারফরম্যান্স পেতে পারেন।

শেষ অবধি , আপনি প্রতি টেবিল অটোভ্যাকুম প্যারামিটার সেট করতে পারেন । আপনি আক্রমণাত্মক সেটিংসের সাথে ভারী আপডেট হওয়া টেবিলগুলিকে লক্ষ্যমাত্রার চেয়ে কম কেবল কিছুটা সারিগুলির শক্ত প্যাকিংয়ের অনুমতি দিতে পারেন FILLFACTOR 20


1
আকর্ষণীয় জিনিস, আমার এটি পড়তে হবে এবং এইচওটি আপডেটগুলি আমার সিস্টেমে কী বোঝায় সে সম্পর্কে আরও ভালভাবে বোঝার চেষ্টা করব।
ক্যাডেন্ট অরেঞ্জ

4

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

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


মনে রাখবেন আপনার অভ্যন্তরীণ PostgreSQL ডাটাবেস খণ্ডিত আছে এবং আপনার বাহ্যিক ফাইল সিস্টেম খণ্ডিত আছে। অভ্যন্তরীণ আমি বিশ্বাস করি ভ্যাকুয়ামের মাধ্যমে এবং ক্লাস্টার এবং ফিল্টার ব্যবহার করে প্রশমন করা যায়। প্রদত্ত ফাইল সিস্টেমের জন্য একটি ডিফ্র্যাগ চালিয়ে ফাইল সিস্টেম পরিচালনা করা যায়। এবং লিনাক্স / ইউনিক্স ফাইল সিস্টেমগুলি কাজের চাপ এবং ফাইল সিস্টেমের ধরণের উপর নির্ভর করে কিছু সময় খণ্ডিত হয়ে যেতে পারে।
কুবেরচাঁন

আজকাল এনটিএফএসের সাথে ফাইল সিস্টেমের খণ্ডন করা আসলেই বড় সমস্যা নয়।
a_horse_with_no_name

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