এখানে সংক্ষিপ্ত উত্তর হ'ল "নজরদারি এবং পারফরম্যান্স মেট্রিক্স দ্বারা পরিচালিত ট্রায়াল এবং ত্রুটি"।
থাম্বের কয়েকটি সাধারণ নিয়ম রয়েছে যা আপনাকে যে অস্পষ্ট অঞ্চলটি শুরু করা উচিত তা খুঁজে পেতে সহায়তা করবে তবে সেগুলি খুব সাধারণ। বিস্তৃত নির্দেশিকাগুলি "সিপিইউ সংখ্যা এবং স্বতন্ত্রের সংখ্যা হ'ল ডিস্ক" প্রায়শই উদ্ধৃত হয় তবে এটি কেবল একটি অবিশ্বাস্যভাবে মোটা শুরুর পয়েন্ট।
আপনাকে যা করতে হবে তা হ'ল আপনার অ্যাপ্লিকেশনটির জন্য শক্তিশালী পারফরম্যান্স মেট্রিক্স। পরিসংখ্যান রেকর্ডিং শুরু করুন।
এর জন্য ইন্টিগ্রেটেড টুলিংয়ের পথে তেমন কিছুই নেই। নাগিওস check_postgresস্ক্রিপ্ট, ক্যাক্টি সিস্টেমের পারফরম্যান্স কাউন্টার লগিং, পোস্টগ্রিসএসকিউএল পরিসংখ্যান সংগ্রহকারী, ইত্যাদির মতো জিনিস রয়েছে ... তবে এর সব কিছুই একসাথে রাখার মতো খুব বেশি কিছু নেই। দুঃখের বিষয়, আপনাকে নিজেরাই এটি করতে হবে। পোস্টগ্রিসকিউএল পক্ষের জন্য, পোস্টগ্রেএসকিউএল ম্যানুয়ালটিতে পর্যবেক্ষণ দেখুন । কিছু তৃতীয় পক্ষের বিকল্প রয়েছে যেমন এন্টারপ্রাইজবিবি'র পোস্টগ্রিস এন্টারপ্রাইজ মনিটর ।
এখানে উল্লিখিত অ্যাপ্লিকেশন-স্তরের মেট্রিকগুলির জন্য আপনি এগুলি ভাগ করা ডেটা স্ট্রাকচারে বা রেডিসের মতো কোনও বহিরাগত অ-টেকসই ডিবিতে রেকর্ড করতে এবং আপনার পোস্টগ্রিজ এসকিউএল ডিবিতে লেখার আগে সেগুলি একত্রিত করতে চান। সরাসরি পিজিতে লগ ইন করার চেষ্টা করা হলে পরিমাপগুলি রেকর্ড করে তৈরি ওভারহেড দিয়ে আপনার পরিমাপকে বিকৃত করবে এবং সমস্যাটি আরও খারাপ করবে।
সহজ বিকল্পটি হ'ল প্রতিটি অ্যাপ্লিকেশন সার্ভারের একটি সিঙ্গলটন যা আপনি অ্যাপ্লিকেশন পরিসংখ্যান রেকর্ড করতে ব্যবহার করেন। আপনি সম্ভবত সর্বনিম্ন মিনিট, সর্বোচ্চ, এন, মোট এবং গড় আপডেট করতে চান; এইভাবে আপনাকে প্রতিটি স্ট্যাট পয়েন্ট সংরক্ষণ করতে হবে না, কেবল সমষ্টিগুলি। এই সিঙ্গেলটন প্রতিটি এক্স মিনিটে পিজিতে তার সামগ্রিক পরিসংখ্যান লিখতে পারে, একটি কম পরিমাণে হার যা পারফরম্যান্সের প্রভাবটি সর্বনিম্ন হবে।
শুরু করা:
অনুরোধের বিলম্ব কী? অন্য কথায়, অ্যাপ্লিকেশন ক্লায়েন্টের কাছে কোনও প্রতিক্রিয়া না পাওয়া পর্যন্ত ক্লায়েন্টের কাছ থেকে একটি অনুরোধ পেতে কতক্ষণ সময় নেয়। এটিকে পৃথক রেকর্ড হিসাবে না করে সময়ের মধ্যে সামগ্রিকভাবে রেকর্ড করুন। অনুরোধের প্রকার অনুসারে এটি গ্রুপ করুন; বলুন, পৃষ্ঠা দ্বারা।
প্রতিটি ক্যোয়ারী বা ক্যোয়ারির জন্য ডেটাবেস অ্যাক্সেস বিলম্ব কী অ্যাপটি চালায়? যতক্ষণ না ডিবি তথ্য / স্টোরিং তথ্য জিজ্ঞাসা করে এটি সম্পন্ন না করে এবং পরবর্তী কাজটি চালিয়ে যেতে পারে? আবার অ্যাপ্লিকেশনগুলিতে এই পরিসংখ্যানগুলিকে একত্র করুন এবং কেবলমাত্র ডিবিতে সমষ্টি তথ্য লিখুন।
আপনার থ্রুপুট কেমন? যে কোনও এক্স মিনিটে, আপনার অ্যাপ্লিকেশনটি কার্যকর প্রতিটি বড় শ্রেণীর কতগুলি ডিবি দ্বারা সার্ভিস হয়?
X মিনিটের একই সময়ের ব্যাপ্তির জন্য, কত ক্লায়েন্টের অনুরোধ ছিল?
প্রতি কয়েক সেকেন্ড স্যাম্পলিং এবং ডিবিতে একই x মিনিটের উইন্ডোগুলিতে একত্রিত হয়ে কত ডিবি সংযোগ ছিল? তাদের মধ্যে কতজন অলস ছিল? কতজন সক্রিয় ছিল? সন্নিবেশে? আপডেট চান? নির্বাচিত করেন কে? মুছে ফেলেছে? সেই সময়কালে সেখানে কতগুলি লেনদেন হয়েছিল? দেখুন পরিসংখ্যান সংগ্রাহক ডকুমেন্টেশন
আবার একই সময়ের ব্যবধানে নমুনা সংগ্রহ ও একত্রিত করা, হোস্ট সিস্টেমের পারফরম্যান্স মেট্রিকগুলি কী কী ছিল? কতজন পড়ে এবং কতজন ডিস্ক আইও / সেকেন্ড লেখেন? প্রতি সেকেন্ডে মেগাবাইট ডিস্ক পড়ে এবং লেখেন? সিপিইউ ব্যবহার? লোড গড়? র্যাম ব্যবহার?
আপনি এখন আপনার অ্যাপ্লিকেশনটির কার্যকারিতা সম্পর্কে তথ্য শিখতে শুরু করতে পারেন ডেটা সম্পর্কিত, এটি আঁকানো ইত্যাদি। আপনি নিদর্শনগুলি দেখতে শুরু করবেন, বাধা খুঁজে পেতে শুরু করবেন।
আপনি শিখতে পারেন যে আপনার সিস্টেমে বোতল-ঘাড় INSERTএবং UPDATEউচ্চ লেনদেনের হারে সেকেন্ডে মেগাবাইটে কম ডিস্ক আই / ও থাকা সত্ত্বেও। এটি একটি ইঙ্গিত হতে পারে যে আপনার ব্যাটারি ব্যাকড রাইট-ব্যাক ক্যাচিং RAID নিয়ামক বা কিছু উচ্চ-মানের পাওয়ার-সুরক্ষিত এসএসডি দিয়ে আপনার ডিস্ক ফ্লাশ পারফরম্যান্সটি উন্নত করতে হবে। synchronous_commit = offসার্ভার ক্র্যাশে কয়েকটি লেনদেন হারাতে ঠিক আছে এবং এবং / অথবা এ commit_delay, কিছু সিঙ্ক লোড নিতে বন্ধ করে দেওয়াও আপনি ঠিক ব্যবহার করতে পারেন ।
আপনি যখন সেকেন্ডে সংযোগের সংখ্যার বিপরীতে আপনার লেনদেনের গ্রাফ করেন এবং অ্যাপ্লিকেশনটি যে অনুরোধের পরিবর্তিত অনুরোধের হারের জন্য সঠিক হয় আপনি আপনার থ্রুপুট মিষ্টি স্পটটি কোথায় তা সম্পর্কে আরও ভাল ধারণা পেতে সক্ষম হবেন।
আপনার যদি দ্রুত ফ্লাশিং স্টোরেজ (BBU RAID বা দ্রুত টেকসই এসএসডি) না থাকে তবে আপনি সক্রিয়ভাবে সংযোগের সংখ্যার তুলনায় মোটামুটি সংখ্যক বেশি চাইবেন না, সম্ভবত আপনার যত ডিস্কের সংখ্যা রয়েছে 2x এ, সম্ভবত কম রেডের উপর নির্ভর করে কম , ডিস্ক কর্মক্ষমতা ইত্যাদি। এক্ষেত্রে এটি পরীক্ষার এবং ত্রুটির পক্ষেও মূল্যবান নয়; শুধু ফাস্ট ডিস্ক flushes এমন একটির সাথে আপনার সংগ্রহস্থলের সাব-সিস্টেম আপগ্রেড ।
দেখুন pg_test_fsyncসাহায্য করব যে আপনি নির্ধারণ এই জন্য আপনি একটি সমস্যা হতে পারে যদি একটি হাতিয়ার জন্য। বেশিরভাগ পোস্টগ্রিএসকিউএল প্যাকেজগুলি অবদানের অংশ হিসাবে এই সরঞ্জামটি ইনস্টল করে, তাই আপনার এটি সংকলনের প্রয়োজন হবে না। আপনি হাজার অপস দুয়েক / কম পেলে দ্বিতীয় pg_test_fsyncআপনি তারাতারি আপনার স্টোরেজ সিস্টেম আপগ্রেড করতে হবে। আমার এসএসডি-সজ্জিত ল্যাপটপটি 5000-7000 পাবে। আমার 4, ডিস্ক RAID 1000 অ্যারে 7200 আরপিএম এসটিএ ডিস্ক এবং রাইট-থ্রো (নন-রাইটিং-ক্যাচিং) এর সাথে আমার ওয়ার্কস্টেশনটি প্রায় 80 ওপ্স / সেকেন্ডে f_datasync, 20 টি অপস / সেকেন্ডে নেমে আসে fsync(); এটি কয়েকগুণ ধীর । তুলনা করুন: এসএসডি বনাম ওয়ার্কস্টেশন সহ ল্যাপটপটি লেখার মাধ্যমে (নন- রাইটিং -ক্যাচিং) RAID 10 দিয়ে। এই ল্যাপটপের এসএসডি সস্তা এবং আমি বিদ্যুতের ক্ষতিতে লেখার ক্যাশে ফ্লাশ করার জন্য অগত্যা বিশ্বাস করি না; আমি ভাল ব্যাকআপ রাখি এবং এটি আমার যত্ন নেওয়া ডেটার জন্য ব্যবহার করব না। ভাল মানের এসএসডিগুলি আরও ভাল না হলে ঠিক তেমন সঞ্চালন করে থাকে এবং লেখার টেকসই হয়।
আপনার আবেদনের ক্ষেত্রে, আমি আপনাকে দৃ strongly়ভাবে এটি দেখার পরামর্শ দিচ্ছি:
- দ্রুত ফ্লাশ সহ একটি ভাল স্টোরেজ সাবসিস্টেম। আমি এটাকে যথেষ্ট চাপ দিতে পারি না। ভাল মানের পাওয়ার-ব্যর্থ-নিরাপদ এসএসডি এবং / অথবা পাওয়ার-সুরক্ষিত লিখিত-ব্যাক ক্যাশে সহ একটি RAID নিয়ামক।
- ব্যবহার
UNLOGGEDটেবিল ডেটার জন্য আপনি হারান সামর্থ। পর্যায়ক্রমে এটি লগ টেবিলগুলিতে একত্রিত করুন। উদাহরণস্বরূপ, অবরোধবিহীন টেবিলগুলিতে গেমস-ইন-প্রগ্রেস রাখুন এবং সাধারণ টেকসই টেবিলগুলিতে স্কোরগুলি লিখুন।
- একটি ব্যবহার করে
commit_delay(দ্রুত-ফ্লাশিং স্টোরেজ সহ কম দরকারী - ইঙ্গিত)
synchronous_commitলেনদেনের জন্য বন্ধ করা আপনি হারাতে পারবেন (দ্রুত-ফ্লাশিং স্টোরেজ সহ কম দরকারী - ইঙ্গিতের ইঙ্গিত)
- পার্টিশন সারণী, বিশেষত সারণী যেখানে ডেটা "বয়স শেষ" এবং পরিষ্কার হয়ে যায়। পার্টিশনযুক্ত টেবিল থেকে মুছে ফেলার পরিবর্তে একটি পার্টিশন ফেলে দিন।
- আংশিক সূচি
- আপনার তৈরি সূচকের সংখ্যা হ্রাস করা। প্রতিটি সূচকের একটি লেখার ব্যয় থাকে।
- বড় লেনদেনের জন্য ব্যাচিংয়ের কাজ
- মূল ডিবি থেকে রিড লোড নিতে কেবল পঠনযোগ্য হট স্ট্যান্ডবাই প্রতিরূপ ব্যবহার করুন
- ডেটা মেমচেড করা বা রেডিসের মতো ক্যাচিং স্তর ব্যবহার করে যা প্রায়শই পরিবর্তিত হয় বা বাসি হতে পারে। আপনি PostgreSQL টেবিলগুলিতে ট্রিগারগুলি ব্যবহার করে ক্যাশে অবৈধকরণ ব্যবহার করতে
LISTENএবং করতে পারেন NOTIFY।
সন্দেহ হলে: http://www.postgresql.org/support/professional_support/
synchronous_commit = offবা একটিcommit_delay?