একটি গাদা উপর সংক্ষেপণ


14

মাইক্রোসফ্ট ডক্সের অনুচ্ছেদটি নিম্নলিখিত :

ডিএমএল ক্রিয়াকলাপের অংশ হিসাবে একটি স্তূপে বরাদ্দ করা নতুন পৃষ্ঠাগুলি গাদাটি পুনর্নির্মাণ না করা পর্যন্ত PAGE সংক্ষেপণ ব্যবহার করবে না। কম্প্রেশন অপসারণ এবং পুনরায় প্রয়োগ করে বা একটি ক্লাস্টার্ড সূচক তৈরি করে এবং মুছে ফেলার মাধ্যমে গাদা পুনর্নির্মাণ।

আমি কেন বুঝতে পারি না কেন এই ঘটনাটি ঘটেছে। যদি আমার কাছে একটি নির্দিষ্ট সংক্ষেপণ সেটিং সহ একটি গাদা থাকে, তবে কেন এটি টেবিলের সাথে সম্পর্কিত কোনও পৃষ্ঠায় প্রয়োগ করা হবে না?

ধন্যবাদ

উত্তর:


12

পার্থক্যগুলির জন্য দায়ী এমন নির্দিষ্ট অভ্যন্তরীণ প্রক্রিয়া (গুলি) আমি জানি না, তবে আমি বলতে পারি যে হিপগুলি ক্লাস্টারড ইনডেক্স (এবং সম্ভবত অবিচ্ছিন্ন সূচকগুলি) থেকে কিছুটা আলাদাভাবে পরিচালিত হয় (অভ্যন্তরীণভাবে):

  • এক বা একাধিক ডেটা পৃষ্ঠাগুলি ফাঁকা (কোনও বরাদ্দকৃত সারি নেই) প্রয়োজনীয়ভাবে সেই স্থানটি খালি করে না এমন একটি গাদা থেকে সারিগুলি মোছা। আপনার সম্ভবত টেবিলের উপর একটি ক্লাস্টারড সূচক তৈরি করতে হবে এবং তারপরে ড্রপ করতে হবে বা ALTER TABLE [TableName] REBUILD;(এসকিউএল সার্ভার ২০১৪ হিসাবে) কল করতে হবে ? আরও বিশদ এবং বিকল্পগুলির জন্য দয়া করে মোছার জন্য মাইক্রোসফ্ট ডক্স পৃষ্ঠা দেখুন।

  • পৃথক সারিগুলি (অর্থাত্ কোনও সেট-ভিত্তিক নয় INSERT) একটি গাদাতে োকানো ক্লাস্টারড ইনডেক্সগুলির সাথে পুরোপুরি ডেটা পৃষ্ঠাগুলি পূরণ করে না। ক্লাস্টারড ইনডেক্সগুলি সারি সারি ফিট করবে যতক্ষণ না সারি (ডেটা এবং সারি-ওভারহেড) প্লাস স্লট অ্যারের 2-বাইট ওভারহেডের জন্য জায়গা থাকে। হিপসের ডেটা পৃষ্ঠাগুলি, পৃষ্ঠাতে থাকা বাইটের সংখ্যাটি ব্যবহার করবেন না, তবে পৃষ্ঠাগুলি কতটা পূর্ণ তার একটি খুব সাধারণ সূচক ব্যবহার করুন, এবং এমন অনেকগুলি স্তর নেই যা জানা গেছে। স্তরগুলি 0%, 20%, 50%, 80%, এবং 100% পূর্ণ এর লাইনে এমন কিছু। এবং এটি অন্য 100 টির জন্য এখনও স্থান থাকা অবস্থায় এটি 100% এ চলে যাবে (এবং প্রকৃতপক্ষে, সেট-ভিত্তিক ক্রিয়াকলাপে একই সংখ্যক সারি সন্নিবেশ করানো হয়েছিল, তবে এটি পৃষ্ঠাটি যতটা সম্ভব পূরণ করবে)। অবশ্যই, ঠিক যেমনDELETE অপারেশনস, হিপ পুনর্নির্মাণ ডেটা পৃষ্ঠায় যতটা সারি প্যাক করবে।

পৃষ্ঠা সংক্ষেপণ বাস্তবায়নের জন্য মাইক্রোসফ্ট ডক্স পৃষ্ঠার "যখন পৃষ্ঠা সংক্ষেপণ ঘটে" বিভাগ থেকে নেওয়া নিম্নলিখিত তথ্যগুলি এখন বিবেচনা করুন :

... প্রথম ডেটা পৃষ্ঠায় ডেটা যুক্ত হওয়ার সাথে সাথে ডেটা সারি-সংকুচিত হয়। ... পৃষ্ঠাটি পূর্ণ হয়ে গেলে, পরবর্তী সারিতে যুক্ত করা পৃষ্ঠা সংক্ষেপণ অপারেশন শুরু করে। পুরো পৃষ্ঠাটি পর্যালোচনা করা হয়েছে; ...

অতএব, এই অন্যান্য হিপ আচরণের সাথে পুরোপুরিভাবে ইনলাইন মনে হচ্ছে তাদের ডেটা পৃষ্ঠাগুলি লিখিত হওয়ার আগে তাদের একটি ক্লাস্টার ইনডেক্সের একটি অল্টার টেবিল রিবিল্ড, তৈরি / ড্রপ, বা ডেটা কমপ্রেসন সেটিং-এ পরিবর্তনের (সমস্ত কিছুই হিপ পুনর্নির্মাণ) প্রয়োজন হবে seems সন্তোষজনক ভাবে। হ্যাপগুলি যদি "পুরো পৃষ্ঠাগুলি" সম্পর্কে পুরোপুরি সচেতন না হয় (হিপটি পুনরায় তৈরি না হওয়া অবধি) এবং পৃষ্ঠাটি কখন নিশ্চিতভাবে পূর্ণ হয় তা না জানলে পৃষ্ঠার সংক্ষেপণ ক্রিয়াকলাপ কখন শুরু করা হবে তা আপডেটগুলি জানায় না এবং আপডেট করার পরে -রো সন্নিবেশ)।

আরেকটি প্রযুক্তিগততা যা স্বয়ংক্রিয়ভাবে প্রয়োগ করা পৃষ্ঠা সংক্ষেপণ থেকে কিছু হ্যাপকে সীমাবদ্ধ করে তুলবে (এমনকি তারা অন্যথায় পারেও না) হ'ল সংক্ষেপণ প্রয়োগের জন্য সেই হিপটির (যদি কোনও উপস্থিত থাকে) পুনর্নির্মাণের জন্য সমস্ত নন-ক্ল্লাস্টারড সূচকগুলির প্রয়োজন হবে। যেমন "ডেটা সংক্ষেপণ" এর জন্য লিঙ্কযুক্ত পৃষ্ঠাটিও বলেছে:

একটি হিপের সংকোচনতা সেটিং পরিবর্তন করার জন্য টেবিলের সমস্ত অবিচ্ছিন্ন সূচকগুলি পুনরায় তৈরি করা দরকার যাতে তাদের স্তূপে নতুন সারির অবস্থানগুলিতে পয়েন্টার থাকে।

"পয়েন্টারগুলি" উল্লেখ করা হচ্ছে হ'ল সারি আইডি (আরআইডি), যা পৃষ্ঠার ফাইলআইডি, পেজআইডি এবং স্লট / অবস্থানের সংমিশ্রণ। এই আরআইডিগুলি ননক্র্লাস্টারড ইনডেক্সগুলিতে অনুলিপি করা হয়। একটি নির্দিষ্ট শারীরিক অবস্থান হওয়ায় তারা কখনও কখনও ক্লাস্টারড ইনডেক্স কীগুলির সাথে একটি বি-ট্রিকে অনুসরণ করার চেয়ে দ্রুত অনুসন্ধান করে। তবে, কোনও দৈহিক অবস্থানের একটি অপূর্ণতা হ'ল এটি পরিবর্তন হতে পারে এবং এটি এখানে সমস্যা। ক্লাস্টারড ইনডেক্সগুলি অবশ্য এই সমস্যায় ভুগছেন না কারণ তাদের মূল মানগুলি ক্লাস্টারড ইনডেক্সের পয়েন্টার হিসাবে ননক্র্লাস্টারড ইনডেক্সগুলিতে অনুলিপি করা হয়েছে। এবং মূল মানগুলি একই থাকে, এমনকি যখন তাদের শারীরিক অবস্থান পরিবর্তন হয়।

আরও দেখুন:

  • হিপসের জন্য মাইক্রোসফ্ট ডক্স পৃষ্ঠার "ম্যানেজিং হিপস" বিভাগ (ক্লাস্টার ইনডেক্স ছাড়া টেবিলগুলি) :

    নষ্ট স্থান পুনরুদ্ধার করতে একটি গাদা পুনর্নির্মাণ করতে, স্তূপে একটি ক্লাস্টারড সূচক তৈরি করুন এবং তারপরে সেই ক্লাস্টারড সূচকটি ফেলে দিন।

  • ডেটা সংক্ষেপণের জন্য মাইক্রোসফ্ট ডক্স পৃষ্ঠার "যখন আপনি সারি এবং পৃষ্ঠা সংক্ষেপণ ব্যবহার করেন তখন বিবেচনাগুলি :"

    পৃষ্ঠা-স্তরের সংক্ষেপণের জন্য যখন একটি গাদা কনফিগার করা থাকে, পৃষ্ঠাগুলি কেবল নিম্নলিখিত পদ্ধতিগুলিতে পৃষ্ঠা-স্তরীয় সংক্ষেপণ পান:

    • ডেটা বাল্ক অপ্টিমাইজেশান সক্ষম সহ বাল্ক আমদানি করা হয়।
    • INSERT INTO ব্যবহার করে ডেটা isোকানো হয় ... (ট্যাবলক) সিনট্যাক্স সহ এবং টেবিলটিতে একটি অবিচ্ছিন্ন সূচক নেই।
    • ALTER TABLE চালিয়ে একটি সারণী পুনঃনির্মাণ করা হয়েছে ... PAGE সংক্ষেপণ বিকল্পের সাথে বিবৃতিটি পুনরায় বিল্ড করুন।

    এবং প্রশ্নে উদ্ধৃত বিবৃতি।


1

এসকিউএল সার্ভারের প্রতিটি প্রক্রিয়া এমন নয় যে আমরা বিশ্বাস করি এটি হওয়া উচিত।

পল রান্ডাল বিষয়টি পরিচালনা করার জন্য একটি শক্তিশালী সুপারিশ দিয়েছেন।

http://www.sqlskills.com/blogs/paul/a-sql-server-dba-myth-a-day-2930-fixing-heap-fragmentation/

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