প্রিয় পারফরম্যান্স টিউনিং কৌশল [বন্ধ]


126

যখন আপনার কাছে কোনও ক্যোয়ারী বা সঞ্চিত পদ্ধতি রয়েছে যার জন্য পারফরম্যান্স টিউনিং প্রয়োজন, আপনি প্রথমে চেষ্টা করেন এমন কয়েকটি কি?



আমি সম্মত হই যে এটি গঠনমূলক নয় এবং গুগলে অনুসন্ধান করা যেতে পারে তবে কেন এটির 118 ইউভি ?! :)
ফ্লিকার

উত্তর:


114

এখানে আমি সর্বদা আমাকে অপ্টিমাইজেশন সম্পর্কে জিজ্ঞাসা করে এমন কাউকে উপহার দিই এমন জিনিসগুলির সহজ-সরল তালিকা is
আমরা মূলত সাইবাজ ব্যবহার করি তবে বেশিরভাগ পরামর্শই বোর্ড জুড়ে প্রযোজ্য।

উদাহরণস্বরূপ, এসকিউএল সার্ভারটি উপস্থিত রয়েছে পারফরম্যান্স মনিটরিং / টিউনিং বিটগুলির একটি হোস্টের সাথে, তবে আপনার যদি এমন কিছু না থাকে (এবং সম্ভবত আপনি তা করেনও) তবে আমি নিম্নলিখিতগুলি বিবেচনা করব ...

সমস্যার 99% আমি দেখেছি নির্বাণ দ্বারা ঘটিত হয় একটি যোগদানের অনেকগুলি টেবিল । এর জন্য ঠিক করা হল অর্ধেক যোগ (কিছু টেবিলের সাথে) করা এবং অস্থায়ী সারণীতে ফলাফলগুলি ক্যাশে করা। তারপরে সেই অস্থায়ী টেবিলের সাথে অবশিষ্ট থাকা ক্যোয়ারীটি করুন।

অনুসন্ধান অপ্টিমাইজেশন চেকলিস্ট

  • অন্তর্নিহিত টেবিলগুলিতে আপডেট আপডেট করুন IC
    • অনেক সিস্টেম এটিকে নির্ধারিত সাপ্তাহিক কাজ হিসাবে চালায়
  • অন্তর্নিহিত সারণীগুলি থেকে রেকর্ডগুলি মুছুন (সম্ভবত মুছে ফেলা রেকর্ডগুলি সংরক্ষণাগারভুক্ত করুন)
    • দিনে একবার বা সপ্তাহে একবার এটি স্বয়ংক্রিয়ভাবে করা বিবেচনা করুন।
  • সূচকগুলি পুনর্নির্মাণ করুন
  • সারণী পুনর্নির্মাণ (বিসিপি ডেটা আউট / ইন)
  • ডাটাবেস ডাম্প / রিলোড করুন (কঠোর, তবে দুর্নীতির সমাধান করতে পারে)
  • নতুন, আরও উপযুক্ত সূচক তৈরি করুন
  • ডাটাবেসে দুর্নীতি সম্ভব কিনা তা দেখতে ডিবিসিসি চালান Run
  • লকস / ডেডলকস
    • ডাটাবেসে অন্য কোনও প্রক্রিয়া চলছে না তা নিশ্চিত করুন
      • বিশেষ করে ডিবিসিসি
    • আপনি কি সারি বা পৃষ্ঠার স্তর লকিং ব্যবহার করছেন?
    • কোয়েরি শুরু করার আগে একচেটিয়াভাবে টেবিলগুলি লক করুন
    • পরীক্ষা করুন যে সমস্ত প্রক্রিয়া একই ক্রমে টেবিল অ্যাক্সেস করছে
  • সূচকগুলি কি যথাযথভাবে ব্যবহৃত হচ্ছে?
    • উভয় এক্সপ্রেশন হুবহু একই ডেটা টাইপ হলে যোগসূত্রগুলি সূচক ব্যবহার করবে
    • সূচকটি কেবল তখন ব্যবহৃত হবে যখন সূচকে প্রথম ক্ষেত্র (গুলি) কোয়েরিতে মিলছে
    • ক্লাস্টারযুক্ত সূচকগুলি উপযুক্ত যেখানে ব্যবহার করা হয়েছে?
      • পরিসীমা তথ্য
      • মান 1 এবং মান 2 এর মধ্যে ক্ষেত্র
  • ছোট যোগদানগুলি হ'ল নিস জয়েনস
    • ডিফল্টরূপে অপটিমাইজার একবারে 4 টি সারণী বিবেচনা করে।
    • এর অর্থ হল যে 4 টিরও বেশি টেবিলের সাথে যোগ দেয়, এটি একটি অনুকূল নয় এমন ক্যোয়ারী পরিকল্পনা বেছে নেওয়ার একটি ভাল সুযোগ রয়েছে
  • যোগ দিন
    • আপনি কি যোগ দিতে পারেন?
    • অস্থায়ী সারণীতে বিদেশী কীগুলি প্রাক-নির্বাচন করুন
    • অর্ধেক যোগ দিন এবং অস্থায়ী সারণিতে ফলাফল রাখুন
  • আপনি কি সঠিক ধরণের অস্থায়ী টেবিল ব্যবহার করছেন?
    • #tempটেবিলগুলি @tableবৃহত পরিমাণে (কয়েক হাজার সারি) ভেরিয়েবলের চেয়ে আরও ভাল পারফর্ম করতে পারে ।
  • সংক্ষিপ্ত টেবিলগুলি বজায় রাখুন
    • অন্তর্নিহিত টেবিলগুলিতে ট্রিগার দিয়ে তৈরি করুন
    • দৈনিক / ঘন্টা / ইত্যাদি তৈরি করুন
    • অ্যাড-হক তৈরি করুন
    • ক্রমবর্ধমান বা টিয়ারডাউন / পুনর্নির্মাণ করুন
  • SET SHOWPLAN চালু করে কোয়েরি পরিকল্পনাটি দেখুন
  • SET STATS IO চালু করে আসলে কী ঘটছে তা দেখুন
  • প্রাগমা ব্যবহার করে একটি সূচককে বল প্রয়োগ করুন: (সূচক: মাইন্ডেক্স)
  • SET FORCEPLAN চালু ব্যবহার করে টেবিলের অর্ডারটি জোর করুন
  • পরামিতি স্নিফিং:
    • স্টোরড পদ্ধতিটি 2 এ ভাঙ্গুন
    • প্রো 1 থেকে প্র্যাক 2 কল করুন
    • অপ্টিমাইজারকে প্রোপিমিটারটি প্রো 2 তে সূচি চয়ন করতে অনুমতি দেয় যদি @ পরিমাপকটি প্রো 1 দ্বারা পরিবর্তিত হয়েছে
  • আপনি কি আপনার হার্ডওয়্যার উন্নত করতে পারেন?
  • আপনি কি সময় চালাচ্ছেন? একটি শান্ত সময় আছে?
  • প্রতিলিপি সার্ভার (বা অন্যান্য স্টপ বিহীন প্রক্রিয়া) চলছে? আপনি এটি স্থগিত করতে পারেন? এটি চালান যেমন। ঘনঘন?

2
আপনি কোন বিট রেফারিং হয়?
এজে।

2
এটি কিছু দুর্দান্ত জিনিস, তবে আমি আশা করি আপনার কিছু দাবির জন্য কিছু উল্লেখ রয়েছে। উদাহরণস্বরূপ: আমি কখনও শুনিনি যে কেবলমাত্র 4 টি টেবিলকে যোগ দেওয়ার সময় বিবেচনা করা হবে। আমি বুঝতে পারি না কিভাবে এটি সঠিক হতে পারে। আপনি কি বিশেষভাবে এর জন্য কিছু রেফারেন্স সরবরাহ করতে পারেন? আপনি এটি কোথায় পাচ্ছেন তা দেখতে আমি পছন্দ করি।
শেল্ডনএইচ

19
  1. আপনার মাথায় কোয়েরি চালানোর সর্বোত্তম পথ সম্পর্কে একটি দুর্দান্ত ধারণা আছে।
  2. ক্যোয়ারী প্ল্যানটি যাচাই করুন - সর্বদা।
  3. STATS চালু করুন, যাতে আপনি আইও এবং সিপিইউ উভয়ই পরীক্ষা করতে পারেন। এই সংখ্যাগুলি নিচে চালানোর দিকে মনোনিবেশ করুন, অগত্যা ক্যোয়ারির সময় নয় (এটি অন্যান্য ক্রিয়াকলাপ, ক্যাশে ইত্যাদির দ্বারা প্রভাবিত হতে পারে)।
  4. অপারেটরে আসার জন্য প্রচুর সংখ্যক সারি সন্ধান করুন, তবে অল্প সংখ্যক বেরিয়ে আসবে। সাধারণত, একটি সূচক আসার সারিগুলি সীমাবদ্ধ করে সাহায্য করবে (যা ডিস্কের পঠন সাশ্রয় করে)।
  5. প্রথমে বৃহত্তম ব্যয় সাবট্রির উপর ফোকাস করুন। সাবট্রি পরিবর্তন করা প্রায়শই পুরো ক্যোয়ারী প্ল্যান পরিবর্তন করতে পারে।
  6. আমি যে সাধারণ সমস্যাগুলি দেখেছি সেগুলি হ'ল:
    • যদি সেখানে অনেকগুলি যোগদান হয়, কখনও কখনও এসকিএল সার্ভার এতে যোগদানের সম্প্রসারণ করতে পছন্দ করে এবং তারপরে WHERE ধারাগুলি প্রয়োগ করে। আপনি সাধারণত শর্তটি JOIN ক্লজে স্থানান্তরিত করে বা শর্তাদি অন্তর্ভুক্ত করে একটি উত্পন্ন টেবিলের মাধ্যমে সমাধান করতে পারেন। ভিউগুলি একই সমস্যা তৈরি করতে পারে।
    • সাবপটিমাল যোগ দেয় (LOOP বনাম HASH বনাম MERGE)। আমার থাম্বের নিয়মটি হল যখন নীচের তুলনায় শীর্ষ সারিতে খুব কম সারি থাকে একটি লুপ সংযুক্তিকে ব্যবহার করা, যখন সেটগুলি মোটামুটি সমান এবং অর্ডার করা হয় তখন একটি মার্জ এবং অন্য কিছুর জন্য একটি হ্যাশ। যোগদানের ইঙ্গিত যুক্ত করা আপনাকে আপনার তত্ত্বটি পরীক্ষা করতে দেবে।
    • পরামিতি স্নিগ্ধ। আপনি যদি প্রথমে অবাস্তব মানগুলির সাথে স্ট্রোকড প্রোক চালিয়েছিলেন (পরীক্ষার জন্য বলুন), তবে ক্যাশেড ক্যোয়ারী পরিকল্পনাটি আপনার উত্পাদন মূল্যগুলির জন্য সাব-ওটি হতে পারে। পুনরায় সুপারিশ করে আবার চালনা করা উচিত এটি যাচাই করা উচিত। কিছু সঞ্চিত প্রক্সের জন্য, বিশেষত যারা বিভিন্ন আকারের ব্যাপ্তিগুলির সাথে লেনদেন করে (বলুন, আজ এবং গতকালকের মধ্যে সমস্ত তারিখ - যা একটি ইন্ডেক্স সেকের জন্য প্রযোজ্য হবে - বা, গত বছর এবং এই বছরের মধ্যে সমস্ত তারিখ - যা একটি আইএনডেক্স স্ক্যানের সাথে আরও ভাল হবে) ) আপনাকে এটি প্রতিবারই সুপারিশের মাধ্যমে চালাতে হতে পারে।
    • খারাপ ইন্ডেন্টেশন ... ঠিক আছে, সুতরাং এসকিএল সার্ভারের সাথে এটির কোনও সমস্যা নেই - তবে আমি নিশ্চিত যে ফর্ম্যাটিংটি স্থির না করা পর্যন্ত কোনও ক্যোয়ারী বোঝা অসম্ভব বলে মনে করি।

1
খারাপ ইনডেন্টেশন অন্তর্ভুক্তির জন্য +1। বিন্যাস কী! :)
mwigdahl

18

সামান্যভাবে বিষয়বস্তু বন্ধ করুন তবে এই বিষয়গুলিতে আপনার যদি নিয়ন্ত্রণ থাকে ...
উচ্চ স্তর এবং উচ্চ প্রভাব।

  • উচ্চ আইও পরিবেশের জন্য আপনার ডিস্কগুলি RAID 10 বা RAID 0 + 1 বা রাইড 1 এবং রেড 0 এর কিছু নেস্টেড প্রয়োগের জন্য রয়েছে তা নিশ্চিত করুন।
  • 1500K এর চেয়ে কম ড্রাইভ ব্যবহার করবেন না।
  • নিশ্চিত করুন যে আপনার ডিস্কগুলি কেবলমাত্র আপনার ডাটাবেসের জন্য ব্যবহৃত হয়েছে। আইই কোন লগিং কোন ওএস।
  • স্বয়ংক্রিয় বৃদ্ধি বা অনুরূপ বৈশিষ্ট্যটি বন্ধ করুন। ডেটাবেসটিকে প্রত্যাশিত সমস্ত স্টোরেজ ব্যবহার করতে দিন। অগত্যা যা বর্তমানে ব্যবহৃত হচ্ছে তা নয়।
  • টাইপ প্রশ্নের জন্য আপনার স্কিমা এবং সূচিগুলি ডিজাইন করুন।
  • যদি এটি কোনও লগ টাইপ সারণী হয় (কেবল সন্নিবেশ করান) এবং অবশ্যই ডিবিতে থাকতে হবে এটি সূচী করবেন না।
  • যদি আপনার বিতরণ বরাদ্দ করা হয় (জটিল অনেকের সাথে যোগ দেয়) তবে আপনার একটি স্টার বা স্নোফ্লেক স্কিমা সহ ডেটা গুদাম তৈরি করা উচিত।
  • পারফরম্যান্সের বিনিময়ে ডাটা প্রতিলিপি করতে ভয় পাবেন না!

8

CREATE INDEX

আপনার WHEREএবং JOINধারাগুলির জন্য সূচকগুলি উপলভ্য রয়েছে তা নিশ্চিত করুন । এটি ডেটা অ্যাক্সেসকে ব্যাপকভাবে গতিবেগ করবে।

আপনার পরিবেশ যদি কোনও ডেটা মার্ট বা গুদাম হয় তবে প্রায় কোনও অনুমেয়যোগ্য জিজ্ঞাসার জন্য সূচিগুলি প্রচুর পরিমাণে হওয়া উচিত।

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

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

SELECT   i.make, i.model, i.price
FROM     dbo.inventory i
WHERE    i.color = 'red'
  AND    i.price BETWEEN 15000 AND 18000

দামের মধ্যে সাধারণত কার্ডিনালিটি বেশি থাকে। কেবলমাত্র কয়েক ডজন রঙ উপলব্ধ থাকতে পারে, তবে সম্ভবত হাজার হাজার বিভিন্ন জিজ্ঞাসার দাম রয়েছে।

এই সূচক পছন্দগুলির মধ্যে, idx01ক্যোয়ারীটি সন্তুষ্ট করার দ্রুততর পথ সরবরাহ করে:

CREATE INDEX idx01 ON dbo.inventory (price, color)
CREATE INDEX idx02 ON dbo.inventory (color, price)

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

আমি কেবল দুটি ক্ষেত্রে অনুরূপ সূচকগুলি পৃথক করতে পারছি কেবলমাত্র ক্ষেত্রের ক্রয়ে ক্যোরির (প্রথম নাম, পদবি) এবং অন্যটিতে (পদবি), প্রথম নাম)।


6

একটি কৌশল আমি সম্প্রতি শিখেছি হ'ল এসকিউএল সার্ভার একটি আপডেট বিবৃতিতে স্থানীয় ভেরিয়েবলের পাশাপাশি ক্ষেত্রগুলিও আপডেট করতে পারে।

UPDATE table
SET @variable = column = @variable + otherColumn

বা আরও পঠনযোগ্য সংস্করণ:

UPDATE table
SET
    @variable = @variable + otherColumn,
    column = @variable

পুনরাবৃত্ত গণনাগুলি প্রয়োগ করার সময় আমি জটিল কার্সার / যোগদানগুলিতে প্রতিস্থাপন করতে এটি ব্যবহার করেছি এবং কার্যকারিতাতেও অনেক অর্জন করেছি।

এখানে বিবরণ এবং উদাহরণের কোড যা কার্য সম্পাদনে চমত্কার উন্নতি করেছে: http://geekswithblogs.net/Rhames/archive/2008/10/28/calculating-running-totals-in-sql-server-2005--- the-titimative। aspx


5

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


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

5

@ তেরাপিনে isnull এবং coalesce এর মধ্যে আরও কয়েকটি পার্থক্য রয়েছে যা উল্লেখযোগ্য (এএনএসআই সম্মতি ছাড়াও এটি আমার পক্ষে অনেক বড়)।

কোলেসেস বনাম ইসনুল


3

কখনও কখনও এসকিউএল সার্ভারে যদি আপনি একটি ওআর ব্যবহার করেন যেখানে এমন একটি ধারাটিতে এটি কার্য সম্পাদন করে। ওআর ব্যবহার না করে কেবল দুটি নির্বাচন করুন এবং তাদের একত্র করুন। আপনি 1000x গতিতে একই ফলাফল পাবেন।


আমি এই অব্যক্ত আচরণ দেখেছি।
এসেন

2

যেখানে দফাটি দেখুন - সূচির ব্যবহার যাচাই করুন / নিখুঁতভাবে যা যা করা হচ্ছে তা যাচাই করুন

where SomeComplicatedFunctionOf(table.Column) = @param --silly

2

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


2

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

declare @temp table(
    RowID int not null identity(1,1) primary key,
    SomeUniqueColumn varchar(25) not null,
    SomeNotUniqueColumn varchar(50) null,
    unique(SomeUniqueColumn)
)

2

আমি সর্বদা বাইন্ড ভেরিয়েবলগুলি ব্যবহার করার অভ্যাস তৈরি করেছি। যদি আরডিবিএমএস এসকিউএল স্টেটমেন্টগুলি ক্যাশে না করে তবে এটি সম্ভব বাইনড ভেরিয়েবলগুলি সাহায্য করবে না। তবে আপনি যদি বাইন্ড ভেরিয়েবল ব্যবহার না করেন তবে আরডিবিএমএসের কাছে ক্যোয়ারি এক্সিকিউশন পরিকল্পনা এবং পার্সড এসকিউএল স্টেটমেন্টগুলি পুনরায় ব্যবহার করার সুযোগ নেই। সঞ্চয়গুলি বিশাল হতে পারে: http://www.akadia.com/services/ora_bind_variables.html । আমি বেশিরভাগ ওরাকল নিয়ে কাজ করি তবে মাইক্রোসফ্ট এসকিউএল সার্ভার একইভাবে কাজ করে।

আমার অভিজ্ঞতায় আপনি যদি বাইন্ড ভেরিয়েবলগুলি ব্যবহার করছেন বা না জানেন তবে আপনি সম্ভবত তা করছেন না। যদি আপনার অ্যাপ্লিকেশন ভাষা তাদের সমর্থন করে না, তবে এটির মতো একটি আবিষ্কার করুন। কখনও কখনও আপনি কোয়েরি বি এর জন্য বাইন্ড ভেরিয়েবল ব্যবহার করে কোয়েরি এটিকে ঠিক করতে পারেন B.

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

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

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


2

প্রথম পদক্ষেপ: অনুসন্ধান কার্যনির্বাহী পরিকল্পনা দেখুন!
টেবিলস্ক্যান -> খারাপ
নেস্টলড লুপ -> মেহ সতর্কতা
একটি নেস্টলুপের পিছনে টেবিলস্ক্যান -> ডুম!

সেট পরিসংখ্যান আই অন
সেট পরিসংখ্যান সময়মত


2

WITH (NoLock) ব্যবহার করে ক্যোয়ারী চালানো আমার জায়গায় বেশ মানক ক্রিয়াকলাপ। যে কেউ দশক-গিগাবিট টেবিলগুলিতে চলমান ক্যোয়ারী এনে না ফেলে তা বের করে গুলিবিদ্ধ করা হয়।


2
এটি অভ্যাসগতভাবে নয়, ন্যায়বিচারের সাথে ব্যবহার করা উচিত। লক করা খারাপ নয়, কেবল ভুল বোঝাবুঝি।

2

যদি সম্ভব হয় তবে বাম আউটয়ার জয়েনস-এ কোয়েরিতে না রূপান্তর করুন if উদাহরণস্বরূপ, আপনি যদি টেবিল 1 এ বিদেশী কী দ্বারা অব্যবহৃত টেবিল 1 এ থাকা সমস্ত সারিগুলি সন্ধান করতে চান আপনি এটি করতে পারেন:

SELECT *
FROM Table1
WHERE Table1.ID NOT IN (
    SELECT Table1ID
    FROM Table2)

তবে আপনি এটি দিয়ে আরও ভাল পারফরম্যান্স পাবেন:

SELECT Table1.*
FROM Table1
LEFT OUTER JOIN Table2 ON Table1.ID = Table2.Table1ID
WHERE Table2.ID is null

1

@ ডেভিডএম

এখানে মাইএসকিউএল ধরে নিচ্ছি, কোয়েরিতে কী চলছে তা সন্ধানের জন্য এক্সপ্ল্লেইন ব্যবহার করুন, নিশ্চিত করুন যে সূচিগুলি যথাসম্ভব দক্ষতার সাথে ব্যবহৃত হচ্ছে ...

এসকিউএল সার্ভারে, এক্সিকিউশন প্ল্যানটি আপনাকে একই জিনিস দেয় - এটি আপনাকে সূচিগুলি কীভাবে ক্ষতিগ্রস্থ করছে ইত্যাদি বলে tells


1

আপনার দ্বারা ছাঁটা ক্ল্যাম (গুলি) দ্বারা সারণী (গুলি) সূচি করুন


1

অগত্যা প্রতি এসকিউএল পারফরম্যান্স ট্রিক নয় তবে অবশ্যই সম্পর্কিত:

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


1

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


1

আমি সন্ধান করছি:

  • যে কোনও CURSOR লুপগুলি তালিকাভুক্ত করুন এবং সেট ভিত্তিক আপডেট / INSERT বিবৃতিতে রূপান্তর করুন।
  • যে কোনও অ্যাপ্লিকেশন কোডটি সন্ধান করুন যা:
    • এমন একটি এসপিকে কল করুন যা রেকর্ডের একটি বিশাল সেট ফেরত দেয়,
    • তারপরে অ্যাপ্লিকেশনটিতে, প্রতিটি রেকর্ডের মধ্য দিয়ে যায় এবং রেকর্ডগুলি আপডেট করতে প্যারামিটার সহ একটি এসপিকে কল করে।
    • এটিকে এসপিতে রূপান্তর করুন যা সমস্ত লেনদেনে সমস্ত কাজ করে।
  • যে কোনও এসপি প্রচুর স্ট্রিং ম্যানিপুলেশন করে। এটি প্রমাণ করে যে ডেটা সঠিকভাবে সাজানো / স্বাভাবিক করা হয়নি।
  • যে কোনও এসপি চাকাটি পুনরায় উদ্ভাবন করে।
  • কোনও এসপি হ'ল আমি বুঝতে পারি না যে এটি এক মিনিটের মধ্যে কী করার চেষ্টা করছে!

1
SET NOCOUNT ON

সাধারণত আমার সঞ্চিত প্রক্রিয়াগুলির মধ্যে প্রথম লাইন, যদি না আমার আসলে ব্যবহারের প্রয়োজন হয় @@ROWCOUNT


2
@@ ROWCOUNT কে যাই হোক না কেন সেট করা আছে। NOCOUNT "এক্সএক্স সারি প্রভাবিত" বিবৃতি অক্ষম করে।
Sklivvz

এটি কি কখনও কার্য সম্পাদনে প্রশংসনীয় পার্থক্য করে?
জনএফএক্স

হ্যাঁ, তারপরে প্রতিটি এসকিউএল স্টেটমেন্ট চালানোর সময় গণনা স্বয়ংক্রিয়ভাবে গণনা করা হয় না। এটির সাথে এবং এটি ছাড়া কোনও কোয়েরি বেঞ্চ করা যথেষ্ট সহজ যে এটি কোনও পার্থক্য করে।
ট্র্যাভিস

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

1

এসকিউএল সার্ভারে নলক নির্দেশিকা ব্যবহার করুন। এটি নির্বাচিত কমান্ডটি অপেক্ষা না করেই সম্পূর্ণ করতে দেয় - সাধারণত অন্যান্য লেনদেন শেষ হয়।

SELECT * FROM Orders (nolock) where UserName = 'momma'

3
NOLOCK কেবলমাত্র সেই প্রশ্নের জন্য যা আপনি সঠিক ফলাফলের বিষয়ে চিন্তা করেন না
মার্ক সোওল

1

যেখানে প্রয়োজন নেই সেখানে কার্সার সরান।


হ্যাঁ, অভিশাপ একটি অভিশাপ! ;)
Sklivvz

8
বিতৃষ্ণা। এটিকে অযোগ্য হিসাবে ফেলে দেবেন না। কার্সারগুলি বন্দুকের মতো। তারা নিজেরাই খারাপ হয় না, এগুলি ঠিক যে লোকেরা তাদের সাথে সত্যই খারাপ কাজ করে।
জনএফএক্স

1

স্প্রোকগুলিতে ফাংশন কলগুলি সরিয়ে ফেলুন যেখানে প্রচুর সারি ফাংশনটি কল করবে।

আমার সহকর্মী খুব বিস্তৃত রেকর্ডসেটগুলি ফিরতে ফাংশন কলগুলি (উদাহরণস্বরূপ ব্যবহারকারীর কাছ থেকে লাস্টলগাইন্ডেট পেয়েছিল) ব্যবহার করেছিল।

অপ্টিমাইজেশনের কাজটি সম্পন্ন করে আমি স্প্রোকের ফাংশনের কোডগুলিকে ফাংশনের কোড দিয়ে প্রতিস্থাপন করেছি: আমি অনেক স্প্রোকের চলমান সময়> 20 সেকেন্ড থেকে <1 এ নামিয়ে পেয়েছি।


0
  • ডিবিও সহ সমস্ত সারণী উপসর্গ করুন। পুনঃসংশোধনগুলি রোধ করতে।
  • সন্ধানের পরিকল্পনাগুলি দেখুন এবং সারণী / সূচক স্ক্যানগুলির জন্য অনুসন্ধান করুন।
  • ২০০৫-এ, অনুপস্থিত সূচকগুলির জন্য পরিচালনার দৃশ্যের ঝাঁকুনি দিন।


0

"Sp_" দিয়ে সঞ্চিত প্রক্রিয়া নামগুলি উপস্থাপন করবেন না কারণ সিস্টেমের পদ্ধতিগুলি সমস্ত "sp_" দিয়ে শুরু হয় এবং এসকিউএল সার্ভারের যখন এটি আহ্বান করা হয় তখন আপনার পদ্ধতিটি খুঁজে পেতে আরও কঠোরভাবে অনুসন্ধান করতে হবে।


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

1
আমি মনে করি এটি অকাল অপটিমাইজেশনের বালতিতে পড়ে। মানুষের পক্ষে বিভ্রান্তি এড়ানো সম্ভবত একটি ভাল অনুশীলন, তবে একটি অপ্টিমাইজেশন টিপ হিসাবে ... ডি-
জনএফএক্স

0

নোংরা পড়া -

set transaction isolation level read uncommitted

মৃত লকগুলি প্রতিরোধ করে যেখানে লেনদেনের অখণ্ডতা একেবারে প্রয়োজনীয় নয় (যা সাধারণত সত্য)


1
হ্যাঁ, তবে এটি অদ্ভুত বাগগুলি সন্ধান করতে পারে যা খুঁজে পাওয়া খুব শক্ত।
গ্রান্ট জনসন

0

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

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