ক্লাউড এসকিউএল-এর জন্য কোয়েরি ইনসাইটের ভূমিকা

১. শুরু করার আগে

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

এই কোডল্যাবে আপনি শিখবেন কীভাবে একটি Cloud SQL for PostgreSQL ইনস্ট্যান্স সেট আপ করতে হয়, সেই Cloud SQL ইনস্ট্যান্সটিকে ব্যাকএন্ড স্টোরেজ হিসেবে ব্যবহার করার জন্য একটি Node.js অ্যাপ ডেপ্লয় করতে হয়, এবং তারপর Query Insights ব্যবহার করে কোয়েরিগুলো দেখা ও মনিটর করা যায়।

পূর্বশর্ত

  • Node.js প্রোগ্রামিং ভাষা এবং টুলস সম্পর্কে প্রাথমিক ধারণা

আপনি যা করবেন

  • Node.js অ্যাপে Cloud SQL ব্যবহার করুন।
  • Node.js অ্যাপে SQL Commenter সক্রিয় করুন।
  • কোয়েরি পারফরম্যান্স নিরীক্ষণ ও তদন্ত করতে Query Insights for Cloud SQL ব্যবহার করুন।

আপনার যা যা লাগবে

  • একটি গুগল ক্লাউড অ্যাকাউন্ট যেখানে আপনার এপিআই (API) সক্রিয় করার এবং পরিষেবা তৈরি করার অনুমতি রয়েছে।

২. সেটআপ এবং প্রয়োজনীয়তা

স্ব-গতিতে পরিবেশ সেটআপ

  1. ক্লাউড কনসোলে সাইন ইন করুন এবং একটি নতুন প্রজেক্ট তৈরি করুন অথবা বিদ্যমান কোনো প্রজেক্ট পুনরায় ব্যবহার করুন। (যদি আপনার আগে থেকে Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তবে আপনাকে অবশ্যই একটি তৈরি করতে হবে।)

আপনি যে প্রজেক্টটি ব্যবহার করছেন তার প্রজেক্ট আইডিটি মনে রাখবেন। এই কোডল্যাবে পরবর্তীতে এটিকে PROJECT-ID হিসেবে উল্লেখ করা হবে।

  1. এরপরে, গুগল ক্লাউড রিসোর্স ব্যবহার করার জন্য আপনাকে ক্লাউড কনসোলে বিলিং চালু করতে হবে।

এই কোডল্যাবটি চালাতে খুব বেশি খরচ হওয়ার কথা নয়, এমনকি আদৌ কোনো খরচ নাও হতে পারে। "ক্লিন আপ অ্যান্ড লার্ন মোর" বিভাগের সমস্ত নির্দেশাবলী অবশ্যই অনুসরণ করবেন, যেখানে রিসোর্সগুলো কীভাবে বন্ধ করতে হবে সে সম্পর্কে পরামর্শ দেওয়া হয়েছে, যাতে এই টিউটোরিয়ালের বাইরে আপনার কোনো বিল না আসে। গুগল ক্লাউডের নতুন ব্যবহারকারীরা ৩০০ মার্কিন ডলারের ফ্রি ট্রায়াল প্রোগ্রামের জন্য যোগ্য।

ক্লাউড শেল সক্রিয় করুন

  1. ক্লাউড কনসোল থেকে, ‘Activate Cloud Shell’- এ ক্লিক করুন।

ক্লাউড শেল সক্রিয় করুন

আপনি যদি আগে কখনো ক্লাউড শেল চালু না করে থাকেন, তাহলে এটি কী তা বর্ণনা করে একটি মধ্যবর্তী স্ক্রিন (নিচে দেওয়া আছে) আপনার সামনে আসবে। যদি তাই হয়, তাহলে 'Continue'-তে ক্লিক করুন (এবং আপনি এটি আর কখনো দেখতে পাবেন না)। একবারের জন্য আসা সেই স্ক্রিনটি দেখতে এইরকম:

ক্লাউড শেল ডায়ালগ উইন্ডো

ক্লাউড শেল প্রস্তুত করতে এবং এর সাথে সংযোগ স্থাপন করতে মাত্র কয়েক মুহূর্ত সময় লাগা উচিত।

ক্লাউড শেল টার্মিনাল

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

  1. আপনি সঠিক প্রজেক্ট ব্যবহার করছেন কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:

ক্লাউড শেলে সংযুক্ত হওয়ার পর আপনি দেখতে পাবেন যে, আপনাকে ইতিমধ্যেই প্রমাণীকৃত করা হয়েছে এবং প্রজেক্টটি আপনার প্রজেক্ট আইডিতে সেট করা আছে।

আপনি সঠিক প্রজেক্টটি ব্যবহার করছেন কিনা তা নিশ্চিত করতে নিম্নলিখিত কমান্ডটি চালান।

gcloud config list project

ক্লাউড শেল খোলার সময় আপনি যে প্রজেক্টটি নির্বাচন করেছিলেন, তার থেকে ভিন্ন কোনো প্রজেক্ট ব্যবহার করতে চাইলে, নিম্নলিখিত কমান্ডটি চালিয়ে একটি নতুন প্রজেক্ট সেট করতে পারেন:

gcloud config set project <PROJECT-ID>;

৩. কোয়েরি ইনসাইটস সক্রিয় করে একটি ক্লাউড এসকিউএল ফর পোস্টগ্রেসকিউএল ইনস্ট্যান্স সেট আপ করুন।

  1. Cloud Shell চালু হওয়ার পর, আপনি কমান্ড লাইন ব্যবহার করে my-instance নামের একটি নতুন Cloud SQL ইনস্ট্যান্স তৈরি করতে পারবেন, যেখানে Query Insights সক্রিয় থাকবে:
gcloud sql instances create my-instance --tier db-f1-micro --database-version=POSTGRES_12 --region=us-central --root-password=<PASSWORD> --insights-config-query-insights-enabled --insights-config-record-application-tags --insights-config-record-client-address

এখানে পতাকাগুলো এবং সেগুলোর অর্থ সম্পর্কে একটি সংক্ষিপ্ত ব্যাখ্যা দেওয়া হলো:

  • --tier db-f1-micro ফ্ল্যাগটি ন্যূনতম রিসোর্সযুক্ত একটি মেশিন টাইপ নির্দিষ্ট করে, কারণ এটি ডেভেলপমেন্টের উদ্দেশ্যে ব্যবহৃত হচ্ছে এবং কোডল্যাবের জন্য আপনার বেশি রিসোর্সের প্রয়োজন নেই। আপনি এখানে টিয়ার সম্পর্কে আরও জানতে পারবেন।
  • --database-version=POSTGRES_12 ফ্ল্যাগটি এমন একটি ইনস্ট্যান্স তৈরি করে যা PostgreSQL সংস্করণ 12 হবে।
  • --region=us-central ফ্ল্যাগটি সেই অঞ্চল নির্দিষ্ট করে যেখানে ইনস্ট্যান্সটি তৈরি করা হবে।
  • --root-password=<PASSWORD> ফ্ল্যাগটি আপনাকে রুট postgres ব্যবহারকারীর পাসওয়ার্ড নির্দিষ্ট করার সুযোগ দেয়। <PASSWORD> এর জায়গায় আপনার পছন্দের একটি পাসওয়ার্ড বসাতে ভুলবেন না।
  • --insights-config-query-insights-enabled ফ্ল্যাগটি আপনার ইনস্ট্যান্সে কোয়েরি ইনসাইটস (Query Insights) সক্রিয় করে।
  • --insights-config-record-application-tags ফ্ল্যাগটি অ্যাপ্লিকেশন ট্যাগ রেকর্ড করার সুযোগ দেয়। পরবর্তী বিভাগগুলিতে আপনি অ্যাপ্লিকেশন ট্যাগ সম্পর্কে আরও জানতে পারবেন।
  • --insights-config-record-client-address ফ্ল্যাগটি Query Insights-কে ক্লায়েন্টের আইপি অ্যাড্রেস রেকর্ড করার সুযোগ দেয়।

আপনার প্রোজেক্টের জন্য sqladmin.googleapis.com এপিআইটি সক্রিয় করতে আপনাকে অনুরোধ করা হতে পারে। যদি অনুরোধ করা হয়, এপিআইটি সক্রিয় করতে y নির্বাচন করুন।

ইনস্ট্যান্সটি তৈরি হতে কয়েক মিনিট সময় লাগবে। এই প্রক্রিয়াটি সম্পন্ন হলে, আপনার ইনস্ট্যান্সটি ব্যবহারের জন্য প্রস্তুত হয়ে যাবে।

  1. এখন একটি ডাটাবেস তৈরি করুন যা আপনি স্যাম্পল অ্যাপটির জন্য ব্যবহার করবেন:
gcloud sql databases create votesdb --instance my-instance

এছাড়াও আপনি ক্লাউড কনসোলের মাধ্যমে ইনস্ট্যান্সটি অ্যাক্সেস এবং কনফিগার করতে পারেন।

  1. নিম্নলিখিত কমান্ডটি চালিয়ে PROJECT-ID:ZONE-ID:INSTANCE-ID ফরম্যাটে ইনস্ট্যান্স কানেকশনের নামটি সংগ্রহ করুন। পরবর্তীতে আপনার Node.js অ্যাপ কনফিগার করার সময় এটি ব্যবহার করতে হবে।
gcloud sql instances describe my-instance | grep connectionName

৪. অ্যাপটির সাথে ব্যবহারের জন্য একটি পরিষেবা অ্যাকাউন্ট তৈরি করুন।

আপনার GCP প্রোজেক্টের মধ্যে বিভিন্ন পরিষেবা ব্যবহারের অনুমতি দেওয়ার জন্য সার্ভিস অ্যাকাউন্ট ব্যবহার করা হয়। এই কোডল্যাবের জন্য, আপনার ক্লাউড এসকিউএল ইনস্ট্যান্সে সংযোগ করার জন্য ক্লাউড এসকিউএল প্রক্সিকে অনুমতি দিতে একটি সার্ভিস অ্যাকাউন্টের প্রয়োজন হবে।

কনসোলে একটি পরিষেবা অ্যাকাউন্ট তৈরি করুন

  1. IAM পরিষেবা অ্যাকাউন্ট পৃষ্ঠায় যান এবং ক্লিক করুন -PCvKR3aQ2zKaUcml8w9lW4JNlmYtN5-r2--mC6kMUp6HOXW8wT1wUvLoYEPU-aA-oGskT3XkAqfNwRAKkZkllwTe6ugdrUVFwaeKT0M9Y1RwHA8JPZeGmCWYBfr8d9TSycNMIRsLw পৃষ্ঠার শীর্ষে থাকা বোতাম।
  2. আপনার পরিষেবা অ্যাকাউন্টকে একটি অনন্য নাম ও আইডি দিন এবং তৈরি করুন (CREATE ) বোতামে ক্লিক করুন।
  3. পরবর্তী পৃষ্ঠায়, 'Select a role'-এর ড্রপ-ডাউনে ক্লিক করুন। 'Cloud SQL' দিয়ে ফিল্টার করুন এবং Cloud SQL Client রোলটি নির্বাচন করুন। 'CONTINUE'-এ ক্লিক করুন এবং তারপর 'DONE'-এ ক্লিক করুন।
  4. সার্ভিস অ্যাকাউন্ট তৈরি হয়ে গেলে, আপনার নতুন সার্ভিস অ্যাকাউন্টের জন্য ‘অ্যাকশনস’-এর নিচে থাকা তিনটি ডটে ক্লিক করুন এবং ‘ম্যানেজ কীজ’ বেছে নিন। পরের পৃষ্ঠায়, ‘অ্যাড কী’ নির্বাচন করুন এবং তারপরে ‘ক্রিয়েট নিউ কী’ নির্বাচন করুন । JSON নির্বাচিত থাকবে; সেটিই ডিফল্ট রাখুন এবং ‘ক্রিয়েট’-এ ক্লিক করুন। এটি একটি .json প্রাইভেট কী ফাইল ডাউনলোড করবে। ‘ক্লোজ’-এ ক্লিক করুন।
  5. ক্লাউড শেলে, ‘More’ মেনুর জন্য তিনটি ডটে ক্লিক করুন এবং ‘Upload File’ বেছে নিন। আপনার লোকাল মেশিনে ডাউনলোড করা .json ফাইলটি ব্রাউজ করে খুঁজে বের করুন এবং সেটি নির্বাচন করুন। এর ফলে .json ফাইলটি ক্লাউড শেলে আপনার হোম ডিরেক্টরিতে আপলোড হয়ে যাবে।

৫. ক্লাউড এসকিউএল প্রক্সি ইনস্টল এবং চালু করুন।

অ্যাপ্লিকেশন এবং ডাটাবেস ইনস্ট্যান্সের মধ্যে যোগাযোগের জন্য আপনি ক্লাউড এসকিউএল প্রক্সি ব্যবহার করবেন।

  1. ক্লাউড SQL প্রক্সি ডাউনলোড করুন। ক্লাউড শেলে, আপনি এটি চালাতে পারেন:
wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy && chmod +x cloud_sql_proxy
  1. Cloud SQL ইনস্ট্যান্স ওভারভিউ পৃষ্ঠা থেকে কপি করা ইনস্ট্যান্স সংযোগের নামটি দিয়ে <INSTANCE_CONNECTION_NAME> প্রতিস্থাপন করার পর, নিম্নলিখিতভাবে প্রক্সিটি চালান।
./cloud_sql_proxy -instances=<INSTANCE_CONNECTION_NAME>=tcp:5432 &

এটি সফল হলে, আপনি কয়েকটি আউটপুট লাইন দেখতে পাবেন, যার শেষে ' Ready for new connections ' বার্তাটি থাকবে।

৬. অ্যাপটি ক্লোন করে আপনার কম্পিউটারে পরীক্ষা করুন।

  1. নমুনা অ্যাপ্লিকেশনটির রিপো ক্লোন করুন এবং অ্যাপটি চালানোর জন্য প্রয়োজনীয় প্যাকেজগুলো ইনস্টল করুন।
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples/

cd nodejs-docs-samples/cloud-sql/postgres/knex

npm install
  1. নিম্নলিখিত পরিবেশ ভেরিয়েবলগুলো সেট করুন:
export INSTANCE_CONNECTION_NAME='<PROJECT-ID>:<ZONE-ID>:<INSTANCE-ID>'
export DB_HOST='127.0.0.1:5432'
export DB_USER='postgres'
export DB_PASS='<PASSWORD>'
export DB_NAME='votesdb'
  1. নমুনা অ্যাপটি চালু করুন।
npm start
  1. ওয়েব প্রিভিউতে ক্লিক করুন ওয়েব প্রিভিউ আইকন ক্লাউড শেলে, এরপর পোর্ট ৮০৮০-তে প্রিভিউ নির্বাচন করুন।

পোর্ট ৮০৮০ মেনু আইটেমে প্রিভিউ

আপনার ব্রাউজারে এখানে দেখানো Tabs vs Spaces ভোটিং অ্যাপটি দেখতে পাবেন:

ট্যাব বনাম স্পেস ভোটিং অ্যাপের স্ক্রিনশট

  1. ভোট দিতে এবং ডাটাবেসে তথ্য সংরক্ষণ করতে বাটনগুলোতে ক্লিক করুন।

৭. সকল ভোট দেখার জন্য একটি পৃষ্ঠা যোগ করুন

যেহেতু এই নমুনা অ্যাপ্লিকেশনটি খুবই সরল, তাই আপনি একটি অতিরিক্ত পৃষ্ঠা যোগ করবেন যেখানে সমস্ত ভোট প্রদর্শিত হবে। এটি করার প্রধান কারণ হলো, পরবর্তীতে যখন আপনি কোয়েরি ইনসাইটস (Query Insights) ব্যবহার করবেন, তখন আপনার দেখার জন্য আরও বেশি ডেটা থাকবে।

  1. স্যাম্পল অ্যাপটি বন্ধ করতে আপনার ক্লাউড শেলে Ctrl+c চাপুন।
  2. ক্লাউড শেলে, ক্লিক করুন এডিটর বোতাম খুলুন ক্লাউড শেল এডিটর চালু করার বাটন।
  3. ফাইল এক্সপ্লোরারে nodejs-docs-samples/cloud-sql/postgres/knex/server.js খুঁজে বের করুন এবং এডিটরে server.js ফাইলটি লোড করার জন্য সেটিতে ক্লিক করুন।

যেখানে getVotes ফাংশনটি সংজ্ঞায়িত করা হয়েছে, তার পরে নিম্নলিখিত কোডটি যোগ করুন:

/**
 * Retrieve all vote records from the database.
 *
 * @param {object} pool The Knex connection object.
 * @returns {Promise}
 */
const getAllVotes = async pool => {
  return await pool
    .select('candidate', 'time_cast')
    .from('votes')
    .orderBy('time_cast', 'desc');
};
  1. অন্যান্য রুটগুলো যেখানে সংজ্ঞায়িত করা হয়েছে, তার নিচে '/getAllVotes' রুটের জন্য নিম্নলিখিত কোডটি যোগ করুন:
app.get('/getAllVotes', async (req, res) => {
  pool = pool || createPool();
  try {
    // Query all votes from the database.
    const votes = await getAllVotes(pool);

    res.render('allvotes.pug', {
      votes: votes,
    });
  } catch (err) {
    console.error(err);
    res
      .status(500)
      .send('Unable to load page; see logs for more details.')
      .end();
  }
});
  1. nodejs-docs-samples/cloud-sql/postgres/knex/views ডিরেক্টরিতে allvotes.pug নামে একটি নতুন ফাইল তৈরি করুন। নিম্নলিখিত কোডটি পেস্ট করুন:
doctype html
html(lang="en")
  head
    title Tabs VS Spaces

    link(rel="stylesheet", href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css")
    link(rel="stylesheet", href="https://fonts.googleapis.com/icon?family=Material+Icons")
    script(src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js")
  body

    nav(class="red lighten-1")
      div(class="nav-wrapper")
        a(href="#" class="brand-logo center") Tabs VS Spaces

    div(class="section")

      h4(class="header center") Recent Votes
      ul(class="container collection center")
        each vote in votes
          li(class="collection-item avatar")
            if vote.candidate.trim() === 'TABS'
              i(class="material-icons circle green") keyboard_tab
            else
              i(class="material-icons circle blue") space_bar
            span(class="title") A vote for <b>#{vote.candidate}</b>
            p was cast at #{vote.time_cast}.
  1. ক্লিক করুন টার্মিনাল বোতাম খুলুন ক্লাউড শেলে ফিরে যেতে এবং চালানোর জন্য বাটন:
npm start
  1. অ্যাপটি ঠিকমতো কাজ করছে কিনা তা নিশ্চিত করতে ওয়েব প্রিভিউ থেকে এটি খুলুন। আপনার যোগ করা নতুন পৃষ্ঠাটি দেখতে ব্রাউজারের URL-এ /getAllVotes যোগ করুন।

৮. অ্যাপে SQL Commenter সক্রিয় করুন।

এখন আপনি SQL Commenter ইনস্টল এবং সক্রিয় করবেন, এটি একটি ওপেন-সোর্স লাইব্রেরি যা ORM-কে এক্সিকিউশনের আগে SQL স্টেটমেন্টের সাথে কমেন্ট যুক্ত করতে সক্ষম করে। SQLcommenter বেশ কয়েকটি ORM এবং ফ্রেমওয়ার্ক সমর্থন করে, যার মধ্যে স্যাম্পল অ্যাপটিতে ব্যবহৃত Knex.js- ও রয়েছে। Query Insights এই কমেন্টগুলোর তথ্য ব্যবহার করে ডাটাবেস পারফরম্যান্সের একটি অ্যাপ্লিকেশন-কেন্দ্রিক চিত্র প্রদান করে এবং কোন অ্যাপ্লিকেশন কোড সমস্যা সৃষ্টি করছে তা শনাক্ত করে। এর ফলে পারফরম্যান্সে সামান্য প্রভাব পড়বে বলে আশা করা যায়। Query Insights-এর ডকুমেন্টেশন দেখুন।

  1. স্যাম্পল অ্যাপটি বন্ধ করতে আপনার ক্লাউড শেলে Ctrl+c চাপুন।
  2. SQLcommenter-এর প্রয়োজনীয় প্যাকেজগুলো ইনস্টল করতে নিম্নলিখিত কমান্ডটি চালান:
  npm install @google-cloud/sqlcommenter-knex @opencensus/nodejs @opencensus/propagation-tracecontext @opentelemetry/api @opentelemetry/core --save
  1. ক্লাউড শেলে, ক্লিক করুন এডিটর বোতাম খুলুন ক্লাউড শেল এডিটর চালু করার বাটন।
  2. ফাইল এক্সপ্লোরারে nodejs-docs-samples/cloud-sql/postgres/knex/server.js খুঁজে বের করুন এবং এডিটরে server.js ফাইলটি লোড করার জন্য সেটিতে ক্লিক করুন।
  3. ফাইলটিতে এই কোডটি খুঁজুন:
const process = require('process');

এর নিচে নিম্নলিখিত কোডটি যোগ করুন:

const {wrapMainKnexAsMiddleware} = require('@google-cloud/sqlcommenter-knex');
  1. ফাইলটিতে এই কোডটি খুঁজুন:
// Set Content-Type for all responses for these routes.
app.use((req, res, next) => {
  res.set('Content-Type', 'text/html');
  next();
});

এর নিচে নিম্নলিখিত কোডটি যোগ করুন:

app.use(wrapMainKnexAsMiddleware(Knex, {
    traceparent: true,
    tracestate: true,
    route: true,
    db_driver: true
}));

এটি সম্পন্ন হয়ে গেলে, আপনার কোডটি দেখতে অনেকটা এইরকম হবে:

...
// Require process, so we can mock environment variables.
const process = require('process');

const {wrapMainKnexAsMiddleware} = require('@google-cloud/sqlcommenter-knex');
const express = require('express');
const Knex = require('knex');
const fs = require('fs');

const app = express();
app.set('view engine', 'pug');
app.enable('trust proxy');

// Automatically parse request body as form data.
app.use(express.urlencoded({extended: false}));
// This middleware is available in Express v4.16.0 onwards
app.use(express.json());

// Set Content-Type for all responses for these routes.
app.use((req, res, next) => {
  res.set('Content-Type', 'text/html');
  next();
});

app.use(wrapMainKnexAsMiddleware(Knex, {
    traceparent: true,
    tracestate: true,
    route: true,
    db_driver: true
}));
...
  1. ক্লিক করুন টার্মিনাল বোতাম খুলুন ক্লাউড শেলে ফিরে যেতে এবং চালানোর জন্য বাটন:
npm start
  1. Tabs vs Spaces অ্যাপ্লিকেশনে, ডাটাবেসে আরও ডেটা যোগ করার জন্য বাটনগুলোতে ক্লিক করে আরও কিছু ভোট দিন।

৯. কোয়েরি পারফরম্যান্স এবং এন্ড-টু-এন্ড ট্রেসিং দেখতে ইনসাইটস ব্যবহার করুন।

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

ডাটাবেস লোড - সমস্ত কোয়েরির গ্রাফ

শীর্ষ-স্তরের কোয়েরি ইনসাইটস ড্যাশবোর্ডটি ডেটাবেস লোড - সমস্ত কোয়েরি গ্রাফটি দেখায়।

সমস্ত কোয়েরি গ্রাফ

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

কোন কোয়েরিগুলো সবচেয়ে বেশি লোডের জন্য দায়ী?

গ্রাফের নিচে আপনি QUERIES টেবিলটি পাবেন, যেখানে আপনার নির্বাচিত সময়সীমার জন্য নর্মালাইজড কোয়েরিগুলো রয়েছে। টেবিলের কোয়েরিগুলো মোট এক্সিকিউশন টাইম অনুসারে সাজানো আছে।

শীর্ষ অনুসন্ধান সারণী

আপনি কোনো একটি নির্দিষ্ট কোয়েরিতে ক্লিক করে সেটির বিস্তারিত তথ্য দেখতে পারেন, যেমন—সেই নির্দিষ্ট কোয়েরির জন্য ডাটাবেস লোড, কোয়েরি ল্যাটেন্সি, কোয়েরি প্ল্যান স্যাম্পল এবং শীর্ষ ব্যবহারকারী। যদি কোনো অ্যাপ্লিকেশন ORM ব্যবহার করে তৈরি করা হয়, যেমনটি স্যাম্পল অ্যাপ্লিকেশনটির ক্ষেত্রে, তবে আপনি হয়তো জানবেন না যে অ্যাপ্লিকেশনটির কোন অংশ কোন কোয়েরির জন্য দায়ী। টপ ট্যাগস সেকশনটি আপনাকে তা খুঁজে বের করতে সাহায্য করতে পারে।

অ্যাপ্লিকেশনটিতে কোয়েরি লোড কোথা থেকে আসছে?

বিজনেস লজিক দ্বারা ট্যাগ করা কোয়েরিগুলোর তালিকা দেখতে QUERIES টেবিল থেকে TAGS টেবিলে টগল করুন, যা আপনাকে আরও অ্যাপ্লিকেশন-কেন্দ্রিক একটি চিত্র দেবে।

শীর্ষ ট্যাগ টেবিল

TAGS টেবিলে, কোন রুটটি লোড তৈরি করেছে তার উপর ভিত্তি করে ডাটাবেস লোডের বিস্তারিত বিবরণ দেখতে পাবেন। উপরের স্ক্রিনশটে, আপনি দেখতে পাচ্ছেন যে '/getAllVotes' রুটটির গড় এক্সিকিউশন টাইম বেশি এবং গড়ে বেশি সংখ্যক রো ফেরত এসেছে। যদিও এই ক্ষেত্রে টেবিলে দেখানো এক্সিকিউশন টাইমটি সমস্যাজনক নয়, তবুও ডেটা আরও বিস্তারিতভাবে দেখার জন্য চলুন '/getAllVotes' রো-টিতে ক্লিক করি।

কোয়েরিগুলো ধীরগতিতে চলছে কেন?

কোয়েরি প্ল্যান দেখতে , কোয়েরি প্ল্যান স্যাম্পলস গ্রাফের বিন্দুটিতে ক্লিক করুন।

নমুনা কোয়েরি পরিকল্পনা

কোয়েরি প্ল্যানগুলো দেখায় যে PostgreSQL অভ্যন্তরীণভাবে কীভাবে একটি কোয়েরি সম্পাদন করে, যার ফলে ধীরগতির কারণ হচ্ছে এমন কোনো অপারেশন আছে কিনা তা নির্ধারণ করা সহজ হয়।

কোন অ্যাপ্লিকেশন কোডটি ধীরগতির জন্য দায়ী?

কোয়েরি ইনসাইটস এন্ড-টু-এন্ড ট্রেসিংয়ের প্রাসঙ্গিক ভিজ্যুয়ালাইজেশনও প্রদান করে, যা একটি অ্যাপ্লিকেশনের কোন অংশগুলো ধীরগতির কোয়েরি তৈরি করছে সে সম্পর্কে আরও তদন্ত করতে সহায়ক হতে পারে।

ইন-কনটেক্সট ট্রেস দেখতে এন্ড টু এন্ড ট্যাবে ক্লিক করুন।

এন্ড-টু-এন্ড ট্রেস

১০. পরিষ্কার করুন এবং আরও জানুন

আপনি শিখেছেন কীভাবে একটি Node.js অ্যাপ এবং একটি Cloud SQL PostgreSQL ডেটাবেসের কোয়েরি পারফরম্যান্স নিরীক্ষণ ও তদন্ত করতে Query Insights ব্যবহার করতে হয়!

পরিষ্কার করা

আপনি যদি আপনার ক্লাউড এসকিউএল ইনস্ট্যান্সটি চালু রাখতে না চান, তাহলে এখন এটি মুছে ফেলতে পারেন।

gcloud sql instances delete my-instance

আরও জানুন