আমার একটি 700 গিগাবাইট ইনোডিবি টেবিল রয়েছে যা আমি আর কোনও ডেটা লিখছি না (কেবল পড়া)) আমি এটি ধারণ করে থাকা পুরানো ডেটা মুছতে এবং সেই ডিস্কের স্থানটি পুনরায় দাবি করতে চাই (যেহেতু আমি এটির বাইরে চলে আসছি)। মোছা অংশটি বেশ সহজ, কারণ আমার কাছে একটি অটো-ইন প্রাথমিক সূচক রয়েছে যাতে আমি এটি ব্যবহার করে খণ্ডগুলিতে পুনরাবৃত্তি করতে পারি এবং সারিগুলি মুছতে পারি, তবে এটি আমাকে আর জায়গাটি ফিরিয়ে আনবে না। আমি ধরে নিলাম OPTIMIZE TABLE
তবে এটি 700 গিগাবাইটের টেবিলে চিরতরে নিতে পারে, সুতরাং অন্য কোন বিকল্পটি কি আমি উপেক্ষা করছি?
রোল্যান্ডোমাইএসকিউএলডিবিএ সম্পাদনা করুন
আপনার টেবিলটি ধরে নিচ্ছেন mydb.mytable
, দয়া করে নীচের ক্যোয়ারীটি চালান এবং এটি এখানে পোস্ট করুন যাতে আপনি টেবিলের সঙ্কুচিত হওয়ার জন্য প্রয়োজনীয় ডিস্কস্পেস নির্ধারণ করতে পারেন:
SELECT
FORMAT(dat/POWER(1024,3),2) datsize,
FORMAT(ndx/POWER(1024,3),2) ndxsize,
FORMAT((dat+ndx)/POWER(1024,3),2) tblsize
FROM (SELECT data_length dat,index_length ndx
FROM information_schema.tables WHERE
table_schema='mydb' AND table_name='mytable') A;
আমাদের যদি অনুমতি দেওয়া হয় সারণী কাঠামোও দেখতে হবে।
নোম সম্পাদনা করুন
এটি কোয়েরির আউটপুট:
datsize ndxsize tblsize
682.51 47.57 730.08
এটি টেবিল কাঠামো ( SHOW CREATE TABLE
)
`CREATE TABLE `mybigtable` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`uid` int(11) NOT NULL,
`created_at` datetime NOT NULL,
`tid` bigint(20) NOT NULL,
`text` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`ft` tinyint(1) NOT NULL,
`irtsd` bigint(20) NOT NULL,
`irtuid` int(11) NOT NULL,
`rc` int(11) NOT NULL,
`r` tinyint(1) NOT NULL,
`e` text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, `timezone` varchar(5) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `uid_tid` (`uid`,`tid`)) ENGINE=InnoDB AUTO_INCREMENT=2006963844 DEFAULT CHARSET=utf8`
ALTER TABLE ... ENGINE=InnoDB;
(যদি আপনি এটির জন্য ঘর পেয়ে থাকেন)। বেশিরভাগই তাদের খুব দ্রুত এসএসডি নিয়ে সন্তুষ্ট এবং আর উদ্বিগ্ন হবেন না।