লেখার পারফরম্যান্সের জন্য PostgreSQL কনফিগার করা


30

আমার পোস্টগ্রিএসকিউএল সার্ভারগুলির মধ্যে একটি বেশ কয়েকটি (১-৩) ডাটাবেস হোস্ট করে যা একটানা ডেটা স্ট্রিম গ্রহণ করে। ডেটা বিশেষভাবে কাঠামোযুক্ত নয়, এটি বর্তমান সময়ের এবং সেই নির্দিষ্ট তাত্ক্ষণিকতার জন্য বিভিন্ন পর্যবেক্ষণ করা ডেটার পরিমাণ। তথ্য হার মোটামুটি বেশি; এটি একটি ডাটাবেসের জন্য এক গিগাবাইটের দিনে, অন্যটির জন্য দশমাংশের প্রায় কাজ করে। আমি আশা করি না যে এই হারটি বাড়বে। পঠন কর্মক্ষমতা অনেক কম অগ্রাধিকার এবং বর্তমানে গ্রহণযোগ্য।

লগগুলিতে আমার এই বার্তাটি রয়েছে:

LOG:  checkpoints are occurring too frequently (15 seconds apart)
HINT:  Consider increasing the configuration parameter "checkpoint_segments".

এই মানটি বর্তমানে 16 এ সেট করা হয়েছে, যা সৌজন্যে pgtune

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

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


আপনি কি আপনার সংস্করণ এবং আপনার স্টোরেজ হার্ডওয়্যার সম্পর্কে কিছু বিশদ পোস্ট করতে পারেন?
জ্যাক ডগলাস

আপনি checkpoint_segmentsসুপারিশ হিসাবে বৃদ্ধি করেছেন? কি হলো?
a_horse_with_no_name

3
এই ধরণের প্রশ্নের আরেকটি দুর্দান্ত উত্স হ'ল গ্রেগরি স্মিথের বই পোস্টগ্র্যাসকিউএল 9.0 উচ্চ পারফরম্যান্স
জেপি

উত্তর:


24

1 গিগাবাইট কোনও দিন কোনও লেখার বোঝার বেশি নয়। দিন জুড়ে ছড়িয়ে পড়ে, যা এক সেকেন্ডে প্রায় 50kbytes আসে। একটি ধীর ইউএসবি থাম্ব ড্রাইভ এটি পরিচালনা করতে পারে। আমি ধরে নিচ্ছি যে এটি আরও ফেটে গেছে। A_horse_with_no_name এর পরামর্শ অনুসারে, চেকপয়েন্টের বিভাগগুলি বৃদ্ধি করুন। 100 বা তাই সাধারণ বাইরে নয়।

তারপরে আপনার checkpoint_timeout1 ঘন্টা বাড়ান , পাশাপাশি আপনার checkpoint_completion_target1.0 (100%) এর কাছাকাছি কিছু বাড়ানোর দিকে নজর দিন । সমাপ্তির লক্ষ্য পোস্টগ্র্রেএসকিউএলকে বলে যে পটভূমিতে কতটা আগ্রাসীভাবে লিখতে হবে যাতে চেকপয়েন্ট চালানোর আগে এটি x% সম্পূর্ণ হয়, যা ডাবল থেকে সমস্ত ডেটা একবারে লেখার জন্য বাধ্য করে এবং ঘটনাটি ঘটে যখন সিস্টেমটিকে ক্রলটিতে ধীর করে দেয়।

আপনি সাধারণত এটি 100% এ সেট না করার কারণটি হ'ল এটি একই ব্লকে একাধিকবার লেখার পক্ষে প্রচলিত বিষয়, এবং দেরি করে ওয়াল মূল স্টোরকে লিখে দেয়, আপনি একই কারণটি অকারণে দু'বার লেখা থেকে বিরত রাখেন।

যদি এটির অসম্ভাব্যতা থাকে তবে আপনি আপনার টাইমআউট হওয়ার আগে একবারে একই ব্লকে লিখে যাবেন, অর্থাৎ আপনি যা কিছু করেন তা সন্নিবেশ করানো হয় তবে এটি বেশ উচ্চতর সেট করে সেটাকে এটি 0.9 বা আরও উন্নত করতে বুদ্ধিমান হয়ে যায়। সবচেয়ে খারাপটি ঘটবে তা হ'ল আপনি নিজের লেখার চেয়ে একটু বেশি বার লিখবেন তবে চেকপয়েন্টগুলির প্রভাব হ্রাস পাবে।


লেখার পরিমাণটি প্রায় সম্পূর্ণ অভিন্ন: এটি হার্ডওয়্যার মনিটরিং সফটওয়্যারটির ডেটা স্টোর যা প্রতি সেকেন্ড, একটানা 24x7 পোল করে। আমি সঠিক ডেটার রেট গণনা করতে পারতাম, তবে প্রোগ্রামাররা মনিটর পয়েন্টগুলি যুক্ত এবং সরানোর সাথে সাথে এটি কিছুটা ওঠানামা করে।
ড্যানিয়েল লিয়ন্স

1
ঠিক আছে, যদি হারটি প্রতিদিন 1 জি হয় এবং এটি মসৃণ হয় তবে প্রায় কোনও সাবসিস্টেম রাইটিং লোড পরিচালনা করতে পারে, আপনি কেবল এটি মসৃণ রাখতে চান, যা চেকপয়েন্ট সমাপ্তির লক্ষ্যমাত্রা 1.0 এর কাছাকাছি সেট করা হচ্ছে এবং একটি দীর্ঘ চেকপয়েন্টের সময়সীমা আপনাকে পাওয়া উচিত।
স্কট মার্লো

10

খুব 'লিখন ভারী' সিস্টেমে আপনার উচ্চ ক্রিয়াকলাপ চলাকালীন হারের দ্বারা সীমাবদ্ধ হওয়ার সম্ভাবনা রয়েছে।

যদি আপনি সত্যিই "একটি ব্যর্থতায় কিছু সাম্প্রতিক ডেটা হারাতে স্বীকার করতে" পারেন তবে আপনি সিঙ্ক্রোনাস কমিট বন্ধ করতে পারেন যা:

যখন লেনদেনের স্থায়িত্ব সম্পর্কে নির্ভুলতার চেয়ে পারফরম্যান্স বেশি গুরুত্বপূর্ণ তখন একটি দরকারী বিকল্প হতে পারে

আপনি যদি নিজের হার্ডওয়্যার পরিবর্তন করতে সক্ষম হন তবে লেখাগুলি অনুকূল করার জন্য আপনি এগুলির কোনওটি বিবেচনা করতে পারেন:

  • RAID5 ওপরে RAID10
  • প্রচুর স্পিন্ডেল (উদাহরণস্বরূপ 3.5 এর পরিবর্তে 2.5 "এর অর্থ হতে পারে)
  • এস.এ.এস.এ.
  • 15 কে 10K ড্রাইভের ওপরে
  • এসএসডি

--edit

@ স্কট এর দুর্দান্ত উত্তরের উপর আপনার মন্তব্যের ভিত্তিতে : "লেখার পরিমাণটি প্রায় সম্পূর্ণ অভিন্ন" এবং "50kbytes এক সেকেন্ড" এর অন্তর্নিহিত ডেটা হার, আমি সন্দেহ করি যে আপনাকে ডেটা ক্ষতিগ্রস্থ হওয়ার ঝুঁকিপূর্ণ এমন কিছু করতে হবে। সম্ভবত এটি আপনার অন্যান্য কনফিগারেশন প্যারামিটারগুলির মধ্যে কী সেট করা আছে তা জানতে সহায়তা করবে।


3
পারফরম্যান্সের বিষয়ে যদি লিখিত হয় তবে ওএস এবং কাটানো হার্ড ড্রাইভের মধ্যে একটি ব্যাটারি ব্যাকড কন্ট্রোলার একটি বিশাল পার্থক্য আনতে পারে।
স্কট মার্লো

5

আপনি আপনার প্রতিশ্রুতিগুলির ফ্রিকোয়েন্সি / আকারও পরীক্ষা করতে পারেন: আমি সম্প্রতি একটি ইস্যুতে দৌড়েছি যেখানে আমি একক লেনদেনে> 1 মিলিয়ন রেকর্ড আপডেট করার চেষ্টা করছি। আমি ওপি দ্বারা বর্ণিত অনুরূপ লগ বার্তা পেয়েছি, তবে লেনদেন বেশ কয়েক ঘন্টা পরেও শেষ করতে পারেনি। আমি যখন লেখাটি কয়েকটি ছোট লেনদেনে (10,000 রেকর্ড বা তার বেশি) বিভক্ত করেছিলাম তখন প্রয়োজনীয় সময়টি প্রায় 15 মিনিটের মতো নেমে যায়।

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

Http://www.postgresql.org/docs/9.3/static/wal-configration.html আরও দেখুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.