Performance টিউনিং টিপস এবং ট্রিকস

Bulk Operations এবং Performance টিউনিং - পিএল/এসকিউএল (PL/SQL) - Database Tutorials

335

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


1. Bulk Operations ব্যবহার করুন

PL/SQL এ BULK COLLECT এবং FORALL ব্যবহার করে বড় ডেটাসেটের সাথে কাজ করা হলে পারফরম্যান্স অনেকটাই বৃদ্ধি পায়। এগুলি context switching কমাতে সাহায্য করে, যা ডেটা প্রসেসিং দ্রুত করে।

BULK COLLECT:

ডেটাবেস থেকে একাধিক রেকর্ড একটি একক অপারেশনে সংগ্রহ করা, একে Bulk Collect বলা হয়।

DECLARE
   TYPE emp_array IS TABLE OF employees%ROWTYPE;
   emp_data emp_array;
BEGIN
   -- Bulk collect data from employees table
   SELECT * BULK COLLECT INTO emp_data FROM employees;
END;

FORALL:

এটি ইনসার্ট, আপডেট বা ডিলিট অপারেশনের জন্য ব্যবহার করা হয়। এটি context switches কমানোর মাধ্যমে কোডের কার্যকারিতা বৃদ্ধি করে।

DECLARE
   TYPE emp_array IS TABLE OF employees%ROWTYPE;
   emp_data emp_array;
BEGIN
   -- Bulk collect data from employees table
   SELECT * BULK COLLECT INTO emp_data FROM employees;
   
   -- Bulk insert data into another table
   FORALL i IN 1..emp_data.COUNT
      INSERT INTO backup_employees VALUES emp_data(i);
END;

2. Nested Loops পরিহার করুন

Nested loops যখন ব্যবহার করা হয়, তখন প্রতিটি লুপের জন্য ডেটা রিড ও প্রসেসিং প্রয়োজন হয়, যা কার্যকারিতাকে ধীর করে তোলে। PL/SQL এ cursor বা bulk processing ব্যবহার করা অধিক কার্যকর হতে পারে।

-- Avoid nested loops for better performance
FOR i IN (SELECT * FROM employees) LOOP
   FOR j IN (SELECT * FROM projects WHERE emp_id = i.emp_id) LOOP
      -- Perform some operation
   END LOOP;
END LOOP;

এটি BULK COLLECT বা JOIN অপারেশনের মাধ্যমে পুনরায় লিখতে পারেন, যা দ্রুততর হতে পারে।


3. Indexing এর ব্যবহার

ডেটাবেসের উপর সঠিক indexing ব্যবহার করলে ডেটার অ্যাক্সেস টাইম অনেক কমে যায়। যখন আপনি কোনো টেবিল থেকে রেকর্ড বের করছেন, তখন ইনডেক্স তৈরি করা কার্যকারিতা বৃদ্ধি করে।

  • Primary KeyUnique Key এর উপর ইনডেক্স স্বয়ংক্রিয়ভাবে তৈরি হয়।
  • Non-unique indexes ব্যবহার করে কোডের কার্যকারিতা বৃদ্ধি করতে পারেন, বিশেষ করে যখন WHERE clausecolumns ব্যবহার করা হয়।
CREATE INDEX idx_emp_id ON employees(emp_id);

4. EXISTS ব্যবহার করুন IN এর পরিবর্তে

কখনো কখনো IN ক্লজের পরিবর্তে EXISTS ব্যবহার করলে কোডের পারফরম্যান্স বৃদ্ধি পায়, কারণ EXISTS শুধুমাত্র প্রথম ম্যাচিং রেকর্ড পাওয়ার পরই প্রক্রিয়া থামিয়ে দেয়।

-- Better performance using EXISTS
IF EXISTS (SELECT 1 FROM employees WHERE emp_id = 101) THEN
   -- Do something
END IF;

-- Less efficient IN
IF 101 IN (SELECT emp_id FROM employees) THEN
   -- Do something
END IF;

5. Unnecessary Cursor ব্যবহার পরিহার করুন

Explicit cursors ব্যবহার করার ক্ষেত্রে যদি কোনো কাজ সম্পাদন না হয় তবে সেগুলি পরিহার করা উচিত। Implicit cursors অনেক দ্রুত, তাই যদি আপনাকে কোনো তথ্য একবারে এক্সেস করতে হয় তবে Implicit Cursor ব্যবহার করুন।

-- Avoid unnecessary explicit cursors
DECLARE
   CURSOR emp_cursor IS
      SELECT * FROM employees;
BEGIN
   FOR emp IN emp_cursor LOOP
      -- Do some work
   END LOOP;
END;

এটি নিম্নলিখিতভাবে আরও ভালো হতে পারে:

-- Implicit cursor for better performance
FOR emp IN (SELECT * FROM employees) LOOP
   -- Do some work
END LOOP;

6. Exception Handling Simplification

Exception handling কোডে কিছুটা পারফরম্যান্স খরচ করে, বিশেষ করে WHEN OTHERS ব্যবহার করার সময়। প্রয়োজন ছাড়া Exception Handling এড়িয়ে চলা উচিত।

BEGIN
   -- Some operation that might fail
EXCEPTION
   WHEN OTHERS THEN
      -- Handle error
END;

উপযুক্ত specific exceptions ব্যাবহার করা বেশি কার্যকর হতে পারে:

BEGIN
   -- Some operation that might fail
EXCEPTION
   WHEN NO_DATA_FOUND THEN
      -- Handle error
END;

7. Bulk Collect, FORALL এবং Context Switching

যখন PL/SQL ব্লকের মধ্যে SQL কোয়েরি এক্সিকিউট করা হয়, তখন ডেটাবেস এবং PL/SQL কনটেক্সটের মধ্যে context switching হয়, যা কার্যকারিতা কমাতে পারে। যদি আপনার কোডে অনেক ডেটা প্রসেস করা হয়, তবে bulk collect এবং FORALL ব্যবহার করলে এটি কমানো যায়।


8. Avoid Using Cursors in Loops

এটি একটি সাধারণ ভুল যখন আপনি cursor এর ভিতরে একটি লুপ ব্যবহার করেন। Cursor যদি লুপের মধ্যে থাকে, তাহলে প্রতি লুপের জন্য এটি নতুন করে ডেটা ফেচ করতে পারে, যা কার্যকারিতা ধীর করে দেয়।

DECLARE
   CURSOR c_emp IS
      SELECT emp_id FROM employees;
BEGIN
   FOR emp IN c_emp LOOP
      -- Loop logic
   END LOOP;
END;

এর পরিবর্তে, Bulk Collect ব্যবহার করা উত্তম:

DECLARE
   TYPE emp_array IS TABLE OF employees%ROWTYPE;
   emp_data emp_array;
BEGIN
   -- Bulk Collect data
   SELECT * BULK COLLECT INTO emp_data FROM employees;
   
   FOR i IN 1..emp_data.COUNT LOOP
      -- Process each employee
   END LOOP;
END;

9. PL/SQL Functions vs Procedures

যখন কোনো ছোট কাজ সম্পাদন করা হয়, তখন Function ব্যবহার করা ভালো। তবে বড় এবং জটিল কার্যক্রমের জন্য Procedure ভালো কারণ এতে IN, OUT, IN OUT parameters এবং Complex SQL ব্যবহৃত হতে পারে।


10. Limit the Number of Transactions

Commit এবং Rollback ব্যবহারের মাধ্যমে ট্রানজেকশন গুলির সংখ্যা সীমিত করুন। Batch Processing এর মাধ্যমে একাধিক অপারেশন একই ট্রানজেকশনে সম্পন্ন করুন।

BEGIN
   -- Perform multiple operations
   INSERT INTO employees VALUES ('John');
   INSERT INTO employees VALUES ('Jane');
   COMMIT;
END;

সারাংশ:

  • Bulk Operations ব্যবহার করুন (BULK COLLECT, FORALL) পারফরম্যান্স উন্নত করতে।
  • Context Switching কমাতে Implicit Cursors ব্যবহার করুন।
  • Indexing এর মাধ্যমে ডেটার এক্সেস গতি বৃদ্ধি করুন।
  • EXISTS ব্যবহার করে IN এর পরিবর্তে আরও দ্রুত এক্সিকিউশন করুন।
  • Exception Handling কোডে প্রয়োজনীয় ভাবে এবং ছোট পরিসরে ব্যবহৃত হোক।
  • Cursors এর ব্যবহার কমিয়ে দিয়ে Bulk Collect এর মতো কৌশল গ্রহণ করুন।
Content added By
Promotion

Are you sure to start over?

Loading...