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

প্রাথমিক সার্ভারে অপেক্ষার ধরন থেকেই শুরু করুন

দূরবর্তী রেপ্লিকায় অপেক্ষারত লেখা CPU বা লক অপেক্ষা নয়, লগ-সংক্রান্ত অপেক্ষা হিসেবে দেখা যায়, আর লেনদেনের সময়সীমা সারির সংখ্যা নয়, ওই যাত্রাকে অনুসরণ করে। অনেক ছোট কমিট এটি স্পষ্ট করে, কারণ প্রত্যেকটি যাত্রার খরচ আলাদা করে দেয়। একটি বড় ব্যাচ অপারেশন একই খরচ একটি দীর্ঘতর স্বীকৃতির ভেতরে লুকিয়ে রাখে।

সংযোগ সম্পর্কে কোনো সিদ্ধান্তে আসার আগে আপনার কাজের চাপ কমিটের হার অনুযায়ী সাজান।

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

স্বীকৃতিটি সেকেন্ডারি পর্যন্ত অনুসরণ করুন

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

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

SELECT ag.name AS ag_name, drs.database_id, drs.synchronization_state_desc,
       drs.log_send_queue_size, drs.redo_queue_size
FROM sys.dm_hadr_database_replica_states AS drs
JOIN sys.availability_groups AS ag ON ag.group_id = drs.group_id;

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

সংযোগ নয়, পথটাই মাপুন

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

মাপার সময় ডেটাবেস ট্রান্সপোর্ট নিরাপত্তা ও অ্যাক্সেস নিয়ন্ত্রণ অক্ষত রাখুন। পথ মাপা কখনোই সেগুলো এড়িয়ে যাওয়ার কারণ নয়।

সময়গুলোকে অন্তর্দৃষ্টির বদলে কাউন্টারগুলোর সাথে সম্পর্কিত করুন। সেন্ড কিউ খালি থাকলে এবং কমিট তবুও অপেক্ষা করলে, বিলম্ব স্বীকৃতিতে বা সেকেন্ডারির ফ্লাশে। সেন্ড কিউ ক্রমাগত বাড়লে, সীমাবদ্ধতা ট্রান্সপোর্ট বা ধারণক্ষমতা। কোন পর্যবেক্ষণ সিদ্ধান্তকে সমর্থন করেছে তা লিখে রাখুন, যাতে পরের ব্যক্তি তর্কের বদলে মাপটি পুনরাবৃত্তি করতে পারেন।

অ্যাসিঙ্ক্রোনাস মোড আসলে কী বদলায়

অ্যাসিঙ্ক্রোনাস কমিট সেকেন্ডারির হার্ডেনিং স্বীকৃতির অপেক্ষা সরিয়ে দেয়, তাই লেখা দ্রুত হয় এবং তাই আপনার টেকসই অবস্থান বদলে যায়। প্রাথমিক সার্ভার ওই দূরবর্তী নিশ্চিতকরণ ছাড়াই লেনদেন নিশ্চিত করে। এরপর সেকেন্ডারিকে পিছিয়ে থাকতে দেওয়া হয়, আর সেই পিছিয়ে পড়াই ঝুঁকি।

লগটি ব্যবহারযোগ্য ফেইলওভার লক্ষ্যে পৌঁছানোর আগে প্রাথমিক সার্ভার হারিয়ে গেলে, ওই রেপ্লিকায় সেবা জোর করে চালানো সেই লেনদেনগুলো ফেলে দেয় যেগুলো ইতিমধ্যে অ্যাপ্লিকেশনকে কমিট হয়েছে বলে জানানো হয়েছিল।

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

সম্পর্কিত নিবন্ধ