আজ আমি হার্ডড্রাইভ আবিষ্কার করেছি যা আমার ডাটাবেসগুলিতে পূর্ণ ছিল। এটি আগেও ঘটেছে, সাধারণত কারণটি বেশ স্পষ্ট। সাধারণত একটি খারাপ জিজ্ঞাসা থাকে, যার ফলে টেম্পডিবিতে প্রচুর পরিমাণে ছড়িয়ে পড়ে যা ডিস্ক পূর্ণ না হওয়া অবধি বৃদ্ধি পায়। এবার যা ঘটেছে তা একটু কমই স্পষ্ট হয়েছিল, কারণ টেম্পডিবি সম্পূর্ণ ড্রাইভের কারণ নয়, এটি ছিল ডাটাবেস নিজেই।
ঘটনা:
- সাধারণ ডাটাবেসের আকার প্রায় 55 গিগাবাইট, এটি বেড়েছে 605 জিবি।
- লগ ফাইলের আকার সাধারণ থাকে, ডেটা ফাইল বিশাল।
- ডেটাফাইলে 85% উপলভ্য স্থান রয়েছে (আমি এটি 'বায়ু' হিসাবে ব্যাখ্যা করি: যে স্থানটি ব্যবহৃত হয়েছিল, তবে তা ছেড়ে দেওয়া হয়েছে S এসকিউএল সার্ভার একবার বরাদ্দকালে সমস্ত স্থান সংরক্ষণ করে)।
- টেম্পডিবির আকার স্বাভাবিক।
আমি সম্ভবত কারণ খুঁজে পেয়েছি; একটি ক্যোয়ারী রয়েছে যা অনেক বেশি সারি নির্বাচন করে (খারাপ যোগদানের কারণে 11 বিলিয়ন সারি নির্বাচন হয় যেখানে কয়েক লক্ষ আশা করা যায়)। এটি এমন একটি SELECT INTO
ক্যোয়ারী, যা আমাকে অবাক করে দিয়েছিল যে নিম্নলিখিত পরিস্থিতিটি ঘটতে পারে কিনা:
- নির্বাচন করুন কার্যকর করা হয়
- লক্ষ্য সারণী তৈরি করা হয়
- এটি নির্বাচন করা হিসাবে ডেটা .োকানো হয়
- ডিস্কটি পূরণ করে, সন্নিবেশটিকে ব্যর্থ করে তোলে
- নির্বাচন নির্বাচন বাতিল এবং ফিরে ঘূর্ণিত হয়
- রোলব্যাক স্থান মুক্ত করে (ইতিমধ্যে সন্নিবেশিত ডেটা সরানো হয়েছে), তবে এসকিউএল সার্ভার খালি স্থান ছেড়ে দেয় না।
এই পরিস্থিতিতে, তবে, আমি তৈরির টেবিলটি SELECT INTO
এখনও বিদ্যমান থাকার আশা করিনি , এটি রোলব্যাকের মাধ্যমে ফেলে দেওয়া উচিত। আমি এটি পরীক্ষা করেছি:
BEGIN TRANSACTION
SELECT T.x
INTO TMP.test
FROM (VALUES(1))T(x)
ROLLBACK
SELECT *
FROM TMP.test
এর ফলে:
(1 row affected)
Msg 208, Level 16, State 1, Line 8
Invalid object name 'TMP.test'.
তবুও লক্ষ্য সারণী বিদ্যমান। প্রকৃত ক্যোয়ারী একটি সুস্পষ্ট লেনদেনের মধ্যে কার্যকর করা হয়নি যদিও এটি লক্ষ্য সারণির অস্তিত্বকে ব্যাখ্যা করতে পারে?
আমি যে অনুমানগুলি এখানে স্কেচ করেছি তা কি সঠিক? এটি সম্ভবত ঘটতে পারে?