Sys.partition.rows কলামটি কতটা সঠিক?


14

সিস্টেম ভিউতে sys.partitionsএকটি কলাম "সারি" রয়েছে যা প্রদত্ত বিভাগে মোট সারির সংখ্যা। পার্টিশনবিহীন এমন কোনও টেবিলের জন্য (বা কেবল আপনি কীভাবে দেখছেন তার উপর নির্ভর করে কেবল একটি পার্টিশন রয়েছে) এই কলামটি সারণীতে সারিগুলির সংখ্যা দেয়।

আমি কৌতূহলী এই কলামটি কতটা সঠিক এবং আমি যদি এটির পরিবর্তে এটি ব্যবহার করতে পারি SELECT COUNT(1) FROM TableName। আমি এমন কিছু পরীক্ষা-নিরীক্ষা করেছি যেখানে একটি টেবিল তৈরি করা এবং কয়েক হাজার সারি যুক্ত করা, কয়েকশত মুছুন, আরও কয়েক হাজার ইত্যাদি যোগ করুন এবং গণনাটি সর্বদা শেষ হয়ে গেছে। তবে আমার কাছে প্রায় 700 মিল সারি এবং বেশ কয়েকটি সূচী সহ একটি টেবিল রয়েছে। sys.partitionsক্লাস্টারড ইনডেক্সের সারিটি আবার মারা গেছে, তবে অন্যান্য সূচীগুলি কিছুটা সামান্য প্রকরণ (+ -20 কে) দেখায়।

কেউ কি জানেন যে এই সারিটি কীভাবে গণনা করা হয় এবং যদি এটি প্রদর্শিত হবার মতো যথাযথ হয়?


4
আমি এখন যুগে যুগে সারি কলামের উপর ভিত্তি করে একটি কোয়েরি ব্যবহার করছি । এটি তারিখের বাইরে থাকা পর্যবেক্ষণ করেনি
বিলিংক

উত্তর:


13

বই অনলাইন জানিয়েছে যে সারি ক্ষেত্র " এই পার্টিশনে সারিগুলির আনুমানিক সংখ্যা নির্দেশ করে ।" অতএব আমি আশা করি এটি নিকটবর্তী হবে, তবে 100% সঠিক নয়, সময়ের 100%।

মাইকেল জিলবারস্টাইন পেরেকsys.partitions না দেওয়ার জন্য বন্যভাবে ভুল হওয়ার একটি উদাহরণ বলেছেন । এটি একটি সাধারণ ঘটনা না বলাই, তবে এটি সম্ভব।

sys.dm_db_index_physical_statsএমন record_countক্ষেত্র রয়েছে যা আরও নিখুঁত বলে মনে হচ্ছে, যদিও সচেতন থাকুন DMV চালানোর ফলে একটি রেডো ব্লকিংয়ের সমস্যা হতে পারে যদি আপনি এটি অলরেউইন রিডেবল মাধ্যমিক প্রতিরূপ হোস্টিংয়ের জন্য চালায়।

ব্যাখ্যা জন্য record_countক্ষেত্র নিম্নলিখিত তথ্য দেখায়:

রেকর্ডের মোট সংখ্যা।

একটি সূচকের জন্য, রেকর্ডের মোট সংখ্যা IN_ROW_DATA বরাদ্দ ইউনিটে বি-গাছের বর্তমান স্তরের ক্ষেত্রে প্রযোজ্য।

একটি স্তূপের জন্য, IN_ROW_DATA বরাদ্দ ইউনিটে মোট রেকর্ডের সংখ্যা।

একটি স্তূপের জন্য, এই ফাংশন থেকে ফিরে আসা রেকর্ডের সংখ্যার স্তূপের বিরুদ্ধে নির্বাচন করুন (*) চালিয়ে ফিরে আসা সারির সংখ্যার সাথে মেলে না। এটি কারণ একটি সারিতে একাধিক রেকর্ড থাকতে পারে। উদাহরণস্বরূপ, কিছু আপডেট পরিস্থিতিতে, একক হিপ সারিতে আপডেট অপারেশনের ফলে একটি ফরোয়ার্ডিং রেকর্ড এবং একটি ফরোয়ার্ড রেকর্ড থাকতে পারে। এছাড়াও, বেশিরভাগ বড় এলওবি সারিগুলি LOB_DATA সঞ্চয়স্থানে একাধিক রেকর্ডে বিভক্ত। LOB_DATA বা ROW_OVERFLOW_DATA বরাদ্দ ইউনিটগুলির জন্য, সম্পূর্ণ বরাদ্দ ইউনিটে মোট রেকর্ডের সংখ্যা।

স্ট্যাক ওভারফ্লোতেও একই রকম প্রশ্নের উত্তর মার্টিন স্মিথের দেখুন ।


1

বিওএল সত্যই এই কলামটির জন্য বলেছে "এই পার্টিশনে সারিগুলির আনুমানিক সংখ্যা নির্দেশ করে।" এবং আনুমানিক খুব আনুমানিক। আমি ইতিমধ্যে দেখেছি যে একটি নির্দিষ্ট পার্টিশনে আমার 1 টি রেকর্ড রয়েছে। sy.partitions.rows 4040 সারি ইঙ্গিত করছিল। এই রেকর্ডটি মোছার পরে এটি এখনও 4048 সারি ইঙ্গিত করে এমনকি সমস্ত সূচী পুনর্নির্মাণের পরেও So


দয়া করে, সেই প্রশ্নটির উত্সের লিঙ্কটি সরবরাহ করে আপনার প্রশ্নটি সম্পাদনা করুন। এটি আপনার উত্তরকে উন্নত করবে;)
রোনালদো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.