মাইএসকিএলে সারণী অনুকূলিতকরণ এবং বিশ্লেষণ সারণীর মধ্যে পার্থক্য কী


29

মাইএসকিএলে টেবিলটি অপ্টিমাইজ এবং সারণী বিশ্লেষণের মধ্যে পার্থক্য কী? আমি অনলাইন ডকগুলি পড়েছি, তবে পার্থক্য কী তা নিশ্চিত।

উত্তর:


28

@ মিচওয়েটের উত্তরে সম্প্রসারিত করতে (সরাসরি সরাসরি উত্তর দেওয়ার জন্য +1):

আনলাইজ টেবিল কী বিতরণ পরীক্ষা করে এবং সেগুলি INFORMATION_SCHEMA.STATISTICS এ সঞ্চয় করে।

নিখুত টেবিল সঞ্চালিত টেবিল বিশ্লেষণ কিছু টেবিল কম্প্রেশন করছেন পরে। OPTIMIZE TABLE mydb.mytable;টেবিলটি মাইআইএসএএম এরসমতুল্যহ'ল:

ALTER TABLE mydb.mytable ENGINE=MyISAM;
ANALYZE TABLE mydb.mytable;

MyISAM

ডেটাডির মাইআইএসএএম টেবিলের জন্য mydb.mytable /var/lib/mysql, আপনার কাছে নিম্নলিখিত ফাইলগুলি রয়েছে:

  • /var/lib/mysql/mydb/mytable.frm
  • /var/lib/mysql/mydb/mytable.MYD (তথ্য)
  • /var/lib/mysql/mydb/mytable.MYI (ইনডেক্স)

OPTIMIZE TABLE mydb.mytableটেবিলের জন্য .MYDএবং .MYIফাইলগুলি সঙ্কুচিত করবে ।

এটি ইনোডিবি-র ক্ষেত্রে এক নয়। এখানে এটি কীভাবে আলাদা:

ইনোডিবি ( ইনোডাব_ফায়াল_পার_সামগ্রী সক্ষম)

প্রতিটি টেবিলের ডেটা এবং সূচীগুলি একটি বাহ্যিক টেবিল স্পেস ফাইলে সংরক্ষণ করা হয়। জন্য datadirহয় /var/lib/mysql এবং টেবিল mydb.mytable, এটা নিম্নরূপে সংরক্ষণ করা হবে:

  • /var/lib/mysql/mydb/mytable.frm
  • /var/lib/mysql/mydb/mytable.ibd

যখন OPTIMIZE TABLE mydb.mytableমৃত্যুদন্ড কার্যকর করা হয়, mytable.ibdসঙ্কুচিত হয়।

ইনোডিবি ( ইনোডাব_ফায়াল_পার_সামগ্রী অক্ষম)

কেবলই /var/lib/mysql/mydb/mytable.frmথাকত। টেবিলের জন্য সমস্ত ডেটা এবং সূচী পৃষ্ঠাগুলি mydb.mytableসিস্টেম টেবিল স্পেস ফাইলে সংরক্ষণ করা হয় /var/lib/mysql/ibdata1

কখন OPTIMIZE TABLE mydb.mytable মৃত্যুদন্ড কার্যকর করা হয়, তখন ডেটা এবং সূচী পৃষ্ঠাগুলি স্বতঃস্ফূর্তভাবে ইবদাটা 1 তে লেখা হয়। দুর্ভাগ্যক্রমে, এটি আইবডাটা 1 লাফিয়ে ও সীমানায় বেড়ে যায়।

পারকোনা সিটিও ভাদিম তাকাচেনকো থেকে চিত্রগত উপস্থাপনা দেখুন

InnoDB নদীর গভীরতানির্ণয়

আপডেট 2013-02-26 22:33 EST

আপনি মন্তব্য ছিল

আমি মনে করি, ইনোডাবের জন্য টেবিলটি অনুকূলিতকরণ সমর্থন করে না। আমি একটি বার্তা পেয়েছি, সূচি আবার তৈরি করা হবে। এটা কিভাবে কাজ করে?

আমি এটি চেষ্টা করেছিলাম

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.5.29 MySQL Community Server (GPL)

Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use test
Database changed
mysql> create table dat (a int, primary key (a));
Query OK, 0 rows affected (0.08 sec)

mysql> insert into dat values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10);
Query OK, 10 rows affected (0.04 sec)
Records: 10  Duplicates: 0  Warnings: 0

mysql> analyze table dat;
+----------+---------+----------+----------+
| Table    | Op      | Msg_type | Msg_text |
+----------+---------+----------+----------+
| test.dat | analyze | status   | OK       |
+----------+---------+----------+----------+
1 row in set (0.06 sec)

mysql> optimize table dat;
+----------+----------+----------+-------------------------------------------------------------------+
| Table    | Op       | Msg_type | Msg_text                                                          |
+----------+----------+----------+-------------------------------------------------------------------+
| test.dat | optimize | note     | Table does not support optimize, doing recreate + analyze instead |
| test.dat | optimize | status   | OK                                                                |
+----------+----------+----------+-------------------------------------------------------------------+
2 rows in set (0.14 sec)

mysql>

আপনি সঠিক. আপনি OPTIMIZE TABLEএকক অপারেশন হিসাবে চালাতে পারবেন না । পরিবর্তে ইনোডিবি যা করে তা হ'ল:

ALTER TABLE mydb.mytable ENGINE=InnoDB;
ANALYZE TABLE mydb.mytable;

আপনি নিজেই এই পদক্ষেপগুলি চালাতে পারেন।

যাইহোক, সমস্ত সততার সাথে, আপনাকে ANALYZE TABLEকোনও ইনোডিবি টেবিলের বিরুদ্ধে চালানো উচিত নয় কারণ প্রতিবার কোনও ক্যুরিয়র কার্যকর করা হলে, ইনোডিবি স্টোরেজ ইঞ্জিন সূচীর পৃষ্ঠাগুলিতে পাসের উপর ভিত্তি করে টেবিল কার্ডিনালিটির উপর একটি অনুমান করে। যদি একটি উচ্চ নম্বর আছে INSERTs, UPDATEsএবং DELETEs, তাহলে আপনি প্রয়োজন হবে ANALYZE TABLE। যখন একটি উচ্চ সংখ্যা আছে DELETEs, তখনALTER TABLE mydb.mytable ENGINE=InnoDB; টেবিলটি সঙ্কুচিত করা প্রয়োজন।

আমি আসলে ANALYZE TABLEনির্দিষ্ট কিছু ক্ষেত্রে ইনোডিবি-এর নিরর্থকতা সম্পর্কে পোস্ট লিখেছিলাম :


আমি মনে করি, ইনোডাবের জন্য টেবিলটি অনুকূলিতকরণ সমর্থন করে না। আমি একটি বার্তা পেয়েছি, সূচি আবার তৈরি করা হবে। এটা কিভাবে কাজ করে?
বুলিয়ান

@ রোল্যান্ডোমাইএসকিউএলডিবিএ আমি নিশ্চিত নই যে আপনি যখন বলছেন, "আপনি চালাতে পারবেন না OPTIMIZE TABLE"। আপনি যখন OPTIMIZE TABLEইনোডিবি টেবিলের জন্য থাকেন, তখন মাইএসকিউএল আপনার জন্য ক্রিয়াকলাপ সম্পাদন করে ALTER TABLE ... ENGINE=InnoDBএবং ANALYZE TABLE ...যখন এতে বলা হয় "এর পরিবর্তে পুনরায় তৈরি করুন + টেবিল বিশ্লেষণ করুন" says
মাইকেল - sqlbot

@ মাইকেল-স্ক্লবট আমার উত্তর হিসাবে দেখানো হয়েছে, আমি OPTIMIZE TABLE dat;মাইএসকিউএল 5.5.29 এ দৌড়েছি এবং এটি অবিলম্বে অভিযোগ করেছে Table does not support optimize, doing recreate + analyze instead,। এজন্যই আমি সুপারিশ করছি ALTER TABLE dat ENGINE=InnoDB; ANALYZE TABLE dat;
রোল্যান্ডোমাইএসকিউএলডিবিএ

ঠিক আছে, তবে আমি দৃ would়ভাবে বলব যে এটি আপনার জন্য অবিলম্বে ঘটেছে কারণ আপনি যে টেবিলটির বিরুদ্ধে পরীক্ষা করেছেন তা খুব ছোট ছিল। আপনি যখন OPTIMIZE TABLEইনোডিবিতে থাকবেন তখন সার্ভারটি আসলে প্রতিক্রিয়া ফিরিয়ে দেওয়ার আগে বাস্তবে সম্পাদন করে ALTER TABLE ... ENGINE=InnoDBএবং ANALYZE TABLEপর্দার আড়ালে করে ... যাতে আপনি প্রকৃতপক্ষে OPTIMIZE TABLEইনোডিবি তে চালাতে পারেন , এবং অভিযুক্ত প্রভাব অর্জন করতে পারেন ।
মাইকেল - স্কেলবট

15

আপনার মাইএসকিউএল এবং স্টোরেজ ইঞ্জিনের সংস্করণে নির্ভর করে তবে সাধারণভাবে:

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

বিশ্লেষণ সারণী কেবল সারণী বিশ্লেষণ করে কী বিতরণ সংরক্ষণ করে।

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