হ্যাপ টেবিলগুলির জন্য বৈধ ব্যবহারের পরিস্থিতিগুলি কী কী?


31

আমি বর্তমানে একটি উত্তরাধিকার ব্যবস্থাতে কিছু ডেটা আমদানি করছি এবং আবিষ্কার করেছি যে এই সিস্টেমটি একটি ক্লাস্টারযুক্ত সূচক ব্যবহার করে না। একটি দ্রুত গুগল অনুসন্ধান আমাকে হ্যাপ টেবিলগুলির ধারণার সাথে পরিচয় করিয়ে দিয়েছে এবং এখন আমি কৌতূহল বোধ করছি যে কোন ক্লাস্টার টেবিলের চেয়ে কোনও হিপ টেবিলের চেয়ে কী ব্যবহারের পরিস্থিতি পছন্দ করা উচিত?

যতদূর আমি বুঝতে পেরেছি যে একটি হিপ টেবিল কেবল নিরীক্ষার টেবিলের জন্য এবং / অথবা যেখানে সন্নিবেশগুলি নির্বাচনের চেয়ে অনেক বেশি ঘটে for এটি ডিস্কের স্থান এবং ডিস্ক I / O কে বাঁচাতে পারে যেহেতু কোনও ক্লাস্টারড ইনডেক্স বজায় রাখতে পারে না এবং খুব বিরল পাঠের কারণে অতিরিক্ত টুকরো টুকরো করার সমস্যা হয় না।


1
আপনি কি এসকিউএল সার্ভারের কথা বলছেন?
a_horse_with_no_name

@a_horse_with_no_name হ্যাঁ, আমি যে sry উল্লেখ করতে ভুলে গেছি
marc.d

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


উত্তর:


22

শুধুমাত্র বৈধ ব্যবহারের জন্য হয়

  • আমদানি / রফতানি / ইটিএল প্রক্রিয়াগুলিতে ব্যবহৃত টেবিলগুলির মঞ্চ।
  • অ্যাড-হক, টেবিলগুলি ব্যবহার করে অস্থায়ী এবং স্বল্পমেয়াদী ব্যাকআপ SELECT * INTO..

মঞ্চ টেবিলগুলি সাধারণত বেশ ফ্ল্যাট এবং ব্যবহারের আগে / পরে ছাঁটা হয়।

লক্ষ্য করুন ক্লাস্টার সূচক ডেটা আকার তুলনায় সাধারণত কয়েক ছোট: ডেটা হয় সূচক কাঠামো সর্বনিম্ন স্তর।

হিপ টেবিলগুলিরও সমস্যা আছে। কমপক্ষে এগুলি:

এছাড়াও দেখুন


2
এটি সাধারণত দুটি পৃথক জিনিসের জন্য গাদা ব্যবহার করে। ইটিএল স্টেজিং এবং ওয়ার্ক টেবিলগুলি যখন অস্থায়ীভাবে ডেটা সঞ্চয় করার জন্য আমি ব্যবহার করি যখন কোনও টেম্প টেবিল কার্যকরভাবে কাজ করার জন্য সেট বড় হয়। এর সবগুলিই পরবর্তী লোডে কেটে গেছে।
জেন 17

যাইহোক ভাল প্রশ্ন।
জেন 17

1
একটি সামান্য ঝাঁকুনি - আপনি পরিবর্তন করার আগে যদি একটি ছোট টেবিলের দ্রুত ব্যাকআপ তৈরি করতে আপনি একটি নির্বাচন করুন তবে ডিফল্টরূপে একটি গাদা তৈরি হবে। আমি বলব যে এটি একটি বৈধ ব্যবহার - তবে এটি কেবল নিট-পিকিং। আমার কাজটি শেষ হয়ে গেছে জানতে পেরে আমি সেই স্তূপ থেকে মুক্তি পেতে চাই।
ব্রেন্ট ওজার

@ ব্রেন্ট ওজার: একমত হোন, আমি নিজেই সারাক্ষণ এটি করি। আমার উত্তরের
স্পিরিটি

9

প্রধান বিবেচনা

আমি স্তূপগুলির জন্য একটি গুরুত্বপূর্ণ সুবিধা এবং একটি ক্লাস্টার্ড টেবিলগুলির জন্য দেখছি, তৃতীয় বিবেচনা যা কোনওভাবেই যেতে পারে।

  • একটি গাদা আপনাকে ইন্ডিয়ারেশনের একটি স্তর বাঁচায়। সূচকগুলিতে ডিস্কের স্থানে সরাসরি (ভাল, আসলে নয়, তবে সম্ভবত সরাসরি) পয়েন্ট করা সারি আইডি থাকে। সুতরাং, একটি স্তূপের বিপরীতে একটি সূচক অনুসন্ধানের জন্য ক্লাস্টার টেবিলের বিপরীতে প্রায় অর্ধেক ক্লাস্টারযুক্ত সূচকের জন্য ব্যয় করা উচিত।

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

  • হিপস রেফারেন্স RIDs এর সূচকগুলি, যা b৪ বিট। উল্লিখিত হিসাবে, ক্লাস্টারযুক্ত টেবিলের অ-ক্লাস্টারযুক্ত সূচকগুলি ক্লাস্টারিং কীটি উল্লেখ করে, যা ছোট (32-বিট INT), একই (64-বিট BIGINT), বা বড় (48-বিট DATETIME2()প্লাস 32-বিট INT, বা একটি 128-বিট জিইউইডি)। স্পষ্টতই বৃহত্তর এবং আরও ব্যয়বহুল সূচকগুলির জন্য আরও বিস্তৃত রেফারেন্স তৈরি করে।

স্থান প্রয়োজনীয়তা

এই দুটি টেবিল সহ:

CREATE TABLE TmpClustered
(
ID1 INT NOT NULL,
ID2 INT NOT NULL
)
ALTER TABLE TmpClustered ADD CONSTRAINT PK_Tmp1 PRIMARY KEY CLUSTERED (ID1)
CREATE UNIQUE INDEX UQ_Tmp1 ON TmpClustered (ID2)

CREATE TABLE TmpNonClustered
(
ID1 INT NOT NULL,
ID2 INT NOT NULL
)
ALTER TABLE TmpNonClustered ADD CONSTRAINT PK_Tmp2 PRIMARY KEY NONCLUSTERED (ID1)
CREATE UNIQUE INDEX UQ_Tmp2 ON TmpNonClustered (ID2)

... প্রতিটি 8.7 এম রেকর্ড সহ জনবহুল, উভয়ের জন্য ডেটার জন্য প্রয়োজনীয় স্থানটি ছিল 150 এমবি; ক্লাস্টার্ড টেবিলের সূচকগুলির জন্য 120 এমবি, ক্লাস্টারযুক্ত টেবিলের সূচকগুলির জন্য 310 এমবি MB এটি প্রতিফলিত করে যে গোষ্ঠী সূচকটি একটি আরআইডি থেকে সংকীর্ণ এবং ক্লাস্টারিং সূচকটি বেশিরভাগ ক্ষেত্রে একটি "ফ্রিবি"। অনন্য সূচকগুলি ছাড়া ID2, সূচক স্থানটি নন-ক্লাস্টারযুক্ত টেবিলের জন্য 155 এমবি নেমে যেতে হবে (অর্ধেক, আপনি যেমনটি আশা করেছিলেন) তবে ক্লাস্টারড পিকে জন্য কেবল 150 কেবি - কিছুই নেই close

সুতরাং একটি ক্লাস্টার টেবিলের একটি 32-বিট ক্ষেত্রের 32-বিট ক্ষেত্রের একটি নন-ক্লাস্টারড সূচকটি 32-বিট সূচক (মোট 64 বিট, নামমাত্র) 120 এমবি নিয়েছে, যখন একটি ap৪-বিটের ক্ষেত্রের একটি 32২-বিট ক্ষেত্রের সূচক index আরআইডি (মোট 96৯ বিট, নামমাত্র) ১৫৫ এমবি নিয়েছে, ৫০% বৃদ্ধিের তুলনায় একটু কম, একজন নির্লজ্জভাবে -৪-বিট থেকে ৯ 96-বিট কীগুলিতে যাবেন বলে আশাবাদী, তবে অবশ্যই ওভারহেড রয়েছে যা আকারের কার্যকর পার্থক্যকে হ্রাস করে।

দুটি টেবিলের জনসংখ্যা এবং তাদের সূচকগুলি তৈরি করা প্রতিটি টেবিলের জন্য একই পরিমাণে সময় নেয়। স্ক্যানগুলি বা সন্ধানের সাথে জড়িত সাধারণ পরীক্ষা চালানো, আমি টেবিলগুলির মধ্যে কোনও বস্তুগত পারফরম্যান্সের পার্থক্য পাই না, যা মাইক্রোসফ্ট হোয়াইট পেপারের সাথে মেলে যা জিবিএন সাহায্যে লিঙ্কযুক্ত। সাইড পেপার উচ্চতর একত্রে অ্যাক্সেসের জন্য উল্লেখযোগ্য পার্থক্য দেখায়; কেন এমনটি হয় তা সম্পর্কে আমি নিশ্চিত নই, আশা করি উচ্চ-ভলিউম ওয়ালটিপি সিস্টেমগুলির সাথে আমার চেয়ে বেশি অভিজ্ঞ কেউ আমাদের বলতে পারেন can

এলোমেলো পরিবর্তনশীল-দৈর্ঘ্যের ডেটা ~ 40 বাইট যুক্ত করার সাথে এই সমতাটি প্রশংসনীয়ভাবে পরিবর্তন হয়নি change INTএর প্রশস্ত ইউআইডিগুলির সাথে প্রতিস্থাপন করা হয় নি (প্রতিটি টেবিল প্রায় একই পরিমাণে ধীর হয়ে গেছে)। আপনার মাইলেজটি ভিন্ন হতে পারে, তবে বেশিরভাগ ক্ষেত্রে কোনও সূচক পাওয়া যায় কিনা তা কোন ধরণের চেয়ে গুরুত্বপূর্ণ।

বিট এবং টুকরা

একটি ক্লাস্টারবিহীন সূচকের বিরুদ্ধে একটি পরিসীমা স্ক্যান করা - কারণ টেবিলটি হিপ বা সূচকটি ক্লাস্টারড সূচক নয় - সূচিটি স্ক্যান করা এবং তারপরে প্রতিটি হিটের জন্য টেবিলের বিপরীতে নজর রাখা জড়িত। এটি খুব ব্যয়বহুল হতে পারে, তাই এটি কেবল কখনও টেবিল স্ক্যান করার জন্য সস্তা। তবে আপনি একটি প্রচ্ছদ সূচক দিয়ে এটিকে ঘিরে কাজ করতে পারেন। আপনি আপনার টেবিল ক্লাস্টার করেছেন কিনা তা এটি প্রয়োগ করে।

@ জিবিএন যেমন উল্লেখ করেছে, একটি গাদা সংযোগের সহজ উপায় নেই simple তবে, যদি আপনার টেবিলটি ধীরে ধীরে সময়ের সাথে বাড়তে থাকে - খুব সাধারণ ক্ষেত্রে - তবে মুছে ফেলার মাধ্যমে খালি স্থানটি নতুন ডেটা দ্বারা পূরণ করা হওয়ায় সামান্য বর্জ্য হবে।

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

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

টি এল; ডিআর

আমি ডেটা গুদামজাতকারী লোক, কোনও ওলটিপি বিশেষজ্ঞ নই। প্রকৃত সারণীগুলির জন্য আমি প্রায় সর্বদা মাঠে একটি ক্লাস্টারিং সূচক ব্যবহার করি যা বেশিরভাগ ক্ষেত্রে রেঞ্জ স্ক্যানের প্রয়োজন হয় সাধারণত সাধারণত একটি তারিখের ক্ষেত্র। মাত্রা সারণীর জন্য আমি পিকে ক্লাস্টার করি যাতে এটি সংযুক্তির জন্য প্রস্তাবিত ফ্যাক্ট টেবিলের সাথে যোগ দেয়।

ক্লাস্টারিং সূচকগুলি ব্যবহার করার বিভিন্ন কারণ রয়েছে, তবে যদি সেগুলির কোনওটিই প্রয়োগ না করে তবে ওভারহেড সার্থক নাও হতে পারে। আমি সন্দেহ করি যে সার্বজনীনভাবে ক্লাস্টারড ইনডেক্সগুলি ব্যবহার করে লোকদের পিছনে "আমরা সর্বদা এটি করেছি" এবং "এটি কেবল সেরা অনুশীলন" there's আপনার ডেটা এবং আপনার বোঝা উভয় দিয়ে চেষ্টা করুন এবং দেখুন কি ভাল কাজ করে।


5

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

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

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

এছাড়াও, আমি মনে করি পৃষ্ঠাগুলি ছড়িয়ে ছিটিয়ে থাকা সম্পর্কে তর্কটি কিছুটা বেমানান। ক্লাস্টারড ইনডেক্সগুলিও পুরো পৃষ্ঠাতে তাদের পৃষ্ঠাগুলি ছড়িয়ে দিতে পারে। এটি ঠিক যে পুনরায় ইনডেক্সিংয়ের পরে (1000 পৃষ্ঠাগুলির বেশি ধরে ধরে) এটি একটি স্তূপের চেয়ে ভাল হতে পারে তবে তারপরে আপনাকেও পুনরায় সূচী করতে হয়েছিল।

যদি উদ্বেগ থাকে তবে স্পার্স কলাম এবং সংক্ষেপণ ব্যবহার করে স্থান বাঁচানোও সম্ভব। এটি সত্য যে কোনও কোনও ক্ষেত্রে ক্লাস্টারযুক্ত সূচকের সাথে একটি টেবিলের উপর নির্বাচন করা দ্রুততর হতে পারে তবে এটি লোড করতে এবং এটি বজায় রাখতে প্রয়োজনীয় সংস্থানগুলি সহ আপনার এটি বিবেচনা করতে হবে।

[সম্পাদনা] আমার সম্ভবত পরিষ্কার করা উচিত যে কেবলমাত্র আমাদের বিভাজনবিহীন ফ্যাক্ট টেবিলগুলি হিপ। পার্টিশনযুক্ত টেবিল এবং ডাইমেনশন সারণী সমস্তগুলিতে দক্ষ লকআপগুলি সমর্থন করার জন্য ক্লাস্টারযুক্ত সূচি রয়েছে [[সম্পাদনা 2] ২.২ বিলিয়ন থেকে ১.৫ বিলিয়ন re কিন্তু, এই দুটি সংখ্যা একে অপরের পাশে। আমার অনুমান ফোনে প্রতিক্রিয়া টাইপ করার পরে কী ঘটে ...

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