ন্যূনতম ডাউনটাইম সহ বিপুল পরিমাণে ডেটা পুনরায় আমদানির সেরা উপায়


11

আমাকে সপ্তাহে একবারে আইপি লুক (কেবল পঠনযোগ্য রেফারেন্স) ডেটাযুক্ত প্রায় 500,000 রেকর্ড আমদানি করতে হবে (কেবলমাত্র তিনটি ইনট / বিগিন্ট কলস)।

বিদ্যমান টেবিলের সাথে ডেটা মার্জ করার বিষয়ে আমি সত্যিই চিন্তিত হতে চাই না, আমি পুরানো এবং পুনরায় আমদানি সাফ করতে পছন্দ করব।

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

জিনিস এখন পর্যন্ত চেষ্টা করা হয়েছে

এসএসআইএস: আমি একটি এসএসআইএস প্যাকেজ তৈরি করেছি যা টেবিলটি কেটে এবং আমদানি করে - এটি চালাতে প্রায় 30 সেকেন্ড সময় লাগে (সত্যিই খুব দীর্ঘ)।

টেম্প টেবিল: একটি টেম্প টেবিলের মধ্যে আমদানি করা, কাটা কাটা এবং অনুলিপি করতে প্রায় 30 সেকেন্ড সময় নেয়।

বিসিপি: বাল্ক আমদানিও বরং খুব ধীর (কোনও কারণে এটি এসএসআইএসের তুলনায় ধীর (এমনকি বজায় রাখার কোনও সূচক নেই) - আমি অনুমান করছি যে এটি চর /> ইনট / বিগিন্ট লেনদেনের সাথে করার জন্য: /

আয়না টেবিল? সুতরাং, এই মুহুর্তে, আমি একটি ভিউয়ের মাধ্যমে টেবিলটি পড়ার বিষয়ে ভাবছি, আয়না টেবিলের মধ্যে ডেটা আমদানি করে, এবং এই টেবিলের দিকে দৃষ্টিভঙ্গিটি বদলানোর জন্য পরিবর্তনটি বদলে দিচ্ছি ... মনে হচ্ছে এটি দ্রুত হবে তবে এটি ছোট মনে হচ্ছে বিট হ্যাকি আমাকে।

এটি দেখে মনে হচ্ছে এটি একটি সাধারণ সমস্যা হওয়া উচিত, তবে আমি প্রস্তাবিত অনুশীলনগুলি খুঁজে পাচ্ছি না - কোনও ধারণা সর্বাধিক প্রশংসা হবে!

ধন্যবাদ

উত্তর:


13

আমি অতীতে যে সমাধানটি ব্যবহার করেছি (এবং এখানে এবং এর আগে স্ট্যাকওভারফ্লোতে সুপারিশ করেছি) তা হল দুটি অতিরিক্ত স্কিমা তৈরি করা:

CREATE SCHEMA shadow AUTHORIZATION dbo;
CREATE SCHEMA cache  AUTHORIZATION dbo;

এখন cacheস্কিমাতে আপনার টেবিলের নকল তৈরি করুন :

CREATE TABLE cache.IPLookup(...columns...);

এখন যখন আপনি আপনার স্যুইচ অপারেশন করছেন:

TRUNCATE TABLE cache.IPLookup;
BULK INSERT cache.IPLookup FROM ...;

-- the nice thing about the above is that it doesn't really
-- matter if it takes one minute or ten - you're not messing
-- with a table that anyone is using, so you aren't going to
-- interfere with active users.


-- this is a metadata operation so extremely fast - it will wait
-- for existing locks to be released, but won't block new locks
-- for very long at all:

BEGIN TRANSACTION;
  ALTER SCHEMA shadow TRANSFER    dbo.IPLookup;
  ALTER SCHEMA dbo    TRANSFER  cache.IPLookup;
COMMIT TRANSACTION;


-- now let's move the shadow table back over to
-- the cache schema so it's ready for next load:

ALTER SCHEMA cache TRANSFER shadow.IPLookup;
TRUNCATE TABLE cache.IPLookup; 

-- truncate is optional - I usually keep the data
-- around for debugging, but that's probably not
-- necessary in this case.

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


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

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

এফওয়াইআই আমি এই সপ্তাহে আরও বিশদে এই সম্পর্কে ব্লগ করেছি: sqlperformance.com/2012/08/t-sql-queries/…
অ্যারন বার্ট্র্যান্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.