একটি 600 গিগাবাইট টেবিল ইনডেক্সড কী ডেটাটাইপ INT থেকে BIGINT এ পরিবর্তন করার দ্রুততম উপায়


13

আমার একটি ডাটাটাইপ 600 গিগাবাইট মাইএসকিউএল টেবিলের INT থেকে BIGINT এ পরিবর্তন করতে হবে কলামটির একটি অনন্য সূচক রয়েছে। আমি স্বাক্ষরবিহীন আইএনটি দিয়ে ভাল থাকতে পারি তবে আমি ধরে নিই যে বা বিগিন্টে পরিবর্তনটি একই রকম ব্যথা হবে। টেবিলের ইঞ্জিনটি ইনোডিবি। কি সহজ হবে:

  1. টেবিল পরিবর্তন করুন
  2. কাঠামো অনুলিপি এবং INSERT INTO (SELECT *)
  3. টেবিল ডাম্পিং এবং ডাম্প ফাইল সারণির সংজ্ঞা পরিবর্তন করা
  4. আর কিছু?

আপডেট: অনুরোধ অনুসারে, মাইএসকিউএল 5.5.15 ভেরি, কোনও বিদেশী কী নেই এবং টেবিল তৈরি করুন:

 CREATE TABLE `tbl` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `user_id` int(11) NOT NULL,
    `created_at` datetime NOT NULL,
    `tid` bigint(20) NOT NULL,
    `t` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
    `f` tinyint(1) NOT NULL,
    `i_id` bigint(20) NOT NULL,
    `ir_id` int(11) NOT NULL,
    `r_c` int(11) NOT NULL,
    `r` tinyint(1) NOT NULL,
    `e` text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
    `t` varchar(5) NOT NULL,
    PRIMARY KEY (`id`),
    UNIQUE KEY `user` (`user_id`,`tid`)
) ENGINE=InnoDB AUTO_INCREMENT=1657146169 DEFAULT CHARSET=utf8

ব্যথার সংজ্ঞা দিন, স্বল্পতম সময় নিবেন ....? দ্রুত ফলাফল?

@AlecTeal সময় কম পরিমাণ নিন
নোয়াম

যদিও এটি প্রশ্নের উত্তর দেয় না এবং এই প্রশ্নটি সম্ভবত টেবিলটি বড় হওয়ার আগে আলোচনা করা হয়েছিল, তবে আমি এই টেবিলটির আকার হ্রাস করার একটি উপায়ও খুঁজব।

1
মাইএসকিউএল এর কোন সংস্করণ? কিছু সংস্করণ আছে যেমন এটি গুরুত্বপূর্ণ ALTER TABLE ONLINE। আপনার কাছে এই কলামটি উল্লেখ করে বিদেশী কী রয়েছে? আপনি SHOW CREATE TABLE tablename;আউটপুট দেখিয়ে দিলে এটি সহায়তা করবে ।
ypercubeᵀᴹ

2
যদি সংক্ষিপ্ত ক্ষেত্রের নামগুলি টেবিলের আকার হ্রাস করতে সহায়তা করে তবে এটি 600 এমবি হবে
সমস্ত ব্যবসায়ের জন

উত্তর:


2

ধরে নেওয়া আপনার টেবিলে এতে কোনও ট্রিগার নেই, আপনার ব্যবহারের বিষয়টি বিবেচনা করা উচিত pt-online-schema-changeকারণ এটি আপনাকে লক না করেই টেবিলটি পরিবর্তন করতে দেয়।

এটি এখনও সারণির আকারের হিসাবে যথেষ্ট পরিমাণ সময় নেবে।

এছাড়াও, এই পদ্ধতিটি দিয়ে বা ALTER TABLEআপনার পুনরায় তৈরির সময় টেবিলের দুটি অনুলিপি সমর্থন করার জন্য আপনার কাছে 600 গিগাবাইট অতিরিক্ত ডিস্ক স্থান রয়েছে তা নিশ্চিত করতে হবে।


কোন সময় অনুমান আছে? (আমি জানি এটি অনেকগুলি বিষয়ের উপর নির্ভর করে, তবে যদি আপনার অনুমান করতে হয় তবে তার পরিসীমাটি কত হবে)
Noam

@ নোম আপনার টেবিলটি অনুলিপি করার দরকার নেই। আপনি যদি অ্যালার্ট টেবিল ব্যবহার করেন তবে সর্বনিম্ন কেসটি হ'ল এটি অনুলিপি করে, যদি আপনি একজন পরিপক্ক ইঞ্জিন ব্যবহার করছেন তবে এটি কেবল নিজের কাছে একটি নোট তৈরি করবে যে কিছু আগে (ফাইলের মধ্যে কিছু অবস্থান বা কিছু রেকর্ড) ইনট ব্যবহার করে, যে কোনও পোস্ট বিগিন্ট ব্যবহার করে, আপনি অনুকূলিতকরণ।

@ অ্যালকিটেল আপনার কি এতে কোনও আনুষ্ঠানিক রেফারেন্স আছে?
নোট

@ নোম আমার উত্তর দেখুন।

1
@ নোম আমি অনুমান করতাম যে এটি ALTER TABLEচালাতে 24 - 96 ঘন্টা সময় নিতে পারে। পরীক্ষার পরিবেশে ALTER TABLE চালিয়ে আপনি আরও ভাল অনুমান পেতে পারেন।
Ike Walker

2

ব্যবহারকে প্রভাবিত না করে পারকোনা টুলকিট ব্যবহার pt-online-schema-changeকরা আমার উত্পাদন হবে। এটি আপনার ডেল্টা এবং একটি টেম্পোরাল টেবিল পেতে কিছু ট্রিগার যুক্ত করবে যা হয়ে যাওয়ার পরে এই নামটি পুনরায় নামকরণ করবে।

উদাহরণ:

pt-online-schema-change --alter "CHANGE `id` `id` BIGINT  NOT NULL; " D=DB,t=TABLE

পিটি হল উপায়। @ নোম এফওয়াইআই: INT-> ইসি 2 উদাহরণস্বরূপ table 270 গিগাবাইটের টেবিলটিতে বড় মাইগ্রেশন এই টেবিলটিতে বেশ ভারী লেখার ক্রিয়াকলাপ সহ পিটি-অনলাইন-স্কিমা-পরিবর্তন ব্যবহার করে h৪ ঘন্টা সময় নিয়েছে।
জাকুব গাজিক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.