এসকিউএল ২০০ বনাম এসকিউএল ২০০৮ আর ২-তে আলাদাভাবে চলমান অনুসন্ধান


9

আমার অফিসে, আমাদের কাছে একটি ক্যোয়ারী রয়েছে যা বেশ কুৎসিত, তবে উত্পাদন এবং উন্নয়নের পরিবেশে যথাক্রমে চলে (যথাক্রমে 20 সেকেন্ড এবং 4 সেক)। তবে আমাদের পরীক্ষার পরিবেশে এটি 4 ঘন্টা সময় নেয়। এসকিউএল 2003 (+ সর্বশেষ প্যাচগুলি) উত্পাদন এবং বিকাশে চলছে। SQL2008R2 পরীক্ষায় চলছে।

আমি ক্যোয়ারী প্ল্যানটি একবার দেখেছিলাম এবং এটিতে দেখা যায় যে সংযুক্ত-সার্ভার থেকে ফিরে আসা সারিগুলি সংরক্ষণ করার জন্য এসকিউএল ২০০8 আর 2 টেবিল স্পুল (অলস স্পুল) এর মাধ্যমে টেম্পডিবি ব্যবহার করছে। পরবর্তী পদক্ষেপটি কোস্টের 96.3% খেয়ে নেস্টেড লুপগুলি (বাম বিরোধী আধা সেমিন) দেখাচ্ছে showing দুই অপারেটরের মধ্যে লাইনটি 5,398 এমবি!

এসকিউএল ২০০ for এর ক্যোয়ারী প্ল্যানটি টেম্পডিবি এবং কোন বাম অ্যান্টি সেমি যোগের কোনও ব্যবহার না দেখায়।

নীচে স্যানিটাইজড কোড রয়েছে এবং এক্সিকিউশনটি শীর্ষে ২০০ 2005 এর পরিকল্পনার নীচে, ২০০৮ আর ২ পরিকল্পনা করে।

কী কারণে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে পরিবর্তন আনা হচ্ছে? আমি অন্যরকম এক্সিকিউশন পরিকল্পনা দেখার আশা করছিলাম, যাতে এটি আমাকে বিরক্ত করে না। ক্যোয়ারির সময় নাটকীয়ভাবে ধীরে ধীরে আমাকে কষ্ট দেয়।

আমার কি অন্তর্নিহিত হার্ডওয়্যারটি লক্ষ্য করা উচিত, যেহেতু ২০০৮ আরআর ভার্সনটি টেম্পডিবি ব্যবহার করছে তবে এর ব্যবহারটি কীভাবে অপ্টিমাইজ করা যায় তা আমাকে একবার দেখে নিতে হবে?

কোয়েরি লেখার আরও ভাল উপায় আছে কি?

সাহায্যের জন্য ধন্যবাদ.

    INSERT INTO Table1_GroupLock (iGroupID, dLockedDate)
SELECT 
 Table1.iGroupID,
 GETDATE()
FROM Table1
WHERE 
 NOT EXISTS (
  SELECT 1
  FROM LinkedServer.Database.Table2 Alias2
  WHERE 
   (
    Alias2.FirstName + Alias2.LastName = dbo.fnRemoveNonLetter(Table1.FullName)
    AND NOT dbo.fnRemoveNonLetter(Table1.FullName) IS NULL
    AND NOT Alias2.FirstName IS NULL 
    AND NOT Alias2.LastName  IS NULL
   ) OR (
    Alias2.FamilyName = dbo.fnRemoveNonLetter(Table1.FamilyName)
    AND Alias2.Child1Name = dbo.fnRemoveNonLetter(Table1.Child1Name)
    AND NOT dbo.fnRemoveNonLetter(Table1.FamilyName) IS NULL
    AND NOT dbo.fnRemoveNonLetter(Table1.Child1Name) IS NULL
    AND NOT Alias2.Familyname IS NULL
    AND NOT Alias2.Child1Name IS NULL
   ) OR (
    Alias2.StepFamilyName = dbo.fnRemoveNonLetter(Table1.StepFamilyName)
    AND Alias2.StepFamilyNameChild1 = dbo.fnRemoveNonLetter(Table1.StepFamilyNameChild2)
    AND NOT Alias2.StepFamilyName IS NULL
    AND NOT Alias2.StepFamilyNameChild1 IS NULL
    AND NOT dbo.fnRemoveNonLetter(Table1.StepFamilyName) IS NULL
    AND NOT dbo.fnRemoveNonLetter(Table1.StepFamilyNameChild2) IS NULL
   )  
 ) AND NOT EXISTS (
  SELECT 1
  FROM Table3
  INNER JOIN Table4
   ON Table4.FirstNameType = Table3.FirstNameType 
  INNER JOIN table5
   ON table5.LastNameType = Table3.LastNameType 
  WHERE 
   Table3.iGroupID = Table1.iGroupID
   AND Table3.bIsClosed = 0
   AND Table4.sNameTypeConstant = 'new_lastname'
   AND table5.sFirstNameConstant = 'new_firstname'
 )

এসকিউএল 2005


SQL2008R2

:: সম্পাদনা :: একটি ভিন্ন এসকিউএল ২০০৫ উদাহরণ থেকে ক্যোয়ারী কার্যকর করা হয়েছে, "ভাল একটি" এর মতো একই বাস্তবায়ন পরিকল্পনা। এখনও নিশ্চিত নয় যে ২০০ 2005-এর দুটি সংস্করণ ২০০RR2 সংযুক্ত সার্ভারের সাথে ২০০R -২-এর উদাহরণগুলির চেয়ে ২০০R -২ এর তুলনায় আরও ভাল চলছে।

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

:: সম্পাদনা :: আমি ২০০৮ আরআর দু'টি ক্ষেত্রেই এসপি 1 এবং সিইউ 3 প্রয়োগ করেছি, এখনও কোনও পাশ নেই। আমি সংযুক্ত সার্ভারে বিশেষত সংঘাত স্থাপন করেছি, কোন পাশা নেই। আমি উভয় দৃষ্টান্তে আমার ব্যবহারকারী অ্যাক্টের সিসাদমিন হওয়ার অনুমতি নির্দিষ্ট করে রেখেছি, কোনও ডাইস নেই। আমি আমার এসকিএল সার্ভার ২০০৮ এর অভ্যন্তরীণ এবং সমস্যা সমাধানের কথাও স্মরণ করেছি, আমরা কীভাবে এটি ট্র্যাক করতে পারি তা আমরা দেখতে পাব।

সাহায্য এবং টিপস জন্য সবাইকে ধন্যবাদ।

:: সম্পাদনা :: লিঙ্কযুক্ত সার্ভারে আমি বিভিন্ন অনুমতি পরিবর্তন করেছি। আমি এসকিউএল লগইন, ডোমেন লগইন, ব্যবহারকারীর ছদ্মবেশ ব্যবহার করেছি, আমি "এই সুরক্ষা প্রসঙ্গটি ব্যবহার করে তৈরি করা" বিকল্পটি ব্যবহার করেছি। আমি লিঙ্কযুক্ত সার্ভারের উভয় পক্ষের ব্যবহারকারী তৈরি করেছি যার সার্ভারে সিসাদমিন অধিকার রয়েছে। আমি ধারনা বাইরে থাকি।

আমি এখনও জানতে চাই যে এসকিউএল ২০০৫ কেন এসকিউএল ২০০৮আর 2 থেকে এত নাটকীয়ভাবে কোয়েরি চালাচ্ছে। যদি এটি ছিল যে কোয়েরিটি খারাপ ছিল, আমি এসকিউএল 2003 এবং এসকিউএল ২০০8 আর 2 উভয়টিতে 4 + ঘন্টা চালানোর সময়টি দেখতে পাচ্ছি।

উত্তর:


5

আমি চাই আপনি কোয়েরিটি পুনরায় কাজ করুন।

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

এছাড়াও, আপনার "রিমুভননলেটর" কার্যকারিতাটি করার জন্য একটি ইনলাইন টেবিল-মূল্যবান ফাংশন তৈরি করুন এবং এটি ব্যবহার করতে আপনার ক্যোয়ারীটি পুনরায় কাজ করুন, সম্ভবত আমি এখানে যেমন করেছি তেমন প্রয়োগ করুন using

এবং স্পষ্টভাবে সেই বাগটি পরীক্ষা করুন যা পলের উত্তর উল্লেখ করেছে।

INSERT INTO Table1_GroupLock (iGroupID, dLockedDate)
SELECT 
 Table1.iGroupID,
 GETDATE()
FROM Table1
OUTER APPLY (SELECT NonLettersRemoved FROM dbo.ifnRemoveNonLetter(Table1.FullName)) AS fn (FullName)
OUTER APPLY (SELECT NonLettersRemoved FROM dbo.ifnRemoveNonLetter(Table1.FamilyName)) AS famn (FamilyName)
OUTER APPLY (SELECT NonLettersRemoved FROM dbo.ifnRemoveNonLetter(Table1.Child1Name)) AS c1n (Child1Name)
OUTER APPLY (SELECT NonLettersRemoved FROM dbo.ifnRemoveNonLetter(Table1.StepFamilyName)) AS sfn (StepFamilyName)
OUTER APPLY (SELECT NonLettersRemoved FROM dbo.ifnRemoveNonLetter(Table1.StepFamilyNameChild2)) AS sfnc2 (StepFamilyNameChild2)
WHERE 
 NOT EXISTS (
  SELECT 1
  FROM LinkedServer.Database.Table2 Alias2
  WHERE Alias2.FullName = fn.FullName
  UNION ALL
  SELECT 1
  FROM LinkedServer.Database.Table2 Alias2
  WHERE Alias2.FamilyName = famn.FamilyName AND Alias2.Child1Name = c1n.Child1Name
  UNION ALL
  SELECT 1
  FROM LinkedServer.Database.Table2 Alias2
  WHERE Alias2.StepFamilyName = sfn.StepFamilyName AND Alias2.StepFamilyNameChild1 = sfnc2.StepFamilyNameChild2
 ) 
 AND NOT EXISTS (
  SELECT 1
  FROM Table3
  INNER JOIN Table4
   ON Table4.FirstNameType = Table3.FirstNameType 
  INNER JOIN table5
   ON table5.LastNameType = Table3.LastNameType 
  WHERE 
   Table3.iGroupID = Table1.iGroupID
   AND Table3.bIsClosed = 0
   AND Table4.sNameTypeConstant = 'new_lastname'
   AND table5.sFirstNameConstant = 'new_firstname'
 )
;

6

পূর্ববর্তী উত্তরগুলি যুক্ত করার পরে, পরিকল্পনার প্রতিরোধের কারণ হতে পারে একটি পরিকল্পনার কার্ডিনালিটি অনুমানের বাগের কারণে হতে পারে যখন পরিকল্পনায় একটি অ্যান্টি সেমি জয়েন্ট অন্তর্ভুক্ত থাকে। 2222998 কেবি দেখুন

২০০৫ এর পরিকল্পনার গ্রহণযোগ্য পারফরম্যান্সের উত্পাদনের বিষয়টি ধরে নিলে আপনি সার্ভারটিকে এমন সংস্করণে আনতে পারবেন যাতে এর মধ্যে রয়েছে ঠিক করা (এবং এটি সক্রিয় করতে টিএফ 4১৯৯ সক্ষম করা) আপনাকে 'ভাল' পরিকল্পনায় ফিরিয়ে দেবে।

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


5

আমি পরামর্শ দেব যে রিমোট ডেটা স্থানীয়ভাবে spooled হয় কারণ এক

  1. লিঙ্কযুক্ত সার্ভার সেটিংস (যেমন কোলেশন) একই নয়
  2. স্থানীয় সংযোগ লিঙ্কযুক্ত সার্ভার সেটিংস সত্ত্বেও দূরবর্তী হিসাবে একই নয়
  3. অনুমতিগুলির কারণে প্রশ্নটি দূরবর্তীভাবে সঠিকভাবে চলতে পারে না

পয়েন্ট 1 এর জন্য, sp_serveroption
এবং পয়েন্ট 2 এর জন্য দেখুন , তবে সার্ভার / ডিবি কোলেশনগুলিও দেখুন ।

পয়েন্ট 3 এর জন্য, লিঞ্চি শেয়া থেকে এগুলি দেখুন:

আপনি এখানে আমার উত্তর অনুসারে এসকিউএল সার্ভারকে স্থানীয়ভাবে সমস্ত ডেটা প্রক্রিয়া করতে বলছেন: একটি দৃষ্টিতে অপেনকুরি ব্যবহারের পারফরম্যান্সের প্রভাব

সম্পাদন করা

দ্বিতীয় বর্ণনায় আমি 2 টির তুলনায় "ভাল" পরিকল্পনায় দূরবর্তী কল দেখতে পাচ্ছি। এটি আমি এখানে যা বলছি তা নিশ্চিত করে


দীর্ঘ বিলম্বের জন্য দুঃখিত। 1: আমি লিঙ্কযুক্ত সার্ভার সেটিংস পরীক্ষা করেছিলাম, সেগুলি একই 2: আমি লিঙ্কযুক্ত সার্ভারের বৈশিষ্ট্যগুলির প্রত্যয়টি দূরবর্তী সার্ভারেও পরীক্ষা করে দেখেছি imp 3: আমি এখনও সুরক্ষা প্রসঙ্গটি এ / বি পরীক্ষার জন্য কাজ করছি। আমি এখনও মারাত্মকভাবে বিভিন্ন নির্বাহী পরিকল্পনার পিছনে যুক্তিটির উপর ঝুঁকছি। আর 2 সার্ভার থেকে আর 2 সার্ভারে এটি কেবল নির্বাচনটি চালাচ্ছে (ভালভাবে 150K সারিগুলিতে টানছে), তারপরে যোগ দেয়। যেখানে 2005 থেকে আর 2 হিসাবে এটি নির্বাচনগুলি করছে এবং দূরবর্তী সার্ভারে যোগ দেয়। উভয় পরিস্থিতির জন্য সুরক্ষা প্রসঙ্গ একই।
রেটকন্ট্রোল

3

ডাটাগোড থেকে আপনার প্রশ্নের মন্তব্যটি পুনরায় লেখার চেষ্টা করার জন্য +1।

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

আপনার কি এই পরীক্ষার পরিবেশে এসকিউএল সার্ভার 2005 আছে কী কী এখনও এই ক্যোয়ারীটি চেষ্টা করে দেখুন এবং পরিবেশটি বাতিল করতে পারেন?

আপগ্রেড করার পর থেকে আপনি পরিসংখ্যানগুলি পুনর্নির্মাণ করেছেন?


3

এই তুলনা করে অনেক সমস্যা আছে ... আমি ঠিক জানি না কোথা থেকে শুরু করব।

  1. আপনার উত্পাদন এবং পরীক্ষা মেশিনের জন্য সঠিক চশমা পান।

  2. উভয় পরিবেশে বিভিন্ন লিঙ্কযুক্ত সেভারের মধ্যে নেটওয়ার্ক লিঙ্কগুলি নির্ধারণ করুন। তারা কি একই গতি? সার্ভারগুলি উভয় পরিবেশে একে অপরের পাশে অবস্থিত?

  3. লিঙ্কযুক্ত সার্ভারগুলি ব্যবহার না করার জন্য আপনি কোয়েরিটি আবার লিখতে পারেন এমন কোনও উপায় আছে? সার্ভার জুড়ে টেবিলগুলিতে যোগদান করা আপনাকে টপোলজির পরিবর্তনের জন্য ঝুঁকির মধ্যে ফেলে দেয় এবং বেশিরভাগ ক্ষেত্রে তার মারাত্মক ধীর গতি হয়।

  4. নোট এবং ওআর এর ব্যবহারগুলি সাধারণত পুরো টেবিল স্ক্যানগুলিতে বাড়ে। কোয়েরিটি আবার লেখার চেষ্টা করুন।

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