আমি খোঁজ করছি ব্যবহারিক মান নির্ধারণের জন্য পথনির্দেশ BUFFERCOUNT
, BLOCKSIZE
এবং MAXTRANSFERSIZE
এর BACKUP
কমান্ড। আমি কিছুটা গবেষণা করেছি (নীচে দেখুন), আমি কিছুটা পরীক্ষা করেছি, এবং আমি পুরোপুরি সচেতন যে কোনও সত্যই মূল্যবান উত্তর "ওয়েল, এটি নির্ভর করে ..." দিয়ে শুরু হবে। আমি যে টেস্টিং করেছি এবং আমার যে কোনও সংস্থান খুঁজে পেয়েছে (নীচের দিকে দেখুন) টেস্টিং সম্পর্কে আমার উদ্বেগগুলি হ'ল টেস্টিংটি একটি শূন্যস্থানে করা হয়, সম্ভবত অন্য কোনও লোড নেই এমন সিস্টেমে।
দীর্ঘমেয়াদী অভিজ্ঞতার ভিত্তিতে এই তিনটি বিকল্পের বিষয়ে সঠিক দিকনির্দেশনা / সেরা-অনুশীলন সম্পর্কে আমি আগ্রহী: সপ্তাহ বা কয়েক মাস ধরে অনেকগুলি ডেটা পয়েন্ট। এবং আমি সুনির্দিষ্ট মানগুলি খুঁজছি না যেহেতু এটি বেশিরভাগ উপলভ্য হার্ডওয়্যারের একটি ফাংশন, তবে আমি জানতে চাই:
- বিভিন্ন হার্ডওয়্যার / লোড ফ্যাক্টরগুলি কী করা উচিত তা কীভাবে প্রভাবিত করে।
- এমন কোনও পরিস্থিতি রয়েছে যেখানে এই মানগুলির কোনওটিই ওভাররাইড করা উচিত নয়?
- এগুলির কোনওটির ওভাররাইড করার জন্য কী কী সমস্যা রয়েছে যা তা অবিলম্বে সুস্পষ্ট নয়? খুব বেশি মেমরি এবং / অথবা ডিস্ক আই / ও ব্যবহার করছেন? পুনরুদ্ধার অপারেশন জটিল?
- আমার যদি এসকিউএল সার্ভারের একাধিক ইনস্ট্যান্স চালিত সার্ভার থাকে (একটি ডিফল্ট উদাহরণ এবং দুটি নামযুক্ত দৃষ্টান্ত), এবং যদি আমি একই সাথে সমস্ত 3 টি ইনস্ট্যান্সের ব্যাকআপগুলি চালনা করি, তবে আমি কীভাবে এই মানগুলিকে সম্মিলিত (
BUFFERCOUNT
*MAXTRANSFERSIZE
) উপলব্ধ র্যামের অতিক্রম করে না? সম্ভাব্য I / O বিতর্ক? - একটি সার্ভারে তিনটি ইনস্ট্যান্স থাকার একই পরিস্থিতিতে, এবং আবার তিনটি একই সাথে একই সাথে ব্যাকআপগুলি চালিয়ে যাওয়া, প্রতিটি ইনস্ট্যান্সের মধ্যে একসাথে একাধিক ডাটাবেসগুলির ব্যাকআপগুলি কীভাবে চালানো এই মানগুলির সেটিংকে প্রভাবিত করবে? অর্থ, তিনটি উদাহরণের প্রত্যেকটিতে যদি 100 টি ডাটাবেস থাকে তবে প্রতিটি ইনস্ট্যান্সে একযোগে 2 বা 3 ব্যাকআপ চলমান থাকে যেখানে একই সাথে 6 এবং 9 ব্যাকআপের চলমান থাকে। (এই পরিস্থিতিতে কয়েকটি বড় থেকে আমার কাছে অনেক ছোট থেকে মাঝারি ডাটাবেস রয়েছে))
আমি এ পর্যন্ত যা সংগ্রহ করেছি:
BLOCKSIZE
:- সমর্থিত আকারগুলি 512, 1024, 2048, 4096, 8192, 16384, 32768 এবং 65536 (64 কেবি) বাইট। [1]
- টেপ ডিভাইসের জন্য ডিফল্ট 65536 এবং অন্যথায় 512 [1]
- আপনি যদি কোনও ব্যাকআপ নিচ্ছেন যা আপনি কোনও সিডি-রোমে অনুলিপি করে পুনরুদ্ধার করার পরিকল্পনা করছেন, তবে ব্লকসিআইজি = 2048 নির্দিষ্ট করুন [1]
- আপনি যখন একক ডিস্কগুলিতে লিখেন, 512 এর ডিফল্টটি ঠিক থাকে; আপনি যদি RAID অ্যারে বা সান ব্যবহার করেন তবে আপনাকে ডিফল্ট বা 65536 ভাল কিনা তা পরীক্ষা করতে হবে। [১৩ (পৃষ্ঠা 18)]
যদি ম্যানুয়ালি সেট করা থাকে তবে মানটি> = ডেটা ফাইল (গুলি) তৈরি করতে ব্যবহৃত ব্লক সাইজ হওয়া দরকার, অন্যথায় আপনি নীচের ত্রুটি পাবেন:
এমএসজি 3272, স্তর 16, রাজ্য 0, লাইন 3
'সি: \ প্রোগ্রাম ফাইলগুলি \ মাইক্রোসফ্ট এসকিউএল সার্ভার \ এমএসএসকিউএল 11. এমএসএসকিউএসএলভার \ এমএসএসকিউএল \ ব্যাকআপ \ ব্যাকআপটেষ্ট.বাক' ডিভাইসটির একটি হার্ডওয়্যার সেক্টর আকার 4096 রয়েছে তবে ব্লক আকারের পরামিতি নির্দিষ্ট করে 512 এর একটি বেমানান ওভাররাইড মান। একটি সামঞ্জস্যপূর্ণ ব্লক আকার ব্যবহার করে বিবৃতিটি পুনরায় প্রকাশ করুন।
BUFFERCOUNT
:ডিফল্ট [২], [৮] :
এসকিউএল সার্ভার 2005 এবং পরবর্তী সংস্করণগুলি:
(নাম্বারফ্যাকব্যাকআপ ডিভাইসস [[রহস্য_ মাল্টিপ্লায়ার]) + নাম্বারফব্যাকআপ ডিভাইসস (2 * নাম্বারভলিউমস ইনভলভড)[রহস্য_মুক্তি সরবরাহকারী]: এই মানটি সম্পর্কে কিছুটা অসঙ্গতি রয়েছে। আমি এটি 3 টি রূপে প্রকাশিত দেখেছি:
3
[2]GetSuggestedIoDepth
[8]GetSuggestedIoDepth + 1
[8]
যে3
গুণকটি করণীয় তা পরীক্ষা করে এসকিউএল সার্ভার 2005 এসপি 2 [9] এ করা হয়েছিল ।এসকিউএল সার্ভার ২০০৮ আর ২ এবং ২০১২ এ আমার পরীক্ষা করা এবং এসকিউএল সার্ভার ২০১৪ [8] সম্পর্কিত একটি ব্যবহারকারীর মন্তব্য , গুণক হিসাবে প্রদর্শিত হবে
4
। অর্থ,GetSuggestedIoDepth
(সরাসরি নীচে) এর জন্য প্রতিবেদন করা মান দেওয়া হয়:GetSuggestedIoDepth
এখন4
, বা- গুণক এখন হয়
GetSuggestedIoDepth + 1
GetSuggestedIoDepth
3
ডিস্ক ডিভাইসগুলির জন্য ফিরে আসে [9]- কোনও হার্ড-সেট সর্বাধিক মান নয়, তবে সেই মেমোরিটির প্রয়োজনীয় = (
BUFFERCOUNT
*MAXTRANSFERSIZE
) দেওয়া থাকলে মনে হয় একটি ব্যবহারিক সর্বাধিক মান হবে:BUFFERCOUNT <= (available_memory / MAXTRANSFERSIZE)
MAXTRANSFERSIZE
:- সম্ভাব্য মানগুলি হ'ল 5৫৫36 (বাইট (KB৪ কেবি) এর 4194304 বাইট (4 এমবি) পর্যন্ত গুণমান। [1]
- ডিফল্ট মান: ডিভাইসটি যদি পঠন মোডে থাকে (পুনরুদ্ধার করুন) বা এটি কোনও ডেস্কটপ বা এক্সপ্রেস সংস্করণ 64K ব্যবহার করে, অন্যথায় 1 এমবি ব্যবহার করুন। [9]
- সাধারণ / বিবিধ:
- সর্বোচ্চ আকার যা ব্যবহার করা যায় তা হ'ল ( বাফার পুল টু ফিজিকাল মেমোরি / 16 )। থেকে প্রত্যাগত হিসাবে GlobalMemoryStatusEx (ullTotalPhys) এপিআই কল। [9]
- ট্রেস ফ্ল্যাগ
3213
আউটপুট ব্যাকআপ / পুনরুদ্ধার কনফিগারেশন প্যারামিটারগুলি ব্যাকআপ / পুনরুদ্ধার অপারেশনগুলি সম্পাদন3605
করার সময় এবং ERRORLOG ফাইলে আউটপুট ডাম্প করে :DBCC TRACEON (3213, 3605, -1);
- কিছু মেট্রিকের সহজ পরীক্ষার জন্য আপনি (ইউনিক্সের
DISK = N'NUL:'
ডস / উইন্ডোজ সমতুল্য/dev/null
) ব্যবহার করতে পারেন ( তবে আমি / ও লেখাটি এড়িয়ে যাচ্ছি বলে মোট প্রক্রিয়া সময় সম্পর্কে ভাল ধারণা পাওয়া যাবে না)
সম্পদ
- টি-এসকিউএল ব্যাকআপ কমান্ডের জন্য এমএসডিএন পৃষ্ঠা
- KB904804: আপনি এসকিউএল সার্ভার 2000-এ ডাটাবেস ব্যাকআপ করার সময় ধীর পারফরম্যান্সের অভিজ্ঞতা অর্জন করেন
- এসকিউএল সার্ভার ব্যাকআপ কার্যকারিতা উন্নত করার বিকল্পসমূহ
- ব্যাকআপ এবং পুনঃস্থাপন
- এসকিউএল সার্ভার ব্যাকআপ এবং পুনরুদ্ধার অনুকূলিতকরণ
- ব্যাকআপ পারফরম্যান্স অনুকূল করা
- সংক্ষেপণ এবং সলিড স্টেট ডিস্ক ব্যবহার করে কীভাবে এসকিউএল ডেটাবেস পূর্ণ ব্যাকআপ গতি বাড়ানো যায়
- ভুল বাফারকাউন্ট ডেটা স্থানান্তর বিকল্প OOM অবস্থার দিকে নিয়ে যেতে পারে
- এটি কীভাবে কাজ করে: এসকিউএল সার্ভারের ব্যাকআপ এবং ট্রান্সফার আকারগুলি কীভাবে পুনরুদ্ধার করে
- এটি কীভাবে কাজ করে: এসকিউএল সার্ভার ব্যাকআপ বাফার এক্সচেঞ্জ (একটি ভিডিআই ফোকাস)
- এসকিউএল ব্যাকআপ বড় ডাটাবেস টিউন
- ব্যাকআপ বাফার জন্য এসকিউএল সার্ভার মেমরি
- একটি কেস স্টাডি: দ্রুত ও নির্ভরযোগ্য ব্যাকআপ এবং নেটওয়ার্কের মাধ্যমে একটি ভিএলডিবি পুনরুদ্ধার (.ডোক্স ফাইল)
- ব্যাকআপ কার্যকারিতা উন্নত করার জন্য কতগুলি ব্যাকআপ ডিভাইস প্রস্তাবিত হয়?
আমি এটি দিয়ে পরীক্ষা করেছি:
--DBCC TRACEON (3213, 3605, -1);
BACKUP DATABASE [Test] TO
DISK = 'NUL:'
--,DISK = 'NUL:'
-- DISK = 'BackupTest1.bak'
-- ,DISK = 'BackupTest2.bak'
WITH
STATS = 5,
FORMAT,
CHECKSUM,
NO_COMPRESSION,
COPY_ONLY
--,BUFFERCOUNT = 40
--,MAXTRANSFERSIZE = 4194304--2097152,
--,BLOCKSIZE = 16384
--DBCC TRACEOFF (3213, 3605, -1);
হালনাগাদ
দেখে মনে হয় যে আমি কখনও কখনও এমন কোনও তথ্য যুক্ত করতে ভুলে যাই যা আমি সর্বদা অন্যদের কাছে জিজ্ঞাসা করি যখন আমি কোনও প্রশ্নের উত্তর দিচ্ছি ;-)। আমি আমার বর্তমান পরিস্থিতি সম্পর্কে উপরে কিছু তথ্য দিয়েছি, তবে আমি আরও বিশদ সরবরাহ করতে পারি:
আমি একটি ক্লায়েন্টের জন্য কাজ করছি যা 24/7 / 365.25 সাএস অ্যাপ্লিকেশন সরবরাহ করে। সুতরাং ব্যবহারকারীদের যে কোনও মুহুর্তে থাকার সম্ভাবনা রয়েছে, তবে বাস্তবিকভাবে, ব্যবহারকারীরা সমস্ত মার্কিন যুক্তরাষ্ট্রে (আপাতত) এবং বেশিরভাগ "স্ট্যান্ডার্ড" ঘন্টা কাজ করার ঝোঁক রাখেন: সকাল Pacific টা প্যাসিফিক (অর্থাৎ 10 এএম পূর্বাঞ্চল) থেকে 7 পূর্ব প্যাসিফিক (অর্থাত্ 10 পূর্ব পূর্ব), তবে সপ্তাহে 7 দিন কেবল সোমবার - শুক্রবার নয়, সপ্তাহান্তে লোড কিছুটা হালকা হলেও।
এগুলি এমনভাবে সেট আপ করা হয় যাতে প্রতিটি ক্লায়েন্টের নিজস্ব ডিবি থাকে। এটি একটি কুলুঙ্গি শিল্প তাই হাজার হাজার সম্ভাব্য ক্লায়েন্ট নেই (বা আরও বেশি)। ক্লায়েন্ট ডিবিগুলির সংখ্যা প্রতি ইনস্ট্যান্সে পরিবর্তিত হয়, বৃহত্তম ইনস্ট্যান্স সহ 206 ক্লায়েন্ট রয়েছে। বৃহত্তম ডিবি প্রায় হয়। 8 জিবি, তবে প্রায় 30 ডিবি 1 জিবি-র বেশি। অতএব, আমি বিশেষত কোনও ভিএলডিবির সর্বাধিক সম্পাদনের চেষ্টা করছি না।
আমি যখন এই ক্লায়েন্টটির সাথে শুরু করেছি, তখন তাদের ব্যাকআপগুলি সর্বদা একবার ছিল, প্রতিদিন একবার, এবং কোনও লগ ব্যাকআপ ছিল না। তারা MAXTRANSFERSIZE 4 MB এবং BUFFERCOUNT এ 50 সেট করেছে I আমি সেই সেটআপটি ওলা হ্যালেনগ্রেনের ডাটাবেস ব্যাকআপ স্ক্রিপ্টের কিছুটা কাস্টমাইজড সংস্করণ দিয়ে প্রতিস্থাপন করেছি । সামান্য কাস্টমাইজ করা অংশটি হ'ল এটি একটি বহু-থ্রেডিং সরঞ্জাম থেকে চালিত হয় (যা আমি লিখেছিলাম এবং আশা করি শীঘ্রই বিক্রি শুরু হবে) যা প্রতিটি ইনস্ট্যান্সের সাথে সংযুক্ত হওয়ার সাথে সাথে গতিশীলভাবে ডিবিগুলি আবিষ্কার করে এবং প্রতি ইনস্ট্রান্স প্রতি থ্রোটলিংয়ের অনুমতি দেয় (সুতরাং আমি বর্তমানে চালাচ্ছি একযোগে তিনটি উদাহরণ, তবে প্রতিটি প্রতিটা ডিবিই ধারাবাহিকভাবে যেহেতু আমি সেগুলি একই সাথে চালানোর কৌশল সম্পর্কে নিশ্চিত ছিল না)।
সেটআপটি এখন প্রতি সপ্তাহে একদিন পূর্ণ ব্যাকআপ এবং অন্যান্য দিনগুলিতে ডিআইএফএফ ব্যাকআপ করতে হবে; প্রতি 10 মিনিটে এলওজি ব্যাকআপ নেওয়া হয়। আমি এখানে যে তিনটি অপশন সম্পর্কে জিজ্ঞাসা করছি তার জন্য আমি ডিফল্ট মানগুলি ব্যবহার করছি। তবে, কীভাবে সেগুলি সেট করা হয়েছিল তা জানতে পেরে আমি নিশ্চিত করতে চেয়েছিলাম যে আমি কোনও অপ্টিমাইজেশন পূর্বাবস্থায় নিচ্ছি না (কেবলমাত্র পুরানো ব্যবস্থায় কিছু বড় ত্রুটি রয়েছে তার মানে এই নয় যে সবকিছুভুল ছিল). বর্তমানে, ২০6 টি ডাটাবেসের জন্য পুরো ব্যাকআপের জন্য (সপ্তাহে একবার) প্রায় minutes২ মিনিট সময় লাগে এবং বাকী দিনগুলিতে ডিআইএফএফ ব্যাকআপের জন্য and থেকে ২০ মিনিটের মধ্যে (ফুলের পরে প্রথম দিনে 7, এবং শেষ দিনটিতে ২০) সময় লাগে পরবর্তী সম্পূর্ণ)। এবং এটি তাদের ক্রমানুসারে চালিত করছে (একক থ্রেড)। এলওজি ব্যাকআপ প্রক্রিয়া, মোট (সমস্ত 3 টি ক্ষেত্রে সমস্ত ডিবি) প্রতিবার 50 থেকে 90 সেকেন্ডের মধ্যে (আবার, প্রতি 10 মিনিটে) লাগে।
আমি বুঝতে পেরেছি যে প্রতি ডিবিতে আমি একাধিক ফাইল চালাতে পারি, তবে ক) আমি নিশ্চিত নই যে মাল্টিথ্রেডিং এবং ডিবিগুলির ছোট থেকে মাঝারি আকারের আরও কত ভাল দেওয়া হবে, এবং খ) পুনরুদ্ধার প্রক্রিয়াটি জটিল করতে চাই না ( একক ফাইলের সাথে ডিল করার জন্য বিভিন্ন কারণকে প্রাধান্য দেওয়া হয়েছে)।
আমি আরও বুঝতে পারি যে আমি সংক্ষেপণ সক্ষম করতে পারি (আমার পরীক্ষার প্রশ্নে এটি ইচ্ছাকৃতভাবে অক্ষম করা হয়েছে), এবং আমি দলে এটির প্রস্তাব দিয়েছিলাম, তবে এটি আমার নজরে আনা হয়েছিল যে অন্তর্নির্মিত সংকোচনের বিষয়টি কৃপা চুষি। পুরানো প্রক্রিয়ার অংশটি ছিল প্রতিটি ফাইলকে একটি আরএর মধ্যে সংকুচিত করা, এবং আমি নিজের পরীক্ষা করে দেখেছি যে হ্যাঁ, আরএআর সংস্করণ নেটিভ সংকোচিত সংস্করণের চেয়ে কমপক্ষে 50% ছোট। আমি জিনিসগুলির গতি বাড়ানোর জন্য প্রথমে নেটিভ কমপ্রেস ব্যবহার করার চেষ্টা করেছি এবং তারপরে ফাইলগুলি আরএআর করেছি, তবে সেই ফাইলগুলি কেবল নেটিভ সংকোচিত ফাইলগুলির চেয়ে ছোট হলেও আরআর-কেবল সংক্ষেপিত সংস্করণের চেয়ে কিছুটা বড় ছিল এবং ন্যায়সঙ্গতভাবে যথেষ্ট পার্থক্য দ্বারা নেটিভ কম্প্রেশন ব্যবহার না। ব্যাকআপগুলি সংকুচিত করার প্রক্রিয়াটি অ্যাসিনক্রোনাস এবং প্রতি এক্স মিনিটে চলে। যদি এটি একটি .bak
বা.trn
ফাইল, এটি সংকুচিত। এইভাবে, ব্যাকআপ প্রক্রিয়াটি প্রতিটি ফাইল সংকোচনের জন্য সময় নেয় না।