কোনটি আরও দক্ষ: লিঙ্কযুক্ত সার্ভার থেকে নির্বাচন করুন বা লিঙ্কযুক্ত সার্ভারে প্রবেশ করুন?


32

মনে করুন আমাকে একটি সার্ভার থেকে অন্য সার্ভারে (লিঙ্কযুক্ত সার্ভারের মাধ্যমে) রফতানি করতে হবে। কোন বক্তব্য আরও দক্ষ হবে?

উত্স সার্ভারে কার্যকর হচ্ছে:

INSERT INTO [DestinationLinkedServer].[DestinationDB].[dbo].[Table]
SELECT a, b, c, ... FROM [dbo].Udf_GetExportData()

অথবা টার্গেট সার্ভারে কার্যকর করা হচ্ছে:

INSERT INTO [dbo].[Table]
SELECT a, b, c, ...
FROM OPENQUERY([OriginLinkedServer],
    'SELECT a, b, c, ... FROM [OriginDB].[dbo].Udf_GetExportData()')

কোনটি দ্রুত হবে এবং মোট (কম উত্স এবং লক্ষ্য সার্ভার উভয়) কম সংখ্যক সংস্থানক ব্যবহার করবে? উভয় সার্ভার হ'ল এসকিউএল সার্ভার 2005।

উত্তর:


29

মনে করুন আমাকে একটি সার্ভার থেকে অন্য সার্ভারে ডেটা রফতানি করতে হবে।

সেরা ব্যবহার করা হয়

  • আপনি যদি সমস্ত ডেটা ব্যাকআপ / রিস্টোর ব্যবহার করতে চান; বিসিপি আউট এবং বিসিপি ইন বা এসএসআইএস
  • যদি আপনি ডেটা উপসেট চান (কেবলমাত্র কিছু টেবিল) এসএসআইএস বা বিসিপি আউট এবং বিসিপি ইন ব্যবহার করুন

ডেটা এবং এন / ডাব্লু ব্যান্ডউইথের পরিমাণ / আকারের উপর নির্ভর করে ডেটা স্থানান্তর করতে, লিঙ্কযুক্ত সার্ভারটি কার্য সম্পাদন করবে।

উত্স সার্ভারে কার্যকর করা বা লক্ষ্য সার্ভারে নির্বাহ করা - কোনটি দ্রুত হবে এবং মোট (কম উত্স এবং লক্ষ্য সার্ভার উভয়) কম সংস্থানকারী ব্যবহার করবে?

- উত্স সার্ভারে কার্যকর করা হচ্ছে:

INSERT INTO [DestinationLinkedServer].[DestinationDB].[dbo].[Table]
SELECT a, b, c, ... FROM [dbo].Udf_GetExportData()

আপনি উত্স সার্ভারে কোয়েরিটি সম্পাদন করছেন এবং ডেটাটিকে গন্তব্য সার্ভারে ঠেলাচ্ছেন বলে এটিকে পুশিং ডেটা বলা হয়। এটি ব্যয়বহুল অপারেশন হবে।

--- টার্গেট সার্ভারে নির্বাহ করা

INSERT INTO [dbo].[Table]
SELECT a, b, c, ...
FROM OPENQUERY([OriginLinkedServer],
    'SELECT a, b, c, ... FROM [OriginDB].[dbo].Udf_GetExportData()')

আপনি গন্তব্য সার্ভারে কোয়েরি চালাচ্ছেন এবং উত্স সার্ভার থেকে ডেটা টানছেন বলে এটিকে PULLING ডেটা বলা হয়। পূর্বেরটির তুলনায় এটি অনেক দ্রুত এবং স্বল্প সংস্থান হবে (কতটুকু ডেটা টানছে তার উপর নির্ভর করে)।

টান পদ্ধতির ক্ষেত্রে, এসকিউএল প্রোফাইলার ব্যবহার করে আপনি দেখতে পাবেন যে লিঙ্কযুক্ত সার্ভার (উত্স সার্ভার) জুড়ে একটি একক এসকিউএল স্টেটমেন্ট কার্যকর করা হয়, এবং ফলাফলসেটটি উত্স সার্ভার থেকে গন্তব্য সার্ভারে টানানো হয় যা পুশের উপর একটি দুর্দান্ত পারফরম্যান্স লাভ gain পদ্ধতি।

আরেকটি বিষয় লক্ষণীয়:

লিঙ্কযুক্ত সার্ভারের মধ্যে (4 টি অংশে নামকরণের কনভেনশন ব্যবহৃত সার্ভারনেম.ডাটাবেসনেম.সেমি.টিবেলনাম ওরফে ডিস্ট্রিবিউটেড ক্যোয়ারী) এবং ওপেনকুয়েরি, সাধারণত ওপেনকুরি দ্রুত হবে। কেন?

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

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

দুর্দান্ত পড়ার উল্লেখ:


8

দক্ষতা আপনি কীভাবে পরিমাপ করছেন? কোনটি দ্রুত হবে? কোনটি লক্ষ্যমাত্রায় কম সংস্থান গ্রহণ করবে? উত্সে? এই সারিগুলিতে কয়টি সারি এবং কী ধরণের ডেটা ধরণের রয়েছে? আপনি কি নিশ্চিত যে আপনি কোনও লিঙ্কযুক্ত সার্ভারের মাধ্যমে একটি টিভিএফ কার্যকর করতে পারেন (লক্ষ্য এসকিউএল ২০০৮ বা তার পরে?) ? আপনি যদি কোনও টিভিএফ থেকে টানছেন তবে আপনি কীভাবে এই ডেটাটির 1: 1 স্থানান্তর নিশ্চিত করছেন?

এই প্রশ্নগুলি পথছাড়া ...

আপডেট 1

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


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

ওপেনকুরি পদ্ধতিটি প্রসেসিংটি রিমোট সার্ভারে রাখবে এবং "ফিল্টারযুক্ত ফলাফল" স্থানীয় সার্ভার দ্বারা প্রাপ্ত হবে।

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

আপনি কীভাবে এগিয়ে যাওয়ার সিদ্ধান্ত নিয়েছেন তার উপর নির্ভর করে, আমি OPENQUERYবিপুল পরিমাণ আমদানি / রফতানি করার উপায় হিসাবেও সন্ধান করব ।

সব বলেছে ...

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

BACKUP DATABASE <DatabaseName, sysname, DatabaseName>
TO DISK=N'<backup_location, varchar, BackupLocation>.bak'
WITH INIT, FORMAT, COMPRESSION, COPY_ONLY

RESTORE DATABASE <NewDatabaseName, sysname, NewDatabaseName>
FROM DISK = N'<backup_location, varchar, BackupLocation>\
    <DatabaseName, sysname, DatabaseName>.bak'
WITH 
    MOVE '<DataFileName, sysname, DataFileName>' TO '<DataMDFPath, nvarchar(600), DataMDFPath>',
    MOVE '<LogFilePath, sysname, LogFilePath>' TO '<LogLDFPath, nvarchar(600), LogLDFPath>',
    REPLACE;

আপনি এসএসএমএসে টেম্পলেটগুলি কীভাবে ব্যবহার করবেন সে সম্পর্কে এই উত্তরটি উল্লেখ করতে পারেন ।

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