বড় মাইএসকিএল টেবিলগুলিতে সূচক যুক্ত করা হচ্ছে


13

আমার একটা টেবিল আছে

| বেস_শিক্ষিত_লাইন_সাইটস | সারণি তৈরি base_schedule_line_items(
idint- এ (10) স্বাক্ষরবিহীন নাল AUTO_INCREMENT,
installmentint- এ (10) স্বাক্ষরবিহীন না নাল,
on_dateতারিখ নাল না,
actual_dateতারিখ ডিফল্ট নাল,
payment_typeint- এ (11) না নাল,
scheduled_principal_outstandingদশমিক (65,0) না নাল,
scheduled_principal_dueদশমিক (65,0) নাল নয়,
scheduled_interest_outstandingদশমিক (65 ,, ০) নাল নয়,
scheduled_interest_dueদশমিক ( , NOT, ০) নয় নাল,
currencyইনট (১১) নাল নয়,
updated_atতারিখের সময় নাল নয় '2013-01-06 14:29:16', তারিখের সময় নন
created_atডিফল্ট ' 2013-01-06 14:29:16 ',
loan_base_schedule_idইনট (10) স্বাক্ষরিত নয় নল,
lending_idইনট (10) স্বাক্ষরবিহীন নয় নল,
rescheduleটিনিন্ট (1) ডিফল্ট' 0 ',
প্রাথমিক কী ( id),
কী index_base_schedule_line_items_loan_base_schedule ( loan_base_schedule_id), কী index_bslt_spd( scheduled_principal_due),
কী index_bslt_lending(lending_id),
মূল index_bslt_actualdate( actual_date),
মূল index_bslt_spsila ( loan_base_schedule_id, scheduled_principal_due, scheduled_interest_due, actual_date),
মূল index_bslt_ondate( on_date),
মূল index_bslt_oa( on_date, actual_date),
মূল index_bslt_ol( on_date, loan_base_schedule_id),
মূল index_bslt_oli( on_date, lending_id)
) ইঞ্জিন = InnoDB AUTO_INCREMENT = 30410126 ডিফল্ট charset = UTF8 |

এখন এই টেবিলটির এতে 30 মিলিয়ন রেকর্ড রয়েছে, আমার এটিতে আরও দুটি সূচী যুক্ত করা দরকার এবং এটির মতো এটি যুক্ত হতে কয়েক বছর সময় লাগে।

টেবিল বেস_সচিউড_লাইন_াইটেমগুলি পরিবর্তিত করুন সূচি সূচক_ব্লাস্ট_স্লা (তফসিল_প্রিন্সিপাল_ডিউ, প্রকৃত_সংশ্লিষ্ট, ndingণদান_আইডি) যোগ করুন;
টেবিল বেস_সচিউড_লাইন_সাইটগুলি পরিবর্তিত করুন সূচি সূচক_ব্লসট_সেলা (তফসিল_প্রিন্টিকাল_ডিউ, তফসিল_ইন্টেরেস্ট_ডিউ, ndingণদান_আইডি, আসল_ তারিখ) যোগ করুন;

আমি টেবিলের আকার জানতে নীচের বর্ণিত ক্যোয়ারী ব্যবহার করেছি

টেবিলের নাম হিসাবে "টেবিল" নির্বাচন করুন, রাউন্ড (((ডাটা_ দৈর্ঘ্য + সূচক_ দৈর্ঘ্য) / 1024/1024), 2) "এমবিতে আকার" তথ্য থেকে সীমাবদ্ধ করুন AB টেবিলগুলি যেখানে টেবিল_শেমি = "আমার_ড্যাটাবেস_নাম");

ফলাফল হিসাবে প্রকাশিত হয়েছে

বেস_শিক্ষিত_লাইন_সাইটস | 20111,00

আমি এটি কেবল ডেটা দৈর্ঘ্য গণনা করতে ব্যবহার করেছি এবং সূচীর দৈর্ঘ্য রেখেছি

টেবিলের নাম হিসাবে "টেবিলগুলি", রাউন্ড (((ডাটা_ দৈর্ঘ্য) / 1024/1024), 2) "এমবিতে আকার" তথ্য_চেমার কাছ থেকে T টেবিলগুলি কোথায় টেবিল_স্কেমা = "আমার_ড্যাটাবেস_নাম");

এবং ফলাফল ছিল

বেস_শিক্ষিত_লাইন_সাইটস | 9497,00

সূচকগুলি

মূল index_bslt_actualdate (ACTUAL_DATE),
মূল index_bslt_spsila (loan_base_schedule_id, scheduled_principal_due, scheduled_interest_due, ACTUAL_DATE),
মূল index_bslt_ondate (ON_DATE),
মূল index_bslt_oa (ON_DATE, ACTUAL_DATE),
মূল index_bslt_ol (ON_DATE, loan_base_schedule_id),
মূল index_bslt_oli (ON_DATE, lending_id)

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

উত্তর:


16

বড় টেবিল পরিবর্তন করার ক্রিয়াকলাপ পর্যায়ক্রমে করা হয়:

  1. পরীক্ষার ডিবিতে প্রয়োজনীয় ক্ষেত্রগুলি এবং সূচীগুলি সহ একটি নতুন টেবিল তৈরি করুন (কেবল কাঠামো)
  2. বিদ্যমান সারণী থেকে ডেটা ফেলে দিন এবং পরীক্ষার ডিবিতে নতুন তৈরি করা টেবিলটিতে একই লোড করুন
  3. এখন আপনার ডাউনটাইম ঘোষণা করুন :)
  4. নাম পরিবর্তন করে টেবিলগুলি অদলবদল করুন - RENAME table ur_db.table_name to test.temp, test.table_name to ur_db.table_name, test.temp to test.table_name;এটি একটি পরমাণুর অপারেশন যা সেকেন্ডের ভগ্নাংশ গ্রহণ করে।
  5. নতুন নির্মিত টেবিলটিতে অতিরিক্ত রেকর্ডগুলি লোড করুন (ডাম্পিং এবং তারপরে লোড করার পরে যে রেকর্ডগুলি এসেছিল)। আপনার ডাউনটাইম কমাতে একবারে এই পদক্ষেপটি পদক্ষেপ: 3 এর আগেও করা যেতে পারে।
  6. এবং আপনার সিস্টেম ফিরে এসেছে

কয়েকটি নোট:

  1. আপনার সরাসরি তথ্য স্কিমা আঘাত করতে হবে না, ব্যবহার চেষ্টা করুন SHOW TABLE STATUS from db like 'table_name'
  2. পরিবর্তিত টেবিলের গতি কমবেশি I / O গতির সাথে যুক্ত। গতবার যখন আমরা সরাসরি পরিবর্তনের টেবিলটি চালিয়েছিলাম (উপরের পদক্ষেপগুলি ছাড়াই), আমাদের 40 জিবি + টেবিলের আকারটি প্রায় 4 ঘন্টা সময় লেগেছিল। যদি আপনার 20 জিবি ডেটা কয়েক বছর সময় নেয় তবে আপনি কিছু পুরানো মেশিনে কাজ করছেন।
  3. এছাড়াও index_bslt_ondate, index_base_schedule_line_items_loan_base_scheduleঅন্য কিছু সূচকের মতো অনাকাঙ্ক্ষিত সূচকগুলি বাদ দিন যেমন সূচীযুক্ত কলাম হিসাবে সবচেয়ে বেশি কলাম থাকে

আপনার যদি এই পদক্ষেপগুলির কোনও সম্পর্কে কোনও ব্যাখ্যা প্রয়োজন হয় তবে দয়া করে আমাকে জানান।

সম্পাদনা করুন: প্রক্রিয়াটি স্বয়ংক্রিয় করার জন্য একটি সাধারণ অজগর স্ক্রিপ্ট https://github.com/georgecj11/hotswap_mysql_table.git


10

আপনার অ্যাপ্লিকেশনটি অবরুদ্ধ না করে সূচি যোগ করতে আপনি পিটি-অনলাইন-স্কিমা-পরিবর্তনের মতো একটি সরঞ্জাম ব্যবহার করতে পারেন । মূল যুক্তিটি নিম্নরূপ:

  • নতুন সূচক সহ টেবিলের খালি অনুলিপি তৈরি করুন
  • বিদ্যমান টেবিলটিতে ট্রিগার যুক্ত করুন যাতে টেবিলটিতে যে কোনও পরিবর্তন ঘটে তা টেবিলের অনুলিপিটিতে প্রয়োগ করা হবে *
  • পুরানো টেবিল থেকে নতুনটিতে সারিগুলি অনুলিপি করা শুরু করুন
  • অনুলিপিটি শেষ হয়ে গেলে, টেবিলগুলি অদলবদল করুন
  • পুরানো টেবিলটি ফেলে দিন

* টেবিলে বিদ্যমান ট্রিগার থাকলে সরঞ্জামটি কাজ করে না

অদলবদল এবং ড্রপিং আচরণটি সরঞ্জামে দেওয়া বিকল্পগুলির উপর ভিত্তি করে সামঞ্জস্য করা যেতে পারে।

এছাড়াও, বিদেশী কীগুলির সাথেও সমস্যা রয়েছে, সুতরাং এটি কী করছে তা সম্পূর্ণরূপে বোঝার জন্য সরঞ্জামটির ডকুমেন্টেশনটি অবশ্যই নিশ্চিত করে নিন be

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

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