বিপুল সংখ্যক সারি সন্নিবেশ করার দ্রুততম উপায় কী?


27

আমার একটি ডাটাবেস রয়েছে যেখানে আমি স্টেজিং টেবিলের মধ্যে ফাইলগুলি লোড করি, এই স্টেজিং টেবিল থেকে আমার কাছে কিছু বিদেশী কী সমাধান করার জন্য 1-2 টি যোগ দেয় এবং তারপরে এই সারিগুলি চূড়ান্ত টেবিলটিতে সন্নিবেশ করান (যার প্রতি মাসে একটি পার্টিশন রয়েছে)। তিন মাসের ডেটার জন্য আমার কাছে প্রায় 3.4 বিলিয়ন সারি রয়েছে।

এই সারিগুলি চূড়ান্ত সারণিতে প্রবেশ করা থেকে দ্রুততম উপায় কী? এসআইএসআইএস ডেটা ফ্লো টাস্ক (এটি উত্স হিসাবে একটি ভিউ ব্যবহার করে এবং দ্রুত লোড সক্রিয় রয়েছে) অথবা একটি সন্নিবেশ IN নির্বাচন করুন .... কমান্ড? আমি ডেটা ফ্লো টাস্কটি চেষ্টা করেছিলাম এবং প্রায় 5 ঘন্টার মধ্যে 1 বিলিয়ন সারি পেতে পারি (সার্ভারে 8 টি কোর / 192 গিগাবাইট র‌্যাম) যা আমার কাছে খুব ধীর লাগে।


1
পৃথক ফাইলগ্রুপগুলিতে পার্টিশনগুলি (এবং বিভিন্ন শারীরিক ডিস্কগুলিতে সেই ফাইলগ্রুপগুলিতে রয়েছে)?
অ্যারন বার্ট্র্যান্ড

3
সত্যই একটি ভাল উত্স ডেটা লোডিং পারফরম্যান্স গাইড । এটি আপনাকে করতে পারে প্রচুর পারফরম্যান্স অপটিমাইজেশনকে সম্বোধন করে যেমন TF610 সক্ষম করা , বিসিপি আউট / ইন, এসএসআইএস ইত্যাদি ব্যবহার করা You আপনাকে কেবল প্রস্তাবগুলি অনুসরণ করতে হবে এবং এটি আপনার পরিবেশে পরীক্ষা করতে হবে।
কিন শাহ

অ্যারন হ্যাঁ, প্রতি মাসে একটি ফাইলগ্রুপ, ১২ টি সান লুন সংযুক্ত রয়েছে যাতে সমস্ত জান এক লুনে যান ইত্যাদি নিশ্চিত নয় যে লুনের জন্য কতগুলি ডিস্ক রয়েছে তবে প্রচুর পরিমাণে হওয়া উচিত।
nojetlag

হ্যাঁ আমি সত্যিই "ডিস্কের সেট" বোঝাতাম এবং সম্ভবত নিয়ন্ত্রকদেরও উল্লেখ করতে পারতেন, যা স্যাচুরেটেড হতে পারে।
অ্যারন বার্ট্র্যান্ড

@ কিনের গাইডটির দিকে নজর ছিল তবে এটি পুরানো বলে মনে হচ্ছে, "এসকিউএল সার্ভারের ডেটা প্রবাহ থেকে ইন্টিগ্রেশন সার্ভিসেস ডেটা প্রবাহ থেকে বাল্ক লোড ডেটা সবচেয়ে দ্রুতগতিতে এসকিউএল সার্ভারের গন্তব্য। এই গন্তব্যটি এসকিউএল সার্ভারের সমস্ত বাল্ক লোড বিকল্পগুলিকে সমর্থন করে - ROWS_PER_BATCH ব্যতীত । " এবং এসএসআইএস 2012-এ তারা আরও ভাল পারফরম্যান্সের জন্য OLE DB গন্তব্যস্থলের প্রস্তাব দেয়।
nojetlag

উত্তর:


25

একটি সাধারণ পদ্ধতি:

  1. লক্ষ্য টেবিলের ইনডেক্স / সীমাবদ্ধতাগুলি অক্ষম / ড্রপ করুন।
  2. INSERT dbo.[Target] WITH (TABLOCKX) SELECT ...
  3. অবশ্যই জেএনকে creditণের সাথে, আপনি nসারিগুলির ব্যাচগুলিতে উপরের কাজটি করতে পারেন , যা লেনদেন লগের উপর চাপ কমাতে পারে, এবং অবশ্যই এর অর্থ যদি কিছু ব্যাচ ব্যর্থ হয়, আপনাকে কেবল সেই ব্যাচ থেকে শুরু করতে হবে। আমি এ সম্পর্কে ব্লগ করেছি (মুছে ফেলার ক্ষেত্রে একই বুনিয়াদি ধারণাগুলি প্রযোজ্য) এখানে: http://www.sqlperformance.com/2013/03/io-subs systemm/chunk-deletes
  4. লক্ষ্য সারণীতে সূচিপত্র / সীমাবদ্ধতাগুলি পুনরায় সক্ষম / সক্ষম করুন (এবং সম্ভবত আপনি সেগুলির কয়েকটি স্থগিত করতে পারেন, যদি সেগুলি সমস্ত ক্রিয়াকলাপের জন্য প্রয়োজনীয় না হয়, এবং অনলাইনে বেস ডেটা পাওয়া আরও গুরুত্বপূর্ণ)।

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

আপনি অনেক বেশি আদিম কিছু বিবেচনা করতে পারেন, যেমন BCP OUT/BCP IN

আমি জানি না যে আমি এটিতে সহায়তা করতে এসএসআইএসে ঝাঁপিয়ে পড়ব। সেখানে সম্ভবত কিছু দক্ষতা রয়েছে, তবে আমি জানি না যে প্রচেষ্টাটি সঞ্চয়কে ন্যায্য করে।


2
যদি আপনার ডেটা বাছাই না করা হয় তবে অন্ধভাবে সূচীগুলি ছাড়ুন (উদাঃ ক্লাস্টারড ইনডেক্স)। সূচকটি বাদ দেওয়া এবং একটি ক্লাস্টারড সূচকটি পুনরায় তৈরি করা আশা করা একটি বিশাল ভুল হতে পারে কারণ এতে বিশাল ডিস্ক জায়গার পাশাপাশি বিশাল পরিমাণে উভয়ই ব্যয় করতে পারে। আমি এ জাতীয় ভুলটি প্রথম অনুভব করি না। Sqlmag.com/t-sql/… এই নিবন্ধে "প্ল্যান বি" বর্ণনাটি দেখুন । লেখক একই সমস্যা ছিল।
jyao

10

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

OLEDB গন্তব্য

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


1
ডিবিএ.এসই-তে অন্য কোথাও "দ্রুত লোড" অন্তর্ভুক্ত করে সে সম্পর্কে একটি দুর্দান্ত প্রশ্ন রয়েছে: dba.stackex بدل . com/ questions/ 141430/
সমস্ত ট্রেডের জোন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.