PostgreSQL ডাটাবেস সংযোগের নম্বরটি কীভাবে সঠিকভাবে পর্যবেক্ষণ করবেন?


10

পোস্টগ্রিস ডাটাবেসে ডাটাবেস সংযোগের সংখ্যা পর্যবেক্ষণের জন্য আমি একটি নাগিও স্ক্রিপ্ট ব্যবহার করার চেষ্টা করেছি এবং আমি এই সমস্যাটিতে পৌঁছেছি: এগুলি বর্তমানে ওপেন-সংযোগ হিসাবে গণনা করা হয় এবং প্রতি 5 মিনিটে পরিমাপ করা হয়।

SELECT sum(numbackends) FROM pg_stat_database;

তবুও, এটি একটি বিশাল সংখ্যক স্বল্প-জীবন সংযোগ মিস করে বলে মনে হচ্ছে, সুতরাং পরিসংখ্যানগুলি বাস্তবতা থেকে অনেক দূরে।

আমি স্ক্রিপ্টটি ম্যানুয়ালি চালানোর চেষ্টা করেছি এবং আমি একে অপর থেকে কয়েক সেকেন্ড দূরে দুটি সংযোগের মধ্যেও বড় পরিবর্তনগুলি লক্ষ্য করেছি।

আমি কীভাবে এই তথ্যটি নির্ভরযোগ্য উপায়ে পেতে পারি? সর্বাধিক (সংযোগের) মতো একটি সময় বিরতির সময় ঘটেছিল।


1
সংযোগগুলির জন্য সময়ের সাথে সাথে সামগ্রিক পরিসংখ্যানগুলি দুর্দান্ত লাগবে তবে আমি মনে করি না পোস্টগ্র্রেএসকিউএল বর্তমানে সেগুলি সংগ্রহ করে। ডক্সে লুক postgresql.org/docs/current/static/monitoring-stats.html বিস্তারিত জানার জন্য।
ক্রেগ রিঞ্জার

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

2
হ্যাঁ, এটি বেশ আকর্ষণীয় সমস্যা। আমি PgBouncerআপনার পোস্টগ্রেএসকিউএল ইনস্ট্যান্সের সামনে দৃ strongly়তার সাথে একটি পরামর্শ দেওয়ার পরামর্শ দিচ্ছি , যখন এটি খুব বেশি ব্যস্ত হয় তখন সেগুলি প্রত্যাখ্যান করার পরিবর্তে এটি সংযোগগুলি সারিবদ্ধ করবে। (হ্যাঁ, এটি নির্বোধ যে পোস্টগ্র্যাস এসকিউএল এটি নিজের কাজটি করতে পারে না তবে এটি কোনও সাধারণ সমাধান নয়; মেলিং তালিকাগুলি অন্তর্নির্মিত পুলিংয়ে অন্তহীন আলোচনা দেখুন)।
ক্রেগ রিঞ্জার

7
লগফাইলে লগিং সংযোগগুলি (ব্যবহার করে log_connections এবং log_disconnections) সম্পর্কিত কী (উদাহরণস্বরূপ csvlog) এবং তারপরে লগফিল থেকে এক্সট্রাক্ট করার জন্য পিজিবেজার বা অনুরূপ কিছু ব্যবহার করুন?
a_horse_with_no_name

2
@ a_horse_with_no_name ভালো পয়েন্ট। এমনকি আপনি কোনও ক্লায়েন্টের সাথে লগগুলি "লেজ" করতে পারেন যা কেবলমাত্র নতুন লগ এন্ট্রিগুলি পড়ে, সংযোগ বিচ্ছিন্ন করে সংহত করে এবং নির্দিষ্ট সময়সীমার সময় পিক সংযোগগুলির একটি নিকট-আসল-সময় রিপোর্ট পেতে সংযোগ করে। সত্যি বলতে, এটি এত জটিল হওয়া উচিত নয়। এক্সএল প্রকল্পের জন্য আমার একটি কাজ ( axleproject.eu ) হ'ল আরও কিছু নিরীক্ষণ বাস্তবায়ন করা এবং আমি এটির মধ্যে এটি ফিট করতে সক্ষম হতে পারি ...
ক্রেগ রিঞ্জার

উত্তর:


1

ওয়ার্ক লোড পর্যবেক্ষণ সরঞ্জামগুলি ব্যবহার করা যেমন pgbadgerডেটাবেস সংযোগ এবং সামগ্রিক লোড যাচাই করার জন্য এটি আরও ভাল । এটি আপনাকে বুঝতে সাহায্য করবে যে কোন ব্যবহারকারীরা তাদের দ্বারা কতটা সময় এবং কী জিজ্ঞাসাবাদগুলি দ্বারা চালিত হচ্ছে তা সংযোগ করছে। Pgbadger ইনস্টল এবং কনফিগার করার বিষয়ে তথ্যের জন্য, এই পৃষ্ঠাটি দেখুন।

আপনি যদি কেবল সক্রিয় সংযোগের সংখ্যাটি পরীক্ষা করতে চান তবে আপনি এটি ব্যবহার করতে পারেন select count(*) from pg_stat_activity where state='active'


0

এটি করার জন্য আপনি স্থানীয়_প্রিয়লোড_লাইবারিগুলির সাথে এক্সটেনশন ব্যবহার করতে পারেন।

এটার মতো কিছু:

#include "postgres.h"
#include <string.h>

#ifdef PG_MODULE_MAGIC
PG_MODULE_MAGIC;
#endif

void _PG_init(void)
{
  SPI_connect();
  int ret = SPI_execute("UPDATE logon_logs SET logged = logged + 1", false, 0);
  SPI_finish();
}

/*
 * _PG_fini
 * Uninstall the hook.
 */
void _PG_fini(void)
{
}

অথবা পরিবর্তে বিজ্ঞপ্তির মাধ্যমে আপডেট করুন


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