এসকিউএল সার্ভার ক্যাশে ফ্লাশ এবং ডিস্ক I / O


11

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

এসকিউএল সার্ভার প্রক্রিয়াটি 1 মিনিটের জন্য ফোসকা হারে অনুরোধ করে, এরপরে ডিস্ক রাইটিং ক্রিয়াকলাপের 20 ডলার বৃদ্ধি পায়। নিম্নলিখিত গ্রাফটি সমস্যার চিত্র তুলে ধরেছে।

এসকিউএল ওলটিপি সিস্টেম - পারফরম্যান্স কাউন্টার

Yellow = Transactions per second
Blue   = Total CPU usage
Red    = Sqlsrv Disk Write Bytes/s
Green  = Sqlsrv Disk Read Bytes/s

সমস্যার সমাধানের সময়, আমরা বিন্যাসে কোনও উল্লেখযোগ্য পরিবর্তন ছাড়াই নিম্নলিখিতগুলি চেষ্টা করেছি:

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

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

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

আপডেট 1 অনুরোধ অনুসারে, এখানে এমন একটি গ্রাফের সাথে রয়েছে যা চেকপয়েন্ট পৃষ্ঠাগুলি / সেকেন্ড , পৃষ্ঠা আয়ু প্রত্যাশা এবং কিছু ডিস্ক ল্যাটেন্সি কাউন্টার অন্তর্ভুক্ত করে।

এসকিউএল ওলটিপি সিস্টেম - পারফরম্যান্স কাউন্টার - চেকপয়েন্ট

দেখা যাচ্ছে যেন চেকপয়েন্ট (হালকা নীল লাইন) হ'ল আমরা যে পর্যবেক্ষণ হ্রাস করেছি তার কার্যকারিতা (হলুদ রেখা) ^

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

আপডেট 2 নিম্নরূপে "পুনরুদ্ধার ব্যবধান" পরিবর্তন করে আমরা চেকপয়েন্টগুলি যে বিরতিতে ঘটে তা হ্রাস করতে পরিচালিত করেছি:

EXEC sp_configure 'show advanced options',1
GO 

RECONFIGURE
GO

EXEC sp_configure 'recovery interval', '30'
GO

RECONFIGURE 
GO

EXEC sp_configure 'show advanced options',0
GO
RECONFIGURE

আমি নিশ্চিত না যে এটি খারাপ অভ্যাস কিনা?


1
চেকপয়েন্ট পৃষ্ঠা / সেকেন্ড কাউন্টার যুক্ত করুন। এবং আবার পরীক্ষা করুন এবং গ্রাফটি দেখান। এবং যখন আপনার লেনদেনগুলি নেমে যায় এবং লেখার উপরে উঠে যায় - আপনি কি পারফরম্যান্সের সমস্যা দেখছেন? আমি কিছু ডিস্ক ল্যাটেন্সি কাউন্টারও যুক্ত করতাম - গড় সেকেন্ড / পড়ুন এবং গড় সেকেন্ড / লিখুন
মাইক ওয়ালশ

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

5
এবং একটি শেষ জিনিস (দুঃখিত!) - এই সার্ভারে মেমরিটি কী? আপনি কি পৃষ্ঠার আয়ু কাউন্টার পাশাপাশি যুক্ত করতে পারেন? আপনি কি শারীরিক সেটআপ (মেমরি, আইও সেটআপ, আপনার লগ এবং ডেটা ফাইলগুলি ভাগ করে নিয়েছে) ইত্যাদি বর্ণনা করতে পারেন
মাইক ওয়ালশ

2
ডাটাবেসে কোন পুনরুদ্ধারের মডেল রয়েছে? লেনদেনের লগ পূরণ হওয়ার সাথে সাথে এটি স্বয়ংক্রিয় চেকপয়েন্টিংয়ের মতো দেখাচ্ছে। নোট এমনকি যদি ডাটাবেসের মধ্যে যে FULLবা BULK_LOGGED, এটা এখনও আচরণ করবে যেমন যদি এটা আছে SIMPLEযতক্ষণ না আপনি একটি সম্পূর্ণ ব্যাকআপ নিতে।
জন সেগেল

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

উত্তর:


11

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

তবে কেবলমাত্র আপনি পেয়েছেন এমন দুর্দান্ত মন্তব্যগুলিকে পুনরায় সজ্জিত করার জন্য আমি প্রতিক্রিয়া জানাইনি :)

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

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

  • এনকুই একটি সন্নিবেশ, এটি একটি নোংরা পৃষ্ঠা তৈরি করবে
  • ডেকিউ একটি মুছে ফেলা, এটি একই পৃষ্ঠাটিকে আবার নোংরা করবে (এটি ভাগ্যবান হতে পারে এবং চেকপয়েন্টের আগে পৃষ্ঠাটি ধরে ফেলতে পারে, তাই এটি ডাবল-ফ্লাশ এড়াতে পারে, তবে কেবল ভাগ্যবান হলে)
  • গোস্ট ক্লিনআপ পৃষ্ঠাটি পরিষ্কার করবে, এটি আবার নোংরা করে তুলবে

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

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

কিছু পরিণতি অনুসরণ:

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

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

সম্পাদনা:

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


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

রিমাস খুব সুন্দরভাবে সম্পন্ন উত্তর।
মার্ক স্টোরি-স্মিথ

3
তালিকাভুক্ত পারফোন কাউন্টারগুলিতে তাকিয়ে আমার সন্দেহ হয় যে আপনি সম্ভবত একই ড্রাইভ বা অ্যারেতে থাকা ডেটা এবং লগগুলিতে ঠিক থাকতে পারেন।
মার্ক স্টোর-স্মিথ

@ মার্কস্টোরি-স্মিথ: আমি মনে করি আপনি ঠিক বলেছেন, ওপি রয়েছে C:এবং D:একই শারীরিক ডিস্কের সাহায্যে যৌক্তিক ডিস্ক রয়েছে। আমি সন্দেহ করি যে ফিজিকাল ডিস্কটি 100 শর্ট স্ট্রাইপযুক্ত স্পিন্ডেলের ব্যাটারি, তাই সম্ভবত এটির মূল কারণ।
রেমাস রুসানু

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