আমার জেনেরিক লগ টেবিল রয়েছে, প্রায় 5 মিটার সারি।
একটি "দৃ stores়ভাবে টাইপড" ক্ষেত্র রয়েছে যা ইভেন্টের ধরণ সঞ্চয় করে এবং "হারানো টাইপড" কলামগুলির একটি গোছা থাকে যা ইভেন্টের সাথে সম্পর্কিত ডেটা ধারণ করে। এটি হল, সেই "হারানো টাইপ করা" কলামগুলির অর্থ ইভেন্টের ধরণের উপর নির্ভর করে।
এই কলামগুলি হিসাবে সংজ্ঞায়িত করা হয়েছে:
USER_CHAR1 nvarchar(150) null,
USER_CHAR2 nvarchar(150) null,
USER_CHAR3 nvarchar(150) null,
USER_CHAR4 nvarchar(150) null,
USER_CHAR5 nvarchar(150) null,
USER_INTEGER1 int null,
USER_INTEGER2 int null,
USER_INTEGER3 int null,
USER_INTEGER4 int null,
USER_INTEGER5 int null,
USER_FLAG1 bit null,
USER_FLAG2 bit null,
USER_FLAG3 bit null,
USER_FLAG4 bit null,
USER_FLAG5 bit null,
USER_FLOAT1 float null,
USER_FLOAT2 float null,
USER_FLOAT3 float null,
USER_FLOAT4 float null,
USER_FLOAT5 float null
প্রতিটি ধরণের 1 এবং 2 কলামগুলি প্রচুর পরিমাণে ব্যবহৃত হয়, তবে 3 নম্বর থেকে শুরু হয়ে খুব কম ইভেন্টের ধরণের এই তথ্য সরবরাহ করে। তাই আমি প্রতিটি প্রকারে 3-5 কলাম চিহ্নিত করতে চেয়েছি SPARSE
।
আমি প্রথমে কিছু বিশ্লেষণ করেছি, এবং দেখেছি যে, প্রকৃতপক্ষে, এই কলামগুলির প্রত্যেকটিতে কমপক্ষে 80% ডেটা রয়েছে null
এবং প্রায় 100% ডেটা হয় null
। মতে 40% সেভিংস থ্রেশহোল্ড টেবিল , SPARSE
তাদের উপর একটি বিশাল জয় হবে।
তাই আমি গিয়ে SPARSE
প্রতিটি গ্রুপে 3-5 কলামে প্রয়োগ করেছি applied এখন রিপোর্ট করা হিসাবে আমার টেবিলটি ডেটা স্পেসে প্রায় 1.8 গিগাবাইট নেয় sp_spaceused
, অন্যদিকে স্পার্স করার আগে এটি 1 জিবি ছিল।
আমি চেষ্টা করেছিলাম dbcc cleantable
, কিন্তু এর কোনও প্রভাব ছিল না।
তারপরে dbcc shrinkdatabase
, কোনও প্রভাব নেই।
বিস্মিত, আমি অপসারণ SPARSE
এবং এর পুনরাবৃত্তি dbcc
। টেবিলের আকারটি 1.8 গিগাবাইটে থেকে যায়।
কি দেয়?
rowid int not null identity(1,1) primary key clustered
।