আমি একটি অ্যাপ্লিকেশন পরিচালনা করি যা খুব বড় (এক টেবিলের 500 মিলিয়নেরও বেশি সারি সহ প্রায় 1TB ডেটা) ওরাকল ডাটাবেস ব্যাক এন্ড থাকে। ডাটাবেসটি সত্যিই কিছু করে না (কোনও এসপ্রোকস, কোনও ট্রিগার বা কিছু নেই) এটি কেবল একটি ডেটা স্টোর।
প্রতি মাসে আমাদের প্রধান টেবিল দুটি থেকে রেকর্ড মুছে ফেলা প্রয়োজন। শুদ্ধির মানদণ্ডটি পরিবর্তিত হয় এবং এটি সারি বয়সের এবং কয়েকটি স্থিতির ক্ষেত্রের সংমিশ্রণ। আমরা সাধারণত মাসে 10 থেকে 50 মিলিয়ন সারিগুলির মধ্যে শুদ্ধি শেষ করি (আমরা আমদানির মাধ্যমে সপ্তাহে প্রায় 3-5 মিলিয়ন সারি যোগ করি)।
বর্তমানে আমাদের প্রায় 50,000 সারির ব্যাচগুলিতে এই মুছাটি করতে হবে (উদাঃ 50000, কমিট, 50000 মুছুন, প্রতিশ্রুতি দিন, পুনরাবৃত্তি করুন)। পুরো ব্যাচটি একবারে মুছে ফেলার চেষ্টা করা ডাটাবেসটিকে প্রায় এক ঘন্টার জন্য উত্তর দেয় না (সারিগুলির # টির উপর নির্ভর করে)। এই জাতীয় ব্যাচগুলিতে সারিগুলি মুছে ফেলা আমাদের সিস্টেমে খুব রুক্ষ এবং আমরা সাধারণত "সপ্তাহের অনুমতি অনুসারে" এক সপ্তাহের মধ্যে এটি করতে হয়; স্ক্রিপ্টটি অবিচ্ছিন্নভাবে চালিত হতে দেওয়ার ফলে কর্মক্ষমতা হ্রাস পেতে পারে যা ব্যবহারকারীর কাছে অগ্রহণযোগ্য।
আমি বিশ্বাস করি যে এই ধরণের ব্যাচ মুছে ফেলা সূচি কার্যকারিতাও হ্রাস করে এবং অন্যান্য প্রভাব রয়েছে যা শেষ পর্যন্ত ডাটাবেসের কর্মক্ষমতা হ্রাস করতে পারে। কেবলমাত্র একটি টেবিলে 34 টি সূচী রয়েছে এবং সূচী ডেটা আকারটি কেবল ডেটা থেকে বেশি।
আমাদের আইটি লোকের একজন এই শুদ্ধি করতে ব্যবহৃত স্ক্রিপ্টটি এখানে:
BEGIN
LOOP
delete FROM tbl_raw
where dist_event_date < to_date('[date]','mm/dd/yyyy') and rownum < 50000;
exit when SQL%rowcount < 49999;
commit;
END LOOP;
commit;
END;
এই ডাটাবেসটি অবশ্যই 99.99999% এর উপরে থাকতে হবে এবং আমরা বছরে একবার মাত্র 2 দিনের রক্ষণাবেক্ষণ উইন্ডো পেয়েছি।
আমি এই রেকর্ডগুলি অপসারণের জন্য আরও ভাল পদ্ধতির সন্ধান করছি, তবে এখনও আমি এর কোনও সন্ধান করতে পারি নি। কোনও পরামর্শ?