মাইএসকিএলডাম্পের অক্ষম কীগুলি আমদানিতে কোনও প্রভাব ফেলেনি


10

ইনো-টেবিলগুলি (আশ্চর্য!) সহ আমদানির গতি সম্পর্কে আমার আগের প্রশ্নের অনুসরণ রয়েছে ।

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

উপরের প্রশ্ন জিজ্ঞাসা করার পরে আমার পদ্ধতির নাম ছিল KEY ...ডাম্প, আমদানি এবং পুনরায় যুক্ত কীগুলি থেকে বিবৃতি মুছে ফেলা ।

তবে আমি প্রায়শই নিজেকে স্থানীয়ভাবে আমদানি করার জন্য একটি বর্তমান ডাম্প সম্পাদনা করতে দেখি এবং আমি এই মজার "মন্তব্য" জুড়ে disable/enable keysগিয়েছি (দ্য লাইনগুলি)

--
-- Dumping data for table `monster`
--

LOCK TABLES `monster` WRITE;
/*!40000 ALTER TABLE `monster` DISABLE KEYS */;
INSERT  INSERT  INSERT
/*!40000 ALTER TABLE `monster` ENABLE KEYS */;
UNLOCK TABLES;

তবে বাস্তবে এই "মন্তব্যগুলি" শর্তসাপেক্ষে MySQL- বিবৃতি

এটি আমার জন্য সংবাদ ছিল তবে ঠিক আছে, আউটপুট ফর্মটি দেওয়া mysql --versionআমার কাছে সবকিছুই দুর্দান্ত দেখাচ্ছে: mysql Ver 14.14 Distrib 5.5.38, for debian-linux-gnu (x86_64) using readline 6.3

আমি কী ধরে নিই
টেবিলটি লক করা আছে (জরিমানা, এটি কেবলমাত্র দেব ম্যাশেইনে আমার)। তারপরে টেবিল স্কিমাতে সংজ্ঞায়িত কীগুলি অক্ষম করা হবে, ডেটা আমদানি করা হবে, কীগুলি সক্ষম করা হবে।
সুতরাং "ডেটা সন্নিবেশ" -পর্বের সময় কীগুলিতে কোনও সময় নষ্ট করা উচিত নয় বরং সমস্ত ডেটা isোকানোর পরে পরীক্ষা করা উচিত।

আমি ভাবছি এটি একই আচরণ হিসাবে যদি আমি KEY 'foo' (foo)'ডাম্প থেকে সমস্ত লাইন মুছে ফেলি, ডাম্প আমদানি করি এবং ADD KEY 'foo' ...পরে স্ক্রিপ্ট চালাই ।

আমি যা পর্যবেক্ষণ করি তা কীভাবে
নিজে থেকে মুছে ফেলা, আমদানি করা এবং পুনরায় যুক্ত কীগুলি শর্তযুক্ত DISABLE KEYSবিবৃতিগুলির উপর নির্ভর করে চালানো দ্রুততর হয় আমারmysqldump

ডাম্প + মাইএসকিএল আমদানি + ম্যানুয়াল সম্পাদনা + যোগ কীগুলি = 15 + 8 + 8 ≈ 30 মিনিট
সমতল মাইএসকিএল আমদানি: ছেড়ে দেওয়া হয়েছে, (আমি কেবল 8 ঘন্টা / দিন> এর জন্য বেতন পাচ্ছি) :)

আমি সাহায্য করতে পারি না কিন্তু এই ভেবে যে আমি এখানে খুব মৌলিক কিছু অনুভব করছি (বা ডাটাবেস আমাকে ট্রোল করছে)।


2
স্বল্প মেয়াদ: mysqldump --innodb-optimize-keysপারকোনা থেকে ব্যবহার করুন পেরকোনা / ডক / স্পেরকোনা- সার্ভার / .5.৫ / পরিচালনা ব্যবস্থা / Long দীর্ঘমেয়াদী: মাইএসকিএলডাম্প ব্যবহার বন্ধ করুন এবং মাইডাম্পার বা xtrabackup ব্যবহার করুন।
জিনাস

উত্তর:


12

আপনি InnoDB এর উপর DISABLE KEYS;এবং তার উপর নির্ভর করতে পারবেন না ENABLE KEYS;কারণ এটি InnoDB স্টোরেজ ইঞ্জিনে প্রয়োগ করা হয়নি। চলমান ALTER TABLE ... DISABLE KEYS;এবং ALTER TABLE ... ENABLE KEYS;মাইআইএসএএম এর জন্য ডিজাইন করা হয়েছিল। যেমন এটি মাইএসকিউএল ডকুমেন্টেশনের জন্যALTER TABLE বলেছেন :

যদি আপনি কোনও মাইস্যাম টেবিলের মধ্যে অল্টার টেবিল ব্যবহার করেন তবে সমস্ত ননউনিক ইন্ডেক্স পৃথক ব্যাচে তৈরি করা হবে (মেরামত টেবিল হিসাবে)। আপনার যখন অনেকগুলি সূচী থাকে তখন এটি অ্যালটার টেবিলে আরও দ্রুত হওয়া উচিত।

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

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

এর সাথে প্রসঙ্গে ইনোডিবি-র কোনও উল্লেখ কখনও করা হয় না ALTER TABLE ... DISABLE/ENABLE KEYS;

এমনকি আপনি ALTER TABLE ... DISABLE KEYS;কোনও ইনোডিবি টেবিলের বিরুদ্ধে চালালেও এটি একটি সতর্কতা উত্পন্ন করে:

mysql> show create table mytimes\G
*************************** 1. row ***************************
       Table: mytimes
Create Table: CREATE TABLE `mytimes` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `totalTime` int(11) NOT NULL,
  `totalTimeDesc` varchar(128) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

mysql> alter table mytimes disable keys;
Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> show warnings;
+-------+------+-------------------------------------------------------------+
| Level | Code | Message                                                     |
+-------+------+-------------------------------------------------------------+
| Note  | 1031 | Table storage engine for 'mytimes' doesn't have this option |
+-------+------+-------------------------------------------------------------+
1 row in set (0.00 sec)

mysql>

এজন্য কোনও প্রভাব নেই। দয়া করে মনে রাখবেন যে @ জিনাস বুলেটপয়েন্ট 7 এ তার উত্তরে একই জিনিসটির কথা উল্লেখ করেছিলেন

এও মনে রাখবেন যে মাইআইএসএএম দুটি পৃথক ফাইলে (.MYD ডেটার জন্য, .MYI ইনডেক্সের জন্য) ডাটা এবং ইনডেক্স রাখে, সুতরাং সূচী অক্ষম করা এবং সক্ষম করা তুচ্ছ হবে। ইনোডিবি একই কানাডা পৃষ্ঠাগুলিতে (ক্লাস্টারড ইনডেক্সের মাধ্যমে) প্রাথমিক কী এবং সারি তথ্য রাখে। মাধ্যমিক সূচকগুলি প্রতিটি গৌণ সূচক পাতার প্রবেশের জন্য সংযুক্তি হিসাবে প্রাথমিক কী বহন করবে । যেহেতু ডেটা এবং ইনডেক্স ক্লাস্টার সূচক মাধ্যমে পরস্পরের ওপর নির্ভরশীল, কোন এক হয়েছে, এখনো পর্যন্ত বাস্তবায়ন করার চেষ্টা DISABLE KEYSএবং ENABLE KEYSInnoDB হবে।


1
"আমি আপনাকে বলেছিলাম" :-)
জিনাস

@ জিনাস এইচএ এইচএ :-)। উত্তর হিসাবে আপনার InnoDB ( dba.stackexchange.com/questions/76565/… ) এর জন্য আপনার মাইএসকিल्डમ્પ মন্তব্যটি পোস্ট করা উচিত ।
RolandoMySQLDBA

@ ইউশি আমি আপনার মূল প্রশ্নের উপর ভিত্তি করে একটি নিবন্ধ লিখছি, সাথে থাকুন।
জিনাস

@ ইউসি যেমন প্রতিশ্রুতি দিয়েছিলেন: dbahire.com/…
জিনাস

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