আমাদের কাছে এমন একটি পণ্যের জন্য একটি ডেটাবেস রয়েছে যা ভারী লেখা। আমরা সবেমাত্র একটি এসএসডি সাহায্যের জন্য একটি নতুন সার্ভার মেশিন কিনেছি। আমাদের অবাক করার মতো বিষয় হল যে সন্নিবেশগুলি খুব ধীর স্টোরেজ সহ আমাদের পুরানো মেশিনের চেয়ে দ্রুত ছিল না। বেঞ্চমার্কিংয়ের সময় আমরা লক্ষ্য করেছি যে এসকিউএল সার্ভার প্রক্রিয়া দ্বারা প্রদর্শিত আইও হার খুব কম।
উদাহরণস্বরূপ, আমি এই পৃষ্ঠায় পাওয়া স্ক্রিপ্টটি চালিয়েছি, আমি লুপটির চারপাশে একটি শুরু ট্রেন এবং সংযুক্তি যুক্ত করে। সর্বোপরি আমি দেখতে পেলাম ডিস্কের ব্যবহার 7Mb / s এ পৌঁছেছে, যখন সিপিইউ সবে 5% ছুঁয়েছে। সার্ভারটিতে G৪ জিবি ইনস্টল করা আছে এবং এটি 10 ব্যবহার করছে The মোট কল সময়টি 2 মিনিটের 15 সেকেন্ড ছিল পরবর্তী কলগুলির জন্য প্রথম কলের জন্য প্রায় 1 মিনিটের মতো ডাউন। ডাটাবেসটি সহজ পুনরুদ্ধারে রয়েছে এবং পরীক্ষার সময় অলস ছিল। আমি প্রতিটি কলের মধ্যে টেবিলটি ফেলেছি।
এত সরল স্ক্রিপ্ট এত মন্থর কেন? হার্ডওয়ারটি সবেমাত্র ব্যবহার করা হচ্ছে। উভয় ডেডিকেটেড ডিস্ক বেঞ্চমার্কিং সরঞ্জাম এবং এসকিউআইও ইঙ্গিত দেয় যে এসএসডি পড়া এবং লেখার জন্য উভয়ই 500 এমবি / সেকেন্ডের গতিতে সঠিকভাবে সম্পাদন করে। আমি বুঝতে পারি যে এলোমেলো লেখাগুলি ক্রমিক লেখার চেয়ে ধীর, তবে আমি ক্লাস্টার ইনডেক্সিং ছাড়াই একটি টেবিলের কাছে এটির মতো একটি সাধারণ সন্নিবেশ আশা করবো, আরও দ্রুত হবে।
শেষ পর্যন্ত আমাদের পরিস্থিতি আরও জটিল, তবে আমি অনুভব করি যে প্রথমে আমার একটি সহজ মামলা বুঝতে হবে। সংক্ষেপে আমাদের অ্যাপ্লিকেশন পুরানো ডেটা মুছে ফেলে, তারপরে স্কেলবুল্ককপি ব্যবহার করে নতুন ডেটা স্টেজিং টেবিলগুলিতে অনুলিপি করে, কিছু ফিল্টারিং সম্পাদন করে এবং অবশেষে চূড়ান্ত টেবিলগুলিতে ডেটা অনুলিপি করার ক্ষেত্রে মার্জ এবং / অথবা ইনসার্ট ইনটো ব্যবহার করে।
-> সম্পাদনা 1: আমি মার্টিন স্মিথের সাথে সংযুক্ত পদ্ধতিটি অনুসরণ করেছি এবং আমি নিম্নলিখিত ফলাফল পেয়েছি:
[Wait Type] [Wait Count] [Total Wait (ms)] [T. Resource Wait (ms)] [T. Signal Wait (ms)]
NETWORK_IO 5008 46735 46587 148
LOGBUFFER 901 5994 5977 17
PAGELATCH_UP 40 866 865 1
SOS_SCHEDULER_YIELD 53279 219 121 98
WRITELOG 5 145 145 0
PAGEIOLATCH_UP 4 58 58 0
LATCH_SH 5 0 0 0
এসআইকিএল ফাইলগুলি ব্যতীত অন্য কোথাও প্রদর্শন করার কোনও ফলাফল নেই এবং কোনও ডেটা স্থানান্তরিত করার কোনও ফলাফল নেই বলে বিবেচনা করে আমি দেখতে পেয়েছি NETWORK_IO বেশিরভাগ সময় নেয়। NETWORK_IO প্রকারে সমস্ত আইও অন্তর্ভুক্ত রয়েছে?
-> সম্পাদনা 2: আমি একটি 20 জিবি র্যাম ডিস্ক তৈরি করেছি এবং সেখান থেকে একটি ডাটাবেস মাউন্ট করেছি। এসএসডি-তে আমার সেরা সময়টি ছিল 48 সেকেন্ড, র্যাম ডিস্কের সাথে এটি 37 সেকেন্ডে নেমে যায়। নেট ওয়ার্ক_আইও এখনও সবচেয়ে বড় অপেক্ষা is র্যাম ডিস্কে সর্বাধিক লেখার গতি ছিল প্রায় 250Mb / s যখন এটি প্রতি সেকেন্ডে বহু গিগাবাইট করতে সক্ষম হয়। এটি এখনও বেশি সিপিইউ ব্যবহার করে নি, তাই এসকিউএল ধরে রাখছে কি?
NETWORK_IO
3 মিলিয়ন "1 সারি (গুলি) আক্রান্ত" বার্তা ফেরত পাঠানো হচ্ছে থেকে হতে পারে। আপনি SET NOCOUNT ON
স্ক্রিপ্টে যুক্ত করার চেষ্টা করেছেন ?
EE_WaitStats*.xel
যাতে পুরানো আপনার ফলাফলগুলিকে দূষিত করে।
SET NOCOUNT ON
করতে হবে।