তথ্য সংরক্ষণাগার জন্য সারণী বিভাজন


13

দৃশ্যপট:

  • দুটি ডাটাবেস: ডিবি_এ এবং ডিবি_আরচিভ যার একটি খুব বড় টেবিল রয়েছে টেবিলএ।
  • প্রতিদিন, days০ দিনের বেশি পুরানো রেকর্ডগুলি ডিবি_এ থেকে মুছে ফেলা হয় এবং ডিবি_আরচাইভে সরানো হয় মূলত কিছু "আলাদা" রাখতে কারণ টেবিলটি বিগত 2 মাসের রেকর্ডগুলির জন্য ডিবি_এ-তে ভারী অনুসন্ধান করে।

আমি এই প্রক্রিয়া থেকে মুক্তি পেতে চাই কারণ এটি ধীর এবং প্রচুর সংস্থান গ্রহণ করে। আমি একটি তারিখ কলামে পার্টিশন ফাংশন সহ ডিবি_এ-তে টেবিল বিভাজন বাস্তবায়নের এবং সমস্ত রেকর্ড <2 মাস এক পার্টিশনে এবং সমস্ত রেকর্ড> 2 মাস অন্য পার্টিশনে সংরক্ষণ করার কথা ভাবছি। আমার প্রশ্নগুলো:

  • এই দৃশ্যটি যদি আমার 2 টি ভিন্ন ভিন্ন ডাটাবেস থাকে তবে এমন আচরণ করা যাচ্ছে? আমি যদি আমার টেবিলএ রেকর্ডস> getdate () - 30 এর জন্য জিজ্ঞাসা করি তবে এটি কি সংরক্ষণাগার বিভাজনটি পড়তে চলেছে?
  • আমার অনুমান করা উচিত আমাকেও সূচকগুলিও ভাগ করে দিতে হবে, তাই না?
  • আগামীকাল আমার বিভাজনের ফাংশনটি "পরিবর্তিত হবে" এই বাস্তবতার সাথে আমি কীভাবে আচরণ করব, আমি বলতে চাই যে, আমি যদি আজই এই ফাংশনটি তৈরি করি (২ রা জুলাই, এর পরিসীমা মে মাসের ২ য় হবে, তবে আগামীকাল ২ May শে মে হবে)। আমি কি একটি গতিশীল পার্টিশন ফাংশন তৈরি করতে পারি?

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

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

হাই মার্ক, হ্যাঁ দয়া করে করুন, এবং যদি আপনি নিজের অভিজ্ঞতাও ভাগ করে নিতে পারেন। এটা সফল ছিল?
দিয়েগো

এটি কাজ করে তবে শেষ পর্যন্ত অপ্রয়োজনীয় ছিল (আমরা একটি সহজ রুট নিয়েছি)। আপনার ক্ষেত্রে day০ দিনের সীমানা কেন বিদ্যমান তা সম্ভবত আপনি প্রসারিত করতে পারেন? প্রত্যেককে আপনাকে সঠিক দিকে নির্দেশ করতে সহায়তা করবে।
মার্ক স্টোরি-স্মিথ

উত্তর:


6

বিভাজনের সাথে সাথে আপনাকে প্রতিদিন একটি পার্টিশন করতে হবে, যা 1000-পার্টিশনের প্রাক-এসকিউএল 2012 সীমাটিকে নতুন দৃষ্টিকোণে রাখে কারণ এটি কেবল 3 বছরের আর্কাইভের অনুমতি দেয়। এসকিউএল সার্ভার 2012 এর সাথে আপনি 15000 পার্টিশন পাবেন যা প্রতিদিন 1 পার্টিশনের জন্য প্রচুর।

প্রতিদিন আপনি একটি নতুন পার্টিশন যোগ করা হবে। আপনি যদি গত 61১ তম পার্টিশনটি সরিয়ে নিতে চান তবে আপনি এটি দক্ষতার সাথে করতে পারেন তবে এটি এখনও একটি অফলাইন অপারেশন। দক্ষতার সাথে একটি পার্টিশন একটি ভিন্ন ফাইল গ্রুপে স্থানান্তরিত করুন দেখুন ।

আপনার সমস্ত সূচকগুলি সারিবদ্ধ করতে হবে, পার্টিশনিত সূচকগুলির জন্য বিশেষ নির্দেশিকা দেখুন ।

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


নতুন সীমাটি 2008 এসপি 2 এবং 2008 আর 2 এসপি 1 এ উপলব্ধ। ব্লগস.এমএসডিএন
জন সেগেল

@ জন: ২০০৮ সালের এসপি ২, ২০০৮-এর এসপি 1 বাস্তবায়ন একটি বড় সতর্কতা নিয়ে আসে . As explained in this white paper, there are implications on certain features, including performance.। এসকিউএল 2012 সমর্থন কোনও সতর্কতা সহ আসে।
রিমাস রুসানু

যে ইশারা জন্য ধন্যবাদ; এটি সত্য যে ২০০৮/২০০৮ আর ২ তে এটি ব্যবহারের জন্য কিছু সতর্কতা রয়েছে তবে প্রয়োজনে এটি একটি উপলভ্য বিকল্প।
জন সেগেল

আপনার মন্তব্যের জন্য ধন্যবাদ. আমি পরে উপাদানটির মন্তব্য পড়ব
ডিয়েগো

2

পার্টিশন ফাংশনটি গতিশীল হতে পারে কিনা তা আমি জানি না তবে আমি সন্দেহ করি। সেই পথটি না চালিয়ে আপনার জন্য কিছু বিকল্প:

1 - ক্যালেন্ডারে DATE বিভাজন এবং প্রতিদিন পুরানো পার্টিশনটি সরান

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

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


আমি "প্রতিটি দিন" ম্যানুয়াল অপারেশনগুলি এড়াতে চাই
ডিয়েগো

2

আপনার জন্য কী কাজ করা উচিত তা এখানে: ডিবি_এ - টেবিলএ বিগত 60 দিনের প্রত্যেকের জন্য আলাদা পার্টিশন সহ - স্টেজিং টেবিলটি পুরানো পার্টিশন থেকে ডেটা সরিয়ে নিতে

ডিবি_আর্কাইভ টেবিলএ - 60 দিনের চেয়ে পুরানো সমস্ত ডেটা সঞ্চয় করে। (বিভক্ত নয়)

প্রক্রিয়া: ১. দিন শেষ হওয়ার আগে: পার্টিশনের ফাংশনটি পরিবর্তন করুন - নতুন দিনের জন্য একটি নতুন পার্টিশন যুক্ত করার জন্য বিভাজন পরিসীমা। (এনবি: "আজকের তারিখ + 1 দিন" এর জন্য পার্টিশন তৈরি করার পরিবর্তে আপনি কয়েক ধাপ এগিয়ে যেতে চাইতে পারেন eg যেমন: "আজকের তারিখ + 5 দিন"

  1. প্রতিটি দিন শেষ হওয়ার পরে, আপনি প্রথমে DB_A.tableA- এ পুরানো পার্টিশনটি DB_A.stasingTable এ স্যুইচ করুন; প্রাচীনতম পার্টিশনগুলি মার্জ করুন।

  2. DB_A.stasingTable থেকে DB_Archive.tableA এ ডেটা আমদানি করুন। শেষ অবধি ট্রুনাক্ট ডিবি_এ.স্টেজিং টেবিল

উপরেরটিকে রোলিং উইন্ডো বলা হয় এবং এটি ভিএলডিবি'র পক্ষে একটি সাধারণ সাধারণ দৃশ্য। পার্টিশন সম্পর্কিত মাইক্রোসফ্ট দ্বারা এই সাদা কাগজটি দেখুন: পার্টিশন টেবিল এবং সূচি কৌশলগুলি বা স্লাইডিং উইন্ডো দৃশ্যে এটি বিশেষ করে দেখুন


0

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

http://www.sqlscientist.com/2012/09/auto-maintain-archival-process.html


1
আপনি কি দয়া করে আপনার উত্তরটিতে সেই পোস্টের মূল পয়েন্টগুলি অন্তর্ভুক্ত করতে পারেন? আপনি জানেন, লিঙ্কগুলি আসে এবং যায় এবং যখন তারা যায়, আপনার পোস্টে কেবল একটি মৃত লিঙ্ক থাকবে।
dezso
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.