পারফর্মােন্স ও নিরাপত্তা নিরীক্ষণে Percona Monitoring and Management (PMM) এর কার্যকারিতা


[ পারফর্মােন্স ও নিরাপত্তা নিশ্চিত করার জন্য ডাটাবেইজ মনিটরিং অত্যন্ত গুরুত্বপূর্ণ। Percona Monitoring and Management (PMM) টুলটি এই কাজে অসাধারণ। বিভিন্ন এনভায়রনমেন্টের (Production, UAT, Testing, Development) ডাটাবেইজ সার্ভারগুলোকে কেন্দ্রীয় PMM সার্ভার দিয়ে সহজেই মনিটর করা যায়। CPU, RAM ব্যবহার, slow query, replication status সহ অসংখ্য মেট্রিকস পর্যবেক্ষণ করে সম্ভাব্য সমস্যা আগেই ধরা সম্ভব। PMM আক্রমণ শনাক্ত করে না, তবে অস্বাভাবিক গতিবিধি (যেমন, CPU/RAM usage বৃদ্ধি) সনাক্ত করে সতর্ক করে। এটি একটি কার্যকরী ও cost-effective সমাধান। পারফর্মেন্সমনিটরিং ডাটাবেইজ PMM Percona Observability blog ]

PERCONA Monitoring and Management Observability Tool

Database monitoring, Blog-1

ডেটাবেইজ সার্ভারসমূহের নিরাপত্তা একটি গুরুত্বপূর্ণ বিবেচ্য বিষয়। বিভিন্ন সময় হ্যাকার বা অসাধু ব্যবহারকারীরা ডেটাবেইজ আক্রমণ করার চেষ্টা করতে পারে, যেমন brute-force login, SQL injection বা বড় আকারের abnormal query চালিয়ে সার্ভারকে ক্র্যাশ করানো। এই ধরনের আক্রমণ সরাসরি "ভিজিবল" না হলেও, Percona Monitoring and Management (PMM) আমাদেরকে কিছু গুরুত্বপূর্ণ ইনডিকেটরের মাধ্যমে এই অস্বাভাবিক আচরণগুলো বুঝতে সাহায্য করে। উদাহরণস্বরূপ, হঠাৎ করে CPU বা RAM usage অস্বাভাবিকভাবে বেড়ে যাওয়া, login failure-এর সংখ্যা বৃদ্ধি পাওয়া, বা slow query-এর হার হঠাৎ অনেক বেশি হয়ে যাওয়া—এসবই আক্রমণের আভাস দিতে পারে। যদিও PMM সরাসরি আক্রমণ শনাক্ত বা ব্লক করতে পারে না, তবে এসব সিগন্যাল পর্যবেক্ষণ করে নিরাপত্তা ব্যবস্থা গ্রহণের পথ সুগম করে। তাই, নিরাপদ ডেটাবেইজ পরিচালনার জন্য PMM একটি কার্যকরী পর্যবেক্ষণমূলক টুল হিসেবে ব্যবহার করা যায়, বিশেষ করে যখন এটি auditing tools বা intrusion detection সিস্টেমের সঙ্গে একত্রে ব্যবহৃত হয়। আমাদের প্রতিষ্ঠানের Production, UAT, Testing , Development, environment আলাদা আলাদা ডাটাবেইজ সার্ভার রয়েছে, যেগুলো ভিন্ন ভিন্ন নেটওয়ার্কে স্থাপিত। এই সার্ভারগুলোর CPU ব্যবহার, RAM ব্যবহারের পরিমাণ, MySQL স্লো কুয়েরি,replication status ইত্যাদি মনিটর করা একটি চ্যালেঞ্জের বিষয় । তবে, Percona Monitoring and Management (PMM) ব্যবহার করার মাধ্যমে এই সমস্ত পর্যবেক্ষণ কার্যক্রম একত্রিতভাবে এবং সহজে পরিচালনা করা সম্ভব, যা আমাদের মনিটরিং প্রক্রিয়াকে অনেক বেশি কার্যকরী করতে পারে, এবং ভবিষ্যৎ সমস্যা গুল খুব সহজ ভাবে এড়ান সম্ভব।

এই ভিন্ন নেটওয়ার্ক ভিত্তিক সার্ভারগুলো মনিটর করার জন্য কি প্রতিটি পরিবেশে আলাদা আলাদা PMM Server সেটআপ করতে হবে? এর উত্তর হলো—না, আলাদা আলাদা PMM Server ইন্সটল না করেও একটি কেন্দ্রীয় (centralized) PMM Server ব্যবহার করে সবগুলো environment মনিটর করা যায়। এক্ষেত্রে সেই PMM Server কে এমনভাবে স্থাপন করতে হবে যাতে প্রতিটি environment (প্রোডাকশন, ইউএটি ও ডেভেলপমেন্ট) থেকে তা reach করা যায়। এই কাজটি করার জন্য কয়েকটি পন্থা রয়েছে। একটি পদ্ধতি হচ্ছে PMM Server কে একটি পাবলিক ক্লাউড বা DMZ (Demilitarized Zone) নেটওয়ার্কে স্থাপন করা, যেখানে সমস্ত environment থেকে ইনবাউন্ড কানেকশন সম্ভব। অপর বিকল্প হলো VPN ব্যবহার করে সব environment-কে একে অপরের সাথে securely সংযুক্ত করে ফেলা। এছাড়াও চাইলে environment অনুযায়ী আলাদা আলাদা PMM Server ব্যবহারের মাধ্যমেও মনিটরিং করা যায়, তবে এতে maintenance overhead বেশি হয় এবং সব ডেটা একত্রে দেখা যায় না। সর্বোপরি, একটি কেন্দ্রীয় PMM Server-এর মাধ্যমে ভিন্ন ভিন্ন নেটওয়ার্কে অবস্থিত ডাটাবেইজ সার্ভারগুলো মনিটর করাটা অধিক কার্যকর, কস্ট-ইফেক্টিভ এবং long-term scaleable সমাধান।

PMM Observability tool ব্যবহার করে আমরা যেসকল metrix পর্যবেক্ষণ করতে পারি তা উল্ল্যেখ করা হলোঃ

PERCONA Database Terminology: Overview:

Min MySQL Uptime: সবগুলো মনিটর করা MySQL সার্ভারের মধ্যে যে সার্ভারটি সবচেয়ে কম সময় ধরে চালু আছে, তার আপটাইম (চালু থাকা সময়) কত। Max MySQL Uptime: MySQL সার্ভার যখন চালু হয়, তখন থেকে একটানা যতক্ষণ পর্যন্ত এটি চলতে থাকে, সেই সময়টাকে uptime বলা হয়।Max MySQL Uptime মানে হলো — এখন পর্যন্ত সবচেয়ে বেশি সময় ধরে সার্ভার চালু ছিল। Total Current QPS: Total Current QPS (Queries Per Second) মানে হলো:একটি নির্দিষ্ট মুহূর্তে আপনার MySQL সার্ভার প্রতি সেকেন্ডে গড়ে কতটি Query (SELECT, INSERT, UPDATE, DELETE ইত্যাদি) প্রক্রিয়াজাত করছে। Example :

Total InnoDB Buffer Pool Size: হচ্ছে MySQL এর InnoDB স্টোরেজ ইঞ্জিনের জন্য বরাদ্দকৃত RAM (মেমোরি) এর পরিমাণ, যেখানে frequently accessed data ও index রাখা হয় যাতে ডিস্ক অ্যাক্সেস কম লাগে।InnoDB Buffer Pool হলো MySQL-এর একটি অংশ, যা RAM ব্যবহার করে ডেটা ও ইনডেক্স অস্থায়ীভাবে সংরক্ষণ করে।

Connection Details:

Top MySQL Used Connection: কোন কোন ইউজার বা অ্যাপ সবচেয়ে বেশি কানেকশন তৈরি করছে বা চালু রাখছে। Top MySQL Client Threads: MySQL সার্ভারে কোন কোন client (user বা host/IP) সবচেয়ে বেশি thread তৈরি করছে বা চালাচ্ছে, অর্থাৎ তাদের কতগুলো অ্যাকটিভ বা রানিং কাজ (query/process) চলছে। Top MySQL Thread Cached বলতে বোঝায়: MySQL কতবার ক্যাশ করা থ্রেড ব্যবহার করেছে এবং এই ক্যাশ থেকে থ্রেড ব্যবহার করার হার কেমন। Top MySQL Used Connections:MySQL সার্ভারে কোন কোন ইউজার বা অ্যাপ্লিকেশন সবচেয়ে বেশি সংখ্যক কানেকশন তৈরি করছে বা ব্যবহার করছে। এটা বোঝা গুরুত্বপূর্ণ কারণ অতিরিক্ত কানেকশন সার্ভারের উপর লোড বাড়াতে পারে এবং পারফরম্যান্স খারাপ করতে পারে।অতিরিক্ত বা অপ্রয়োজনীয় কানেকশন সার্ভারের RAM ও CPU খরচ বাড়ায়।Connection leak থাকলে detect করা যায়।কে কতটুকু resource ব্যবহার করছে, তা বোঝা যায়। Sleep Connection monitoring করা খুবই জরুরি। Aborted Connection: মানে এমন এক কানেকশন যা শুরু হতে পারেনি বা শুরু হয়ে মাঝপথে ভেঙে গেছে।

Queries and Questions Details:

Top 5 MySQL Queries: Top 5 MySQL Queries বলতে বোঝায় সেই ৫টি SQL query যা আপনার সার্ভারে সবচেয়ে বেশি execution time, frequency (বারবার চলে) বা resources (CPU, I/O) ব্যবহার করছে। MySQL QPS: QPS মানে হলো Queries Per Second, অর্থাৎ প্রতি সেকেন্ডে MySQL সার্ভারে কতটি SQL query চলেছে বা execute হয়েছে — সেটা বোঝায়। Top 5 Data Reads: Top 5 Data Reads বলতে বোঝায় এমন ৫টি SQL query বা operation যা সবচেয়ে বেশি পরিমাণ data read করছে — অর্থাৎ সবচেয়ে বেশি rows scanned, read, or retrieved হচ্ছে এগুলোর মাধ্যমে।

InnoDB I/O details :

Top 5 MySQL Questions: Top 5 MySQL Questions বলতে বোঝানো হয় সার্ভারে সবচেয়ে বেশি চলা SQL Query বা Statement গুলোকে — যেগুলো সবচেয়ে বেশি "asked" বা Executed হয়েছে। এটি মূলত Query Analytics এর একটি অংশ, যা দিয়ে বোঝা যায় কোন প্রশ্ন (SQL Statement) বারবার চালানো হচ্ছে। Top 5 Data Writes: বলতে বোঝানো হয় এমন ৫টি SQL query বা operation, যেগুলো সবচেয়ে বেশি পরিমাণে data write (যেমন INSERT, UPDATE, DELETE) করছে MySQL সার্ভারে। Top 5 Fsyncs: Fsync (File Synchronization) হল এমন একটি প্রক্রিয়া যা নিশ্চিত করে যে ডেটা ডিস্কে স্থায়ীভাবে লেখা হয়েছে। যখন MySQL একটি write operation করে (যেমন INSERT, UPDATE, DELETE), তখন fsync() ব্যবহার করে নিশ্চিত করা হয় যে সেই ডেটা সত্যিই ডিস্কে সেভ হয়েছে। Top 5 Data Fsyncs মানে সেই Query বা Operation গুলো যেগুলো সবচেয়ে বেশি fsync বা disk flush করেছে। MySQL Temporary Objects: Temporary Objects MySQL ডাটাবেসে এমন অস্থায়ী (temporary) বস্তু বা structures যা শুধুমাত্র একটি নির্দিষ্ট session বা query execution চলাকালীন সময় ব্যবহার হয় এবং শেষে auto-delete হয়ে যায়। এসব বস্তু সাধারণত ডাটাবেসের মধ্যে কিছু intermediate কাজের জন্য ব্যবহার করা হয়, যেমন complex calculations, sorting, or temporary data storage। Top 5 MySQL Selects: Top 5 MySQL SELECT এর মানে হলো এমন ৫টি SQL SELECT query যেগুলো বর্তমানে MySQL সার্ভারে সবচেয়ে বেশি চালানো হচ্ছে বা সবচেয়ে বেশি সময় নিয়ে কার্যকর হচ্ছে। Top 5 MySQL sorts: MySQL-এ SORT হল এমন একটি অপারেশন যা ডেটাকে নির্দিষ্ট একটি ক্রমে সাজানোর জন্য ব্যবহৃত হয়। সাধারনত, ORDER BY clause ব্যবহার করে ডেটা সাজানো হয়, যা বিশেষ করে খুব বড় টেবিল বা ডেটা সেটের জন্য গুরুত্বপূর্ণ। SORT অপারেশনটি ডেটাবেস সার্ভারের পারফরম্যান্সের উপর প্রভাব ফেলতে পারে, বিশেষ করে যদি proper indexing না থাকে।Top 5 MySQL Sorts হল সেরকম SORT অপারেশনগুলি, যেগুলি সবচেয়ে বেশি সময় নিচ্ছে বা বেশি resources (CPU, Memory) খাচ্ছে।

Lock Tables: Top 5 MySQL Table Locks: MySQL table lock হল একটি লকিং মেকানিজম যা ডেটাবেসের টেবিলগুলোকে একযোগভাবে এক্সেস করার জন্য ব্যবহৃত হয়। যখন একটি টেবিল লক হয়, তখন অন্য কোনও কনসাল্ট বা আপডেট অপারেশন সেই টেবিলটি পরিবর্তন করতে পারে না যতক্ষণ না প্রথম অপারেশনটি সম্পন্ন হয়। এই লকিং মেকানিজমটি অ্যাপ্লিকেশন বা ডাটাবেসের পারফরম্যান্সে প্রভাব ফেলতে পারে, বিশেষ করে যদি কোনো টেবিল অনেক সময় ধরে লক থাকে।Top 5 MySQL Table Locks সেই টেবিলগুলোকে বোঝায় যেগুলোর উপর সবচেয়ে বেশি সময় ধরে বা সবচেয়ে বেশি ফ্রিকোয়েন্টলি লকিং অপারেশন হয়ে থাকে। এই ধরনের টেবিল লকগুলি পারফরম্যান্স এবং সার্ভারের রিসোর্স ব্যবহারের ওপর প্রভাব ফেলতে পারে।

Network Details :

Top 5 MySQL incoming Network Traffic: MySQL সার্ভারের কাছে যে সমস্ত ডেটা নেটওয়ার্কের মাধ্যমে আসে, অর্থাৎ ক্লায়েন্ট থেকে MySQL সার্ভারে যে ডেটা পাঠানো হচ্ছে, তার পরিমাণ। এই মেট্রিকটি সার্ভারের নেটওয়ার্ক ট্রাফিকের পরিমাণ বোঝাতে ব্যবহৃত হয় এবং এটি সার্ভারের পারফরম্যান্স এবং কার্যক্ষমতা বুঝতে সাহায্য করে। Top 5 MySQL Outgoing Traffic: MySQL সার্ভার থেকে যে সমস্ত ডেটা ক্লায়েন্টদের কাছে পাঠানো হচ্ছে, অর্থাৎ সার্ভার থেকে ক্লায়েন্টের দিকে যে ডেটা ট্রান্সফার হচ্ছে, তার পরিমাণ। এই মেট্রিকটি সার্ভারের নেটওয়ার্ক ট্রাফিকের পরিমাণ বুঝতে সাহায্য করে এবং সার্ভারের কার্যক্ষমতা বা লোড সম্পর্কে ধারণা দেয়।

Query Cache Details : MySQL Query Cache Size: একটি গুরুত্বপূর্ণ কনফিগারেশন ভেরিয়েবল যা MySQL সার্ভারের কুয়েরি ক্যাশের আকার নির্ধারণ করে। কুয়েরি ক্যাশিং হল এমন একটি প্রযুক্তি যা একই কুয়েরি বারবার চালানোর সময় ডেটাবেস থেকে রিটার্ন করা ফলাফলগুলো ক্যাশে সঞ্চয় করে, যাতে পরবর্তী সময়ে একই কুয়েরি চালানোর সময় ফলাফল দ্রুত পাওয়া যায় এবং সার্ভারের লোড কমে যায়। MySQL Used Query Cache: ক্যাশের অংশ যা MySQL সার্ভারের Query Cache-এ বর্তমানে ব্যবহৃত বা সংরক্ষিত কুয়েরি ফলাফল বোঝায়। যখন একটি কুয়েরি চালানো হয়, এবং তার ফলাফল Query Cache-এ সফলভাবে সংরক্ষিত হয়ে থাকে, তখন পরবর্তী সময়ে একই কুয়েরি চালানো হলে সার্ভার ক্যাশ থেকে সরাসরি ফলাফল প্রদান করে। এটি সার্ভারের পারফরম্যান্স বাড়াতে সাহায্য করে, কারণ একাধিক বার একই কুয়েরি চালানোর পরিবর্তে ফলাফল দ্রুত সরবরাহ করা হয়।

Files Details :

Top 5 MySQL File Openings: বলতে মূলত সেই ফাইলগুলোকে বোঝায় যেগুলো সবচেয়ে বেশি অ্যাক্সেস হচ্ছে, বিশেষ করে রিড বা রাইট অপারেশনের মাধ্যমে। এই মেট্রিকটি মনিটর করে আপনি ফাইল অ্যাক্সেসের সমস্যা যেমন ধীর রিড বা রাইট অপারেশন, অথবা অতিরিক্ত ফাইল ওপেনিং শনাক্ত করতে পারেন, যা অকার্যকর কোয়েরি এক্সিকিউশনের ইঙ্গিত হতে পারে।

Table Opening Details: Lowest 5 Open Cache Hit Ratio: Open Cache Hit Ratio বুঝায় MySQL-এ কতবার কোনো টেবিল ক্যাশ থেকে ওপেন হচ্ছে, এবং কতবার নতুন করে ফাইল সিস্টেম থেকে ওপেন করতে হচ্ছে। এই রেশিও যত বেশি, পারফরম্যান্স তত ভালো।যে ৫টি টেবিল বা কনফিগারেশন ক্যাশ থেকে কম অ্যাক্সেস পাচ্ছে — অর্থাৎ, প্রায়ই নতুন করে ফাইল সিস্টেম থেকে টেবিল ওপেন করতে হচ্ছে।

Posted by Md. Ruhul Amin, 1 month ago

More Blogs

author-image
Author
Md. Ruhul Amin
blog-image
ছোট, নিরাপদ ও দ্রুত: ডকার ইমেজ তৈরির সর্বোত্তম অনুশীলন

ডকার ইমেজের সাইজ ছোট রাখা অত্যন্ত গুরুত্বপূর্ণ। নির্দিষ্ট ভার্সন ব্যবহার (যেমন `FROM node:18`), `-slim` ব্যবহার করে বেইজ ইমেজের আকার কমানো, `.dockerignore` ফাইল ব্যবহার করে অপ্রয়োজনীয় ফাইল...

1 month ago

Read more
blog-image
ডকার মাল্টি-স্টেজ বিল্ড: ছোট, নিরাপদ ও দ্রুত ইমেজ তৈরির কৌশল

১০ জিবি সার্ভারে ২ জিবি ডকার ইমেজ? স্পেসের ২০% নষ্ট! Docker Multi-Stage Build এর মাধ্যমে ইমেজ সাইজ কমানো সম্ভব। এটি build tools, dev dependencies সরিয়ে ছোট,...

1 month ago

Read more
blog-image
মাইক্রোসার্ভিসে কাস্টম ডোমেইন ব্যবহার: একটি সহজ নির্দেশিকা

মাইক্রোসার্ভিসে কাস্টম ডোমেইন ব্যবহারের সহজ উপায়। Node.js, PHP, Python এ তৈরি Microservice এর জন্য `http://edns.system.com` URL ব্যবহার। `127.0.0.1` এর পরিবর্তে ডোমেইন ব্যবহারে DNS Server ও HOSTS ফাইলের ভূমিকা।...

2 months ago

Read more
blog-image
Distributed Networking Application System Design Architecture (episode -01)

পর্ব ১: ইন্টারনেটের ভেতরের গল্প! বিভিন্ন প্রোগ্রামিং ভাষার দল মিলে Network Application তৈরি করে। এই Application এর Architecture ধাপে ধাপে বুঝতে চেষ্টা করবো। Client-Server...

1 month ago

Read more