এটি কি ডাটাবেস সূচকগুলি যুক্ত করতে অকালিক অনুকূলতা?


61

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

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

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


32
এটি মতামতের বিষয় হতে পারে, তবে আমি অনুভব করি যে কিছু সূচকে অগ্রাধিকার যোগ করা যেতে পারে।
বেসিল স্টারিঙ্কেভিচ

2
@ বেসাইলস্টারিঙ্কেভিচ পুরোপুরি একমত যে আমাদের কাছে ইতিমধ্যে প্রাথমিক কী সূচি এবং কাজ রয়েছে। তবে আপনি রেখাটি কোথায় আঁকেন?
মার্কো ডি জঙ্গহ

1
আমার অভিজ্ঞতা থেকে দুটি সেন্ট: আমি আমাদের ডাটাবেসের একটি উপসেটে আমার প্রাথমিক অনুসন্ধানের কয়েকটি পরীক্ষা করছিলাম। আমি যে পরীক্ষাগুলি চালিয়েছি সেগুলি আমার স্থানীয় অনুলিপিতে পুরোপুরি ঠিক ছিল। আমি তারপরে অ্যাপ্লিকেশনটিকে স্টেজিং এরিয়াতে ধাক্কা দিয়েছি যা সম্পূর্ণ ডাটাবেস হোস্ট করে। আমার পরীক্ষাগুলি <500 এমএসে চলেছিল , অন্যদিকে স্টেজিং সিস্টেমটি সমাধান করতে কয়েক মিনিট সময় নেয় । অ্যাপটি কেন লোড হচ্ছে না তা সম্পর্কে আমার বস পুরোপুরি বিভ্রান্ত ছিলেন। টাইপ অপারেশনগুলি আপনার বন্ধু হিসাবে ব্যাখ্যা করুন ... কমপক্ষে বড় টেবিলগুলিতে সিক্যুয়ালি স্ক্যানগুলি সন্ধান করুন!
ক্রিস সাইরেফাইস

2
সূচিপত্র যুক্ত না করা বুদবুদ ব্যবহার করার মতো। প্রায়শই আপনি এটি পরীক্ষা করার সময় কোনও সমস্যা দেখতে পাবেন না তবে একবার আপনার প্রোগ্রামটি লাইভে স্কেলিং শুরু করলে আপনি পুরো অনেক সমস্যার জন্য রয়েছেন। এবং সূচকগুলি গতির পার্থক্যে সহজেই 100 টি ফ্যাক্টর তৈরি করতে পারে।
পিটার বি

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

উত্তর:


132

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

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


11
হ্যাঁ, এটি লোড পরীক্ষার পর্যায়ে করা উচিত
Alvaro

152
ধীর অংশগুলি কোথায় তা জানার আগে অনুকূলকরণ হ'ল অকাল অপটিমাইজেশন। ধীর অংশগুলি কোথায় তা অজানা প্রকাশের আগে জিনিসটি প্রকাশ করা !
গাণিতিক

4
@ গণিতের অর্কিড: এটি দুর্দান্ত ফরাসিং! আমি কি এটি অন্য কোথাও ধার নিতে পারি?
পিটার জেরকেন্স

3
@ পিটারজির্কেন্স অবশ্যই, নিজেকে ছিটকে পড়ুন! ;-) আমি কেবল দু: খিত যে ৯১++ উর্ধ্বতনগুলি আমাকে কোনও প্রতিনিধিত্ব করে না ... হি h
গাণিতিক

3
@ গণিতের অর্কিডের উত্তর হওয়া উচিত ছিল। "সবচেয়ে ছোট-সোজা-থেকে-পয়েন্টে" উত্তরের জন্য দৌড়াতে পারে।
মাইন্ডউইন

48

একবার আমরা লাইভ হয়ে গেলে ধীর প্রশ্নের জন্য নিরীক্ষণ করুন

কারণ কিছুই আপনার ব্যবহারকারীদের ডিজাইনের অভাবে ক্ষতিগ্রস্থ করার মতো গুণ বলে না!

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


10
ঠিক। ডাটাবেস ডিজাইনের অংশ হিসাবে সূচকগুলি বিবেচনা করুন। শেষ-ব্যবহারকারী সাধারণত রিয়েল-টাইমে করবে এমন কোনও প্রশ্নের জন্য একটি পূর্ণ টেবিল স্ক্যান এড়াতে সূচকগুলি ব্যবহার করুন।
এই

1
@ ডকব্রাউন আমি এতটা নিশ্চিত নই, যখন আপনি কোনও টেবিল ডিজাইন করেন তখন এটি ব্যবহার কীভাবে হবে তা কিছুটা বোঝার (বা থাকা উচিত) ছিল। কোনও ব্যক্তির সারণী আইডি, বা সম্ভবত উপাধ দ্বারা জিজ্ঞাসা করা হবে। যদি কেউ ডওবি, ঠিকানা বা ফোন নম্বর দিয়ে অ্যাক্সেস করতে শুরু করে তবে আপনি প্রতিটি ক্ষেত্রে সূচী যুক্ত করতে চলেছেন - এবং এর শেষ কোথায় ?!
gbjbaanb

4
@gbjbaanb: লোকেরা যখন পণ্যটিতে বৈশিষ্ট্য যুক্ত করা বন্ধ করে দেয় তখন এটি শেষ হয় যা আপনার পদ্ধতিগুলির উপর নির্ভর করে "কখনই" হতে পারে না।
স্টিভ জেসোপ

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

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

26

"অকাল অপ্টিমাইজেশন" এর অপমানজনক অর্থে, অর্থ ব্যয়বহুল অপ্টিমাইজেশন যার প্রয়োজন হয় না। এর অর্থ এই নয় যে দেউলিয়া হওয়া রোধে সর্বশেষতম পয়েন্টের আগে কার্যকর করা সমস্ত অপ্টিমাইজেশন!

বিশেষত, আপনার অ্যাপ্লিকেশন সম্পূর্ণরূপে স্তন্যপান না করার জন্য আপনি কিছু বুদ্ধিমান (আনুমানিক যদিও) প্রয়োজনীয়তাগুলি পূরণ করতে পারেন তা নিশ্চিত করার জন্য, লাইভ হওয়ার আগে পারফরম্যান্স পরীক্ষার ভিত্তিতে অনুকূলিতকরণ বৈধ legitimate

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

শেষ-ব্যবহারকারী সাধারণত রিয়েল-টাইমে করবে এমন কোনও প্রশ্নের জন্য একটি পূর্ণ টেবিল স্ক্যান এড়াতে সূচকগুলি ব্যবহার করুন

কমপক্ষে, সারণিগুলির জন্য যা ব্যবহারে বাড়ার পরিকল্পনা করা হয়েছে।

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


20

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

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

আপনার একটি জিনিস মনে রাখা দরকার, কারণ আপনি ব্রড ব্রাশ দিয়ে এটিকে আঁকতে পারবেন না।

আপনার সাধারণ কাজের চাপ কত ?

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

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

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

কিন্তু ...

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

বেশিরভাগ জিনিসের মতো স্বাস্থ্যকর ভারসাম্যও রয়েছে।

একটি মজাদার ছোট দিকের নোট হিসাবে ... "সূচক" এর বহুবচন

"সূচকগুলি" আর্থিক লোকদের জন্য

"সূচকগুলি" আমাদের জন্য


2
এর জন্য আরও বেশি ভোট দরকার। আমি আর একমত হতে পারি না।
RubberDuck

"শুধু ক্ষেত্রে" বিট জন্য +1 (যে হবে একটি অকাল অপ্টিমাইজেশান হতে)। আমি যদি আবার "সাধারণ কাজের চাপ" বিটের জন্য উজ্জীবিত করতে পারি।
ডেভিড

আশা করি আপনি আগে থেকেই জানেন যে কোন 10 টি 98% এর সাথে সম্পর্কিত, এবং কোনটি নয়।
পাওলো ইবারম্যান

@ PaŭloEbermann সর্বাধিক DBMS 'তে তথ্যটি খুব দ্রুত এবং সহজে ক্যাপচার করার ক্ষমতা রাখে। এই ক্ষেত্রে, না জানার জন্য কোনও অজুহাত নেই।
থমাস স্ট্রিংগার

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

4

না, এটি অকাল অপটিমাইজেশন নয়, তবে কোনও অপ্টিমাইজেশন যেমন হওয়া উচিত তেমনি এটি অবশ্যই সঠিকভাবে করা উচিত।

আমি এখানে যা করব তা এখানে:

  1. উত্পাদন লোডের নকল করতে পর্যাপ্ত পরীক্ষার ডেটা দিয়ে ডাটাবেস লোড করুন। আপনি এই 100% নির্ভুল পেতে পারবেন না তবে এটি ঠিক আছে: কেবলমাত্র পর্যাপ্ত ডেটা রাখুন one এক টেবিলের মধ্যে কি একটি নির্দিষ্ট পরিমাণের ডেটা থাকে? এটি লোড আপ। আপনার কি এমন একটি টেবিল রয়েছে যা প্রচুর ডেটা ধরে রাখে, উদাহরণস্বরূপ যে কোনও সারণী এই সাইটে প্রশ্ন রাখে? এমনকি মাত্র ডামি ডেটা হলেও কয়েক মিলিয়ন রেকর্ড লোড করুন।
  2. আপনার ডাটাবেস সার্ভারে প্রোফাইলিং চালু করুন
  3. স্বয়ংক্রিয় স্ক্রিপ্টগুলির সংমিশ্রণ (ভলিউম সরবরাহ করে) এবং প্রকৃত ব্যবহারকারীদের (তারা কীভাবে জিনিসগুলি ভাঙ্গতে হয় তা জানেন) এর সাহায্যে অ্যাপ্লিকেশনটিতে দূরে সরে যান।
  4. প্রোফাইলিং ডেটা পর্যালোচনা করুন। নির্দিষ্ট প্রশ্নগুলি ধীর? পরিকল্পনাগুলির ব্যাখ্যাগুলি পরীক্ষা করুন এবং দেখুন ডেটাবেস সার্ভার আপনাকে বলছে এটি সূচক চায় তবে এটি বিদ্যমান না does

ডাটাবেস সার্ভারগুলি জটিল এবং বুদ্ধিমান সফ্টওয়্যারগুলির টুকরো। আপনি কীভাবে শুনতে হয় জানেন তা কীভাবে তাদের অনুকূল করতে হবে তা তারা আপনাকে বলতে পারে।

কীগুলি হ'ল অপটিমাইজ করার আগে এবং পরে কর্মক্ষমতা পরিমাপ করা এবং এবং ডেটাবেসটির কী প্রয়োজন তা আপনাকে জানাতে দিন


3

জ্ঞাত সমস্যাগুলির জন্য প্রমাণিত নিদর্শনগুলি অনুসরণ করা (যেমন এর আইডি দ্বারা রেকর্ড সন্ধান করা) অকাল কিছুই নয়। এটা ঠিক বুদ্ধিমান।

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


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

@ সুপের্যাট "কখনই নয়" ... যতক্ষণ না আপনি নিজের উত্পাদনের পরিবেশে অচলাবস্থা দেখা শুরু করেন ...
এসভিডজেন

আপনি কী ধরণের বাস্তবসম্মত পরিস্থিতিতে কল্পনা করেন যা 90% অপারেশনগুলির সাথে সামঞ্জস্যপূর্ণ হবে কী হিসাবে একটি কলামটি কী হিসাবে ব্যবহার করবে এবং যেখানে একটি সূচক যুক্ত করার ফলে অচলাবস্থার কারণ হতে পারে?
সুপারক্যাট

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

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

2

আপনার আবেদন প্রকাশিত হলে, অনেক দেরি হয়ে যায়।

তবে যে কোনও সঠিক বিকাশ প্রক্রিয়াতে পারফরম্যান্স টেস্টিং অন্তর্ভুক্ত করা উচিত।

কোন সূচক যুক্ত করতে হবে তা নির্ধারণ করতে আপনার কার্য সম্পাদনের পরীক্ষার ফলাফলগুলি ব্যবহার করুন এবং কার্য সম্পাদন পরীক্ষার পুনরাবৃত্তি করে তাদের কার্যকারিতা যাচাই করুন।


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

@ লসমনোস: স্ট্যাক এক্সচেঞ্জ ব্যবহারের জন্য কেউ অর্থ প্রদান করে না।
26:58

@ লাইটনেসেসেসিনআরবিট: ওপর, বিজ্ঞাপনদাতারা স্ট্যাক এক্সচেঞ্জ ব্যবহার করার জন্য অর্থ প্রদান করেন।

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

1

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

এখানে আমি কিছু বিষয় বিবেচনা করব:

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

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

আমি বুঝতে পেরেছি যে আপনি অকালকালীনভাবে অপ্টিমাইজ করতে চান না, তবে এটি প্রায় নিশ্চিত যে আপনার ডাটাবেস সূচী না করে আপনার খারাপ অভিনয় থাকবে। এটিকে বাইরে বের করে, আপনি নির্ধারণ করতে পারেন যে অন্যান্য ক্ষেত্রগুলি পারফরম্যান্স সমস্যার কারণে রয়েছে কিনা if


0

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

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


0

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

আপনার কিছু প্রশ্ন জিজ্ঞাসা করা উচিত:

  • প্রতিটি টেবিলের আকারের জন্য নকশার সীমা কী থাকবে?

যদি টেবিলগুলি সর্বদা ছোট হতে থাকে (<100 টি সারি বলুন), ডাটাবেসটিকে পুরো টেবিলটি স্ক্যান করতে হবে তবে এটি কোনও বিপর্যয় নয়। সূচক যুক্ত করা উপকারী হতে পারে তবে এটি নির্ধারণ করতে আরও কিছুটা দক্ষতা বা পরিমাপ প্রয়োজন।

  • প্রতিটি ক্যোয়ারী কতবার চালিত হবে এবং প্রয়োজনীয় প্রতিক্রিয়ার সময়টি কী?

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

  • কোয়েরিতে প্রাথমিক কী থেকে আলাদা হয়ে কী টেবিলটি সন্ধান করা দরকার? যেমন তারিখের পরিসীমা অনুসারে ফিল্টারিং, কোনও বিদেশী কীতে যোগ দেওয়া?

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

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