এসকিউএল সার্ভার ২০১২-তে একটি পিকে জিইউডিকে সূচীকরণ করা হচ্ছে


13

আমার বিকাশকারীরা তাদের সমস্ত টেবিলের জন্য জিইউইডিটিকে পিকে হিসাবে ব্যবহারের জন্য তাদের অ্যাপ্লিকেশন সেটআপ করেছে এবং ডিফল্টরূপে এসকিউএল সার্ভার এই পিকেগুলিতে ক্লাস্টারড সূচক সেটআপ করেছে।

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

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

এটি কি ক্লাস্টারিং কীটি আরও প্রশস্ত করবে এবং লেখার জন্য এটি কার্য সম্পাদনকে বাড়িয়ে দেবে? পাঠগুলিও গুরুত্বপূর্ণ, তবে লেখাগুলি সম্ভবত এই মুহুর্তে আরও বড় উদ্বেগ।


1
জিইউডিগুলি কীভাবে উত্পন্ন হয়? নিউআইডিড বা নিউসকোয়েনটিয়াল্ড?

6
ক্লাস্টার গাইড এবং সন্নিবেশ কর্মক্ষমতা কেবলমাত্র একটি বাক্যে থাকতে হবে যদি অবিলম্বে "পারফরম্যান্স" এর আগের শব্দটি ছোট করা হয়
বিলিংক

2
এই বিকাশকারীদের মধ্যাহ্নভোজের জন্য বাইরে নিয়ে যান এবং তাদের বুঝিয়ে দিন যে তারা যদি নতুনকিড () পুনরায় প্রাথমিক কী হিসাবে ব্যবহার করে তবে আপনি তাদের উপর খারাপ পারফরম্যান্সকে দোষ দেবেন। তারা তাড়াতাড়ি আপনাকে জিজ্ঞাসা করবে যে এটি রোধ করতে কী করা উচিত। কোন মুহুর্তে, আপনি পরিবর্তে পরিচয় (1,1) ব্যবহার করুন বলছেন। (সম্ভবত একটি সামান্য ওভারসিম্প্লিফিকেশন তবে এটি 10 ​​এর মধ্যে 9 বার কার্যকর হবে)।
ম্যাক্স ভার্নন

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

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

উত্তর:


20

জিইউডিগুলির সাথে প্রাথমিক সমস্যাগুলি, বিশেষত অ-অনুক্রমিক সমস্যাগুলি হ'ল:

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

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

জিইউইডিগুলির আশেপাশের প্রাথমিক প্রশ্নটি সেগুলি কতটা প্রয়োজনীয়। তাদের মতো বিকাশকারীরা কারণ তারা বিশ্বব্যাপী স্বতন্ত্রতা নিশ্চিত করে, তবে এটি বিরল ঘটনা যে এই জাতীয় স্বতন্ত্রতা প্রয়োজনীয়। তবে বিবেচনা করুন যে যদি আপনার সর্বাধিক সংখ্যার মানটি 2,147,483,647 (4 বাইট স্বাক্ষরিত পূর্ণসংখ্যার সর্বাধিক মান) এর চেয়ে কম হয়, তবে আপনি সম্ভবত আপনার কীটির জন্য উপযুক্ত ডেটা টাইপ ব্যবহার করছেন না। এমনকি বিজিআইএনটি (8 বাইট) ব্যবহার করেও আপনার সর্বাধিক মান 9,223,372,036,854,775,807। আপনার যদি কোনও অনন্য কীটির জন্য কিছু অটো-ইনক্রিমেন্টিং মান প্রয়োজন হয় তবে এটি কোনও অ-গ্লোবাল ডাটাবেস (এবং অনেকগুলি বিশ্বব্যাপী) জন্য সাধারণত পর্যাপ্ত।

অবশেষে, একটি ক্লাস্টারড ইনডেক্সের তুলনায় হিপ ব্যবহারের ক্ষেত্রে, আপনি যদি খাঁটি ডেটা লেখেন তবে একটি স্তুপ সবচেয়ে কার্যকর হবে কারণ আপনি সন্নিবেশগুলির জন্য ওভারহেড হ্রাস করছেন। যাইহোক, এসকিউএল সার্ভারে হ্যাপগুলি তথ্য পুনরুদ্ধারের জন্য অত্যন্ত অদক্ষ fficient আমার অভিজ্ঞতা হ'ল যদি আপনার কাছে কোনও ঘোষণা করার সুযোগ থাকে তবে একটি ক্লাস্টারড সূচক সর্বদা কাম্য। আমি একটি টেবিলে একটি ক্লাস্টার ইনডেক্স যুক্ত করতে দেখেছি (4 বিলিয়ন + রেকর্ডস) 6 এর ফ্যাক্টর দ্বারা সামগ্রিক নির্বাচনের কর্মক্ষমতা উন্নত করে।

অতিরিক্ত তথ্য:


13

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

এসকিউএল সার্ভারে জিইউইডি একটি দুর্দান্ত সমস্যা - এমন একটি বিস্তৃত বিশ্বাস রয়েছে, মূলত এটি বেশ সহজ। প্রকৃতপক্ষে, জিইউডি প্রায় 8 টিরও বেশি কোর সহ বাক্সগুলিতে উল্লেখযোগ্যভাবে আরও স্কেলযোগ্য হতে পারে:

আমি দুঃখিত, তবে আপনার বিকাশকারীরা ঠিক বলেছেন। জিইউইডি সম্পর্কে উদ্বিগ্ন হওয়ার আগে অন্যান্য বিষয় নিয়ে উদ্বেগ প্রকাশ করুন।

ওহ, এবং শেষ পর্যন্ত: আপনি কেন প্রথম স্থানে একটি ক্লাস্টার সূচক চান? যদি আপনার উদ্বেগটি হ'ল অনেকগুলি ছোট সূচী সহ একটি ওলটিপি সিস্টেম হয় তবে আপনি সম্ভবত একটি গাদা দিয়ে ভাল better

আসুন এখন বিবেচনা করা যাক আপনার বিভাজনগুলিকে কী বিভাজন (জিইউইডি প্রবর্তন করবে) তা করে। খণ্ডিতকরণের সাথে তিনটি বড় সমস্যা রয়েছে:

  1. পৃষ্ঠা বিভাজন ব্যয় ডিস্ক I / O
  2. অর্ধ পূর্ণ পৃষ্ঠা পুরো পৃষ্ঠাগুলির মতো মেমরির দক্ষ নয়
  3. এটি পৃষ্ঠাগুলিকে অর্ডার থেকে সঞ্চিত করে তোলে, যা ক্রমান্বয়ে I / O কম সম্ভাবনা তৈরি করে

যেহেতু প্রশ্নটিতে আপনার উদ্বেগটি স্কেলিবিলিটি সম্পর্কিত, যা আমরা "আরও বেশি হার্ডওয়ার যুক্ত করা সিস্টেমকে দ্রুত এগিয়ে যায়" হিসাবে সংজ্ঞা দিতে পারি এগুলি আপনার সমস্যাগুলির মধ্যে সর্বনিম্ন। ঘুরে ঘুরে প্রত্যেককে সম্বোধন করা

বিজ্ঞাপন 1) আপনি যদি স্কেল চান তবে আপনি I / O কিনতে পারবেন। এমনকি একটি সস্তার স্যামসুং / ইন্টেল 512 জিবি এসএসডি (কয়েক ইউএসডি / জিবিতে) আপনাকে 100 কে আইওপিএসের চেয়ে ভাল উপার্জন করতে পারে। আপনি যে কোনও সময় খুব শীঘ্রই 2 সকেট সিস্টেমে ব্যবহার করছেন না। এবং যদি আপনার এটির দিকে চালানো উচিত তবে আরও একটি কিনুন এবং আপনি সেট হয়ে গেছেন

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

বিজ্ঞাপন 3) প্রায়শই পৃষ্ঠ বিভক্ত হয়ে একটি টেবিল তৈরি করা হয়, অত্যন্ত খণ্ডিত তথ্য যথাযথভাবে ভরা টেবিলগুলি একই গতিতে I / O এ এলোমেলো করে তোলে

যোগদানের ক্ষেত্রে, দুটি বড় জোয়ার প্রকার রয়েছে যা আপনি কোনও ওলডিপিতে কাজের চাপের মতো দেখতে পাবেন: হ্যাশ এবং লুপ। ঘুরে ফিরে প্রতিটি তাকান:

হ্যাশ জয়েন: একটি হ্যাশ জোড় ধরে নেয় যে ছোট টেবিলটি স্ক্যান করা হয়েছে এবং বড়টি সাধারণত সন্ধান করা হয়। ছোট টেবিলগুলি মেমরির মধ্যে রয়েছে বলে খুব সম্ভবত, তাই এখানে I / O আপনার উদ্বেগ নয়। আমরা ইতিমধ্যে এই বিষয়টি স্পর্শ করেছি যে সন্ধানগুলি একটি খণ্ডিত সূচকের মতো খণ্ডিত সূচীতে একই ব্যয়

লুপ যোগ: বাইরের টেবিল সন্ধান করা হবে। একই খরচ

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

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

  1. একটি সারণী থেকে যোগদানের সাথে এতে উল্লেখ করা সারণীর প্রাথমিক কীটিতে বিদেশী কী উল্লেখ রয়েছে

  2. অন্যদিকে

বিজ্ঞাপন 1) এই ক্ষেত্রে, আপনি প্রাথমিক কীতে একক অনুসন্ধানের জন্য যাচ্ছেন - এন থেকে 1 এ যোগদান করা Fra

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

এই মুহুর্তের জন্য বিদেশী কীগুলি বিবেচনা করুন। এমনকি যদি আপনার "নিখুঁতভাবে" সিক্যুয়াল ছিল আমাদের প্রাথমিক কীগুলি রেখেছিল - সেই কীটির দিকে ইশারা করা যে কোনও কিছু এখনও তাত্ক্ষণিক নয়।

অবশ্যই, আপনি কোনও ব্যাংকের কিছু SAN- তে ভার্চুয়াল মেশিনে চালিত হতে পারেন যিনি অর্থের বিনিময়ে সস্তা এবং প্রক্রিয়াতে বেশি। তাহলে এই সমস্ত উপদেশ হারিয়ে যাবে। তবে এটি যদি আপনার বিশ্ব হয় তবে স্কেলাবিলিটি সম্ভবত আপনি যা খুঁজছেন তা নয় - আপনি কর্মক্ষমতা এবং উচ্চ গতি / ব্যয় খুঁজছেন - যা উভয়ই আলাদা জিনিস।


1
মন্তব্যগুলি বর্ধিত আলোচনার জন্য নয়; এই কথোপকথন চ্যাটে সরানো হয়েছে ।
পল হোয়াইট 9

5

থমাস: আপনার কয়েকটি বিষয় পুরোপুরি বুঝে গেছে এবং আমি তাদের সাথে একমত আছি। আপনি যদি এসএসডিগুলিতে থাকেন তবে আপনি যা অনুকূল করেন তার ভারসাম্য বদলে যায়। র‌্যান্ডম বনাম সিক্যুয়ালিটি স্পিনিং ডিস্কের মতো একই আলোচনা নয়।

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

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

তবে আমি জিইউইডিগুলির বিকল্প ব্যবহার করার ঝোঁক এখানে একটি ডেটাটাইপের জন্য আমার ব্যক্তিগত পছন্দটি অ্যাপ্লিকেশনটির দ্বারা তৈরি একটি বিশ্বব্যাপী অনন্য বিগিন্ট। এই কাজটি সম্পর্কে কেউ কীভাবে যায়? অতি তুচ্ছ উদাহরণে, আপনি একটি জিইউডি হ্যাশ করতে আপনার অ্যাপ্লিকেশনটিতে একটি ছোট, খুব হালকা ওজনের ফাংশন যুক্ত করেন। আপনার হ্যাশ ফাংশনটি দ্রুত এবং তুলনামূলক দ্রুত বলে ধরে নেওয়া (এক উদাহরণের জন্য গুগল থেকে সিটিহ্যাশ দেখুন: http://google-opensource.blogspot.in/2011/04/introducing-cityhash.html - নিশ্চিত করুন যে আপনি সমস্ত সংকলন পদক্ষেপগুলি সঠিকভাবে পেয়েছেন, অথবা সরল কোডের জন্য http://tools.ietf.org/html/draft-eastlake-fnv-03 এর FNV1a বৈকল্পিক ) এর ফলে আপনাকে অ্যাপ্লিকেশন উত্পন্ন অনন্য শনাক্তকারী এবং একটি 64 বিট কী মান উভয়ই পেতে পারে যা সিপিইউগুলি আরও ভালভাবে কাজ করে ।

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


2
আমি আপনাকে ওপি-র প্রশ্নের উত্তর হিসাবে আপনার উত্তর সম্পাদনা করার পরামর্শ দিচ্ছি এবং টমাসের উত্তরের উত্তর হিসাবে (এখনকার মতো নয়)। আপনি এখনও টমাস (, মাইকফালের) এবং আপনার পরামর্শের মধ্যে পার্থক্যগুলি হাইলাইট করতে পারেন।
ypercubeᵀᴹ

2
প্রশ্নের আপনার উত্তর ঠিকানা দয়া করে। আপনি যদি না করেন তবে আমরা এটি আপনার জন্য সরিয়ে ফেলব।
জেএনকে

2
মন্তব্যের জন্য ধন্যবাদ। আপনি যখন নিজের উত্তরটি সম্পাদনা করেন (যা আমি মনে করি যে খুব ভাল প্রসঙ্গটি সরবরাহ করে) আমি একটি জিনিস পরিবর্তন করব: পরিচয়ের জন্য সার্ভারে অতিরিক্ত বৃত্তাকার ভ্রমণের প্রয়োজন নেই যদি আপনি INSERT এর সাথে সতর্ক হন। আপনি যে ব্যাচে INSERT ডাকছেন তা আপনি সর্বদা SCOPE_IDENTITY () ফিরিয়ে দিতে পারেন ..
টমাস কেজার

1
"এটি তৈরির জন্য ডিবিতে একটি বৃত্তাকার ভ্রমণের প্রয়োজন হওয়ায় এটি অত্যন্ত মারাত্মক ধীর" - আপনি এক রাউন্ডের ট্রিপে আপনার যতটুকু প্রয়োজন তা দখল করতে পারেন।
একে

"আপনি এক রাউন্ড ট্রিপে আপনার প্রয়োজন যতগুলি দখল করতে পারেন" সম্পর্কিত - আপনি এটি পরিচয় কলাম বা অন্য কোনও পদ্ধতিতে করতে পারবেন না যেখানে আপনি মূলত ডেটাবেস স্তরে ডিফল্ট ব্যবহার করছেন।
আভি চেরি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.