কখন ডাটাবেস সঙ্কুচিত করা ঠিক হবে?


43

আমি জানি সঙ্কুচিত হ'ল শয়তান: এটি পৃষ্ঠার ক্রমকে বিপরীত করে এবং ত্বকের ক্যান্সার, ডেটা বিভাজন এবং গ্লোবাল ওয়ার্মিংয়ের জন্য দায়ী। তালিকাটি চলছে ... বলা হচ্ছে, বলুন যে আমার কাছে 100 গিগাবাইট ডাটাবেস রয়েছে এবং আমি 50 জিবি ডেটা মুছি - এক টেবিলের উপরে নয়, তবে 90% এর আচ্ছাদন করে একটি ডাটাবেস প্রশস্ত স্তরে পুরানো ডেটার সাধারণ ছাঁটাই করা হয় টেবিল - এটি ডাটাবেস সঙ্কুচিত করার জন্য উপযুক্ত ব্যবহারের ক্ষেত্রে গঠন করে?

যদি তা না হয় তবে একটি ডাটাবেস থেকে এত উচ্চমানের ডেটা অপসারণের পরে ঘর পরিষ্কারের জন্য উপযুক্ত পদক্ষেপগুলি কী? আমি দুটি সম্পর্কে ভাবতে পারি: সূচি পুনর্নির্মাণ এবং আপডেটের পরিসংখ্যান। আর কি?

উত্তর:


13

একটি পুনর্গঠন এবং সঙ্কোচ সত্যই সুপারিশ করা হয় না।

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

সঙ্কুচিত হওয়ার পরে সূচীগুলি পুনরুদ্ধার করার অর্থ তাদের তাত্পর্যপূর্ণভাবে টুকরো টুকরো হওয়া উচিত নয় এবং সঙ্কুচিত হওয়ার পরে এগুলি পুনর্নির্মাণের অর্থ তাদের পুনর্নির্মাণের অর্থ ফাইলগুলির মধ্যে পৃষ্ঠা বরাদ্দে অনেকগুলি ছোট "গর্ত" ছাড়বে না যা পরবর্তীতে খণ্ডিত হতে পারে invite

আপনি যদি অ্যাপ্লিকেশনগুলিকে অফলাইন করতে পারেন তবে অন্য একটি বিকল্প হ'ল একই কাঠামোর একটি নতুন ডাটাবেসে সমস্ত ডেটা স্থানান্তর করা। যদি আপনার বিল্ড প্রক্রিয়াটি দৃ is় হয় তবে আপনার বর্তমান ডিবি থেকে কোনওটি তৈরি না করে দ্রুত সেই ফাঁকা ডিবি তৈরি করতে সক্ষম হওয়া উচিত (বর্তমানের একটি ব্যাকআপ পুনরুদ্ধার করুন, টেবিলের সমস্ত বিষয়বস্তু ছাঁটা / মুছে ফেলুন এবং একটি সম্পূর্ণ সঙ্কুচিত করুন)।

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

এছাড়াও, যদি গন্তব্যটিকে নতুন হিসাবে তৈরি করা হয় (উত্সের অনুলিপিটি ফাঁকা না করে) এটি একটি প্রাথমিক আকারের সাথে তৈরি করে যা সমস্ত বর্তমান ডেটা এবং আরও কয়েক মাসের বৃদ্ধির পরিমাণ ধারণ করে - যা ডেটা অনুলিপিটিকে আবার আরও দ্রুত তৈরি করবে এটি পুরো প্রক্রিয়া জুড়ে এখন এবং নতুন জায়গা বরাদ্দ করা হবে না।

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

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

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

অনুলিপি অপারেশনের জন্য, এসএসআইএস বা বেস টি-এসকিউএল ঠিক একইভাবে কাজ করবে (এসএসআইএস বিকল্পটি কম দক্ষ হতে পারে তবে পরে বজায় রাখা সম্ভাব্যতর সহজ)। যদি আপনি সূচকগুলি সহ এফকে সম্পর্কগুলি তৈরি করেন তবে আপনি প্রতিটি টেবিলের জন্য একটি সহজ "উভয় ক্ষেত্রেই অনুলিপি" করতে পারেন। অবশ্যই এক সময়ের জন্য, একটি সঙ্কুচিত + পুনর্গঠন সম্ভবত খুব ভাল তবে আমি কেবলমাত্র লোকজনকে নিয়মিত সঙ্কুচিত বিবেচনা না করে ভয় দেখাতে চাই! (আমি জানি লোকেরা প্রতিদিন তাদের শিডিউল করে)।


16

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

আপনি যদি ডাটাবেস সঙ্কুচিত করেন, আপনি কীসের জন্য মুক্ত করা ডিস্ক স্থান ব্যবহার করতে যাচ্ছেন? আবার যদি আপনি কেবল এই স্থানটি মুক্ত রাখতে চলেছেন যদি এই ডাটাবেসটি আবার বাড়ছে তবে আপনি কেবল নিজের চাকাগুলি ঘুরছেন।

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

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


@ অ্যারন বার্ট্র্যান্ড ওয়েল 10 মিনিট সময় লাগল যে বড় এবং ডিস্কটি কিছুটা উদ্বেগজনক কারণ আমি এটিকে শক্ত অবস্থানে রাখতে চাই। আমি 5gb অটগ্রোথ দিয়ে 60gb তে নেমে যাওয়ার চিন্তা করছিলাম। সত্যই আপনি প্রস্তাবিত জিনিসগুলি হ'ল সূচকগুলি পুনর্নির্মাণ করা উচিত? আমি ভেবেছিলাম লোকদের আরও কিছু সুপারিশ থাকবে।
ভোলা_বি_টুনা

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

2

যদি আপনি স্থানের বাইরে চলে যান এবং আপনার ডেটাটি এত বড় হয়ে যায় তবে সঙ্কুচিত হওয়ার কথা নয়, তবে যথাযথ বর্ধনের জন্য যথাযথ পূরণের কারণগুলির সাথে আপনার সূচকগুলি পুনরায় তৈরি করুন।

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

আপনি সাধারণত 5 ঘন ঘন 5GB বাড়ার প্রত্যাশা না করলে আমি 5 গিগাবাইটের অটো বৃদ্ধির প্রস্তাব দেব না। অন্যথায় আপনার মাঝে মাঝে পারফরম্যান্সের সমস্যা হতে পারে। আপনার ডেটা আকারটি প্রথমে আপনার মনে হয় যা বলা উচিত, সেট করুন, এক বছরের জন্য সেট করা উচিত এবং অটো গ্রোথ এমন একটি আকারে সেট করা উচিত যা আপনি পরীক্ষা করেছেন যা অপারেটিং কর্মক্ষমতাকে প্রভাবিত করে না। এসকিউএল সার্ভারে সেই সংকুচিত ডাটাবেস বোতামটি স্পর্শ করবেন না দেখুন ! মাইক ওয়ালশ দ্বারা।

সঙ্কুচিত হওয়ার আগে সূচকগুলি পুনর্নির্মাণের ফলে সূচকগুলি খারাপভাবে ছাঁটাই করা হয়। আবার সংকুচিত হয়ে পুনর্নির্মাণ করা ভাল নয়। সঙ্কুচিত হওয়ার কারণে সূচিগুলি স্থান পুনরুদ্ধারে মঙ্গল হয়ে যায় - সুতরাং পূর্বে পুনর্নির্মাণের পরে সঙ্কুচিত হওয়া অর্থহীন। টমাস লারক দ্বারা স্বয়ংক্রিয় সঙ্কুচিত কখন ব্যবহার করবেন তা দেখুন ।


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

এবং অবশ্যই এটি সূচকগুলি ডেটাতে ধরে নিয়েছে যা অবশেষে পুনর্নির্মাণের প্রয়োজন হবে - সম্ভবত তারা ইতিমধ্যে বেশ ভাল অবস্থানে রয়েছে।
অ্যারন বার্ট্র্যান্ড

1

আমি জানি না এটি সঙ্কুচিত হওয়ার পরে পুনর্নির্মাণের চেয়ে আরও ভাল কাজ করবে কিনা তবে অন্য বিকল্পটি হ'ল একটি নতুন ডেটা ফাইল তৈরি করা যা যথাযথ আকারের মাপযুক্ত এবং সমস্ত ডেটা সেটিতে সরিয়ে দেয়। সেক্ষেত্রে আমি প্রথমে একটি রিইন্ডেক্স করব যাতে আপনি জানেন যে প্রকৃত ডেটা আকার। একটি ধরা হ'ল এটি যদি প্রাথমিক ডেটা ফাইলের প্রথম ফাইল হয় তবে আমি মনে করি না আপনি এটি খালি করতে পারেন। আপনি এটি সঙ্কুচিত করতে সক্ষম হবেন এবং পরে ডেটাটি আবার সরিয়ে ফেলুন এবং এটি পৃষ্ঠাটি বিপর্যয় এড়াতে সক্ষম হবে। তবে আপনি যদি দৃ solid় অবস্থায় চলে যাওয়ার দিকে তাকিয়ে থাকেন তবে যাইহোক এটির কোনও বড় পার্থক্য করা উচিত নয়।


1

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

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

আরও উল্লেখযোগ্য বিষয়, এটি সঙ্কুচিত হওয়ার জন্য দুর্দান্ত পরিস্থিতি উন্মুক্ত করে:

  1. এমন একটি স্ক্রিপ্ট তৈরি করুন যা আপনার ডাটাবেসে সমস্ত বস্তু এবং তাদের ফাইলগোষ্ঠী খুঁজে পাবে (অনলাইনে উদাহরণের প্রচুর পরিমাণে), ড্রপ ক্লজ তৈরি করতে পাশাপাশি আপনার প্রতিটি সূচক এবং সীমাবদ্ধতার জন্য সংজ্ঞা তৈরি করতে এটি ব্যবহার করুন।
  2. একটি নতুন ফাইল এবং ফাইলগ্রুপ তৈরি করুন এবং এটি ডিফল্ট করুন।
  3. সমস্ত অবিচ্ছিন্ন সূচকগুলি ফেলে দিন (দ্রষ্টব্য, কিছু সূচকগুলি সীমাবদ্ধতা হতে পারে)।
  4. নতুন ফাইলগ্রুপে আপনার ক্লাস্টারযুক্ত সূচকগুলি DROP_EXISTING = ON দিয়ে তৈরি করুন (যা বিটিডব্লিউ, অনেক বিকল্পের তুলনায় শুরু করার জন্য একটি অত্যন্ত দ্রুত, ন্যূনতম লগ করা অপারেশন)।
  5. আপনার অবিচ্ছিন্ন সূচকগুলি পুনরায় তৈরি করুন।
  6. অবশেষে, আপনার পুরানো ডেটা ফাইল সঙ্কুচিত করুন (সাধারণত PRIMARY)।

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

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