কম্পিউটার

MariaDB/MySQL ডেটাবেস কম্প্রেস, ডিফ্র্যাগ এবং অপ্টিমাইজ করুন

এই নিবন্ধে আমরা MySQL/MariaDB-তে টেবিল/ডাটাবেস কম্প্রেশন এবং ডিফ্র্যাগমেন্টেশনের কিছু পদ্ধতি অন্বেষণ করব, যা আপনাকে ডাটাবেস অবস্থিত একটি ডিস্কে স্থান বাঁচাতে সাহায্য করবে।

বৃহৎ প্রকল্পের ডাটাবেস সময়ের সাথে সাথে প্রচুর পরিমাণে বৃদ্ধি পায় এবং একটি প্রশ্ন সর্বদা উত্থাপিত হয় এর সাথে কী করা যায়। সমস্যা সমাধানের বিভিন্ন উপায় আছে। আপনি পুরানো তথ্য মুছে, একটি ডাটাবেসকে ছোট করে ভাগ করে, সার্ভারে ডিস্কের আকার বাড়িয়ে বা টেবিল সংকুচিত/সঙ্কুচিত করে ডাটাবেসে ডেটার পরিমাণ কমাতে পারেন৷

ডাটাবেস কার্যকারিতার আরেকটি গুরুত্বপূর্ণ দিক হল তাদের কর্মক্ষমতা উন্নত করার জন্য সময়ে সময়ে টেবিল এবং ডাটাবেসগুলিকে ডিফ্র্যাগমেন্ট করার প্রয়োজন৷

InnoDB টেবিল কম্প্রেশন এবং অপ্টিমাইজেশান

ibdata1 এবং ib_log ফাইলগুলি

InnoDB সহ বেশিরভাগ প্রকল্প টেবিলে একটি বড় ibdata1 এর সমস্যা আছে এবং ib_log নথি পত্র. বেশিরভাগ ক্ষেত্রে, এটি একটি ভুল MySQL/MariaDB কনফিগারেশন বা একটি DB আর্কিটেকচারের সাথে সম্পর্কিত। InnoDB টেবিল থেকে সমস্ত তথ্য ibdata1 ফাইলে সংরক্ষিত থাকে, যার স্থান নিজে থেকে পুনরুদ্ধার করা হয় না। আমি আলাদা ibd* এ টেবিলের ডেটা সংরক্ষণ করতে পছন্দ করি নথি পত্র. এটি করতে, my.cnf-এ নিম্নলিখিত লাইনটি যোগ করুন :

innodb_file_per_table

অথবা

innodb_file_per_table=1

যদি আপনার সার্ভার কনফিগার করা থাকে এবং আপনার কাছে InnoDB টেবিল সহ কিছু উৎপাদনশীল ডেটাবেস থাকে, তাহলে নিম্নলিখিতগুলি করুন:

  1. আপনার সার্ভারে সমস্ত ডাটাবেস ব্যাক আপ করুন (mysql এবং performance_schema বাদে)। আপনি এই কমান্ডটি ব্যবহার করে একটি ডাটাবেস ডাম্প পেতে পারেন: # mysqldump -u [username] –p[password] [database_name]> [dump_file.sql]
  2. ডাটাবেস ব্যাকআপ তৈরি করার পর, আপনার mysql/mariadb সার্ভার বন্ধ করুন;
  3. my.cfg-এ সেটিংস পরিবর্তন করুন;
  4. মুছুন ibdata1 এবং ib_log ফাইল;
  5. mysql/mariadb ডেমন শুরু করুন;
  6. ব্যাকআপ থেকে সমস্ত ডেটাবেস পুনরুদ্ধার করুন:# mysql -u [username] –p[password] [database_name] <[dump_file.sql]

এটি করার পরে, সমস্ত InnoDB টেবিল আলাদা ফাইলে সংরক্ষণ করা হবে এবং ibdata1 তাত্ত্বিকভাবে বৃদ্ধি করা বন্ধ করবে।

InnoDB টেবিল কম্প্রেশন

আপনি পাঠ্য/BLOB ডেটা দিয়ে টেবিলগুলিকে সংকুচিত করতে পারেন এবং প্রচুর ডিস্কের স্থান সংরক্ষণ করতে পারেন৷

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

# mysql -u root -p

আপনার mysql কনসোলে আপনার প্রয়োজনীয় ডাটাবেস নির্বাচন করুন:

# ব্যবহার innodb_test;

MariaDB/MySQL ডেটাবেস কম্প্রেস, ডিফ্র্যাগ এবং অপ্টিমাইজ করুন

টেবিলের তালিকা এবং তাদের আকার প্রদর্শন করতে, নিম্নলিখিত প্রশ্নটি ব্যবহার করুন:

টেবিল_নাম নির্বাচন করুন "টেবিল",
গোল(((ডেটা_লেংথ + ইনডেক্স_লেংথ) / 1024 / 1024), 2) AS "সাইজ ইন (MB)"
তথ্য_স্কিম থেকে। TABLES
WHERE table_schema ="innodb_test"
ORDER BY (data_length + index_length) DESC;

যেখানে innodb_test হল আপনার ডাটাবেসের নাম।

MariaDB/MySQL ডেটাবেস কম্প্রেস, ডিফ্র্যাগ এবং অপ্টিমাইজ করুন

কিছু টেবিল সংকুচিত হতে পারে. চলুন b_crm_event_relations নেওয়া যাক একটি উদাহরণ হিসাবে টেবিল। এই প্রশ্নটি চালান:

mysql> সারণী পরিবর্তন করুন b_crm_event_relations ROW_FORMAT=কম্প্রেসড;

এটি চালানোর পরে, আপনি দেখতে পাচ্ছেন যে কম্প্রেশনের কারণে টেবিলের আকার 26 MB থেকে 11 MB হয়েছে৷

MariaDB/MySQL ডেটাবেস কম্প্রেস, ডিফ্র্যাগ এবং অপ্টিমাইজ করুন

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

MySQL/MariDB-তে MyISAM টেবিল কম্প্রেশন

মাইসাম কম্প্রেস করতে টেবিল, mysql কনসোলের পরিবর্তে সার্ভার কনসোলে একটি বিশেষ ক্যোয়ারী ব্যবহার করুন। একটি টেবিল সংকুচিত করতে, নিম্নলিখিতটি চালান:

# myisampack -b /var/lib/mysql/test/modx_session

যেখানে /var/lib/mysql/test/modx_session হল আপনার টেবিলের পথ। দুর্ভাগ্যবশত, আমার কাছে একটি বড় টেবিল ছিল না এবং ছোটগুলিকে সংকুচিত করতে হয়েছিল, কিন্তু ফলাফলটি এখনও দেখা যেতে পারে (ফাইলটি 25 MB থেকে 18 MB পর্যন্ত সংকুচিত হয়েছিল):

# du -sh modx_session.MYD

25M modx_session.MYD

# myisampack -b /var/lib/mysql/test/modx_session

/var/lib/mysql/test/modx_session.MYD:(4933 রেকর্ড)- গণনা করা পরিসংখ্যান- ফাইল কম্প্রেস করা29.84%সংকুচিত টেবিলে myisamchk -rq চালাতে মনে রাখবেন

# du -sh modx_session.MYD

18M modx_session.MYD

আমি -b ব্যবহার করেছি কমান্ডে কী। যখন আপনি এটি যোগ করেন, তখন কম্প্রেশনের আগে একটি টেবিল ব্যাক আপ করা হয় এবং ওল্ড লেবেল দিয়ে চিহ্নিত করা হয়:

# ls -la modx_session.OLD

-rw-r------ 1 mysql mysql 25550000 ডিসেম্বর 17 15:20 modx_session.OLD

# du -sh modx_session.OLD

25M modx_session.OLD

MariaDB/MySQL ডেটাবেস কম্প্রেস, ডিফ্র্যাগ এবং অপ্টিমাইজ করুন

MySQL এবং MariaDB-তে টেবিল এবং ডেটাবেস অপ্টিমাইজ করা

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

MySQL কনসোল খুলুন, একটি ডাটাবেস নির্বাচন করুন এবং এই প্রশ্নটি চালান:

তথ্য_schema.tables থেকে data_free_mb হিসাবে table_name, round(data_length/1024/1024) data_length_mb, রাউন্ড(data_free/1024/1024) নির্বাচন করুন যেখানে রাউন্ড(data_free/1024/1024)> 50mb_>ডাটা ক্রম অনুসারে;

এইভাবে, আপনি কমপক্ষে 50 এমবি অব্যবহৃত স্থান সহ সমস্ত টেবিল প্রদর্শন করবেন:

<প্রে>+----------------------------------+------------ ------------------+| TABLE_NAME | ডেটা_দৈর্ঘ্য_এমবি | data_free_mb |+--------------------------------------------+--------------- ------------------+| b_disk_deleted_log_v2 | 402 | 64 || b_crm_timeline_bind | 827 | 150 || b_disk_object_path | 980 | 72 |

data_length_mb — একটি টেবিলের মোট আকার

data_free_mb — একটি টেবিলে অব্যবহৃত স্থান

এই টেবিল আমরা ডিফ্র্যাগমেন্ট করতে পারেন. তারা ডিস্কে কতটা স্থান দখল করে তা পরীক্ষা করুন:

# ls -lh /var/lib/mysql/innodb_test/ | grep b__

-rw-r----- 1 mysql mysql 402M অক্টোবর 17 12:12 b_disk_deleted_log_v2.MYD-rw-r----- 1 mysql mysql 828M অক্টোবর 17 13:23 b_crm_Mw-Dr.-bin ---- 1 mysql mysql 981M অক্টোবর 17 11:54 b_disk_object_path.MYD

এই টেবিলগুলি অপ্টিমাইজ করতে, mysql কনসোলে নিম্নলিখিত কমান্ডটি চালান:

# অপ্টিমাইজ টেবিল b_disk_deleted_log_v2, b_disk_object_path, b_crm_timeline_bind;

MariaDB/MySQL ডেটাবেস কম্প্রেস, ডিফ্র্যাগ এবং অপ্টিমাইজ করুন

সফল ডিফ্র্যাগমেন্টেশনের পরে, আপনি এইরকম একটি আউটপুট দেখতে পাবেন:

<প্রে>+----------------------------------+------------ ------------------+| TABLE_NAME | ডেটা_দৈর্ঘ্য_এমবি | data_free_mb |+--------------------------------------------+--------------- ------------------+| b_disk_deleted_log_v2 | 74 | 0 || b_crm_timeline_bind | 115 | 0 || b_disk_object_path | 201 | 0 |

আপনি দেখতে পাচ্ছেন, data_free_mb এখন 0 এর সমান এবং টেবিলের আকার উল্লেখযোগ্যভাবে হ্রাস পেয়েছে (3 – 4 বার)।

আপনি mysqlcheck ব্যবহার করে ডিফ্র্যাগমেন্টেশন চালাতে পারেন আপনার সার্ভার কনসোলে:

# mysqlcheck -o innodb_test b_workflow_file -u root -p innodb_test.b_workflow_file

যেখানে innodb_test আপনার ডাটাবেস
এবং b_workflow_file টেবিলের নাম
MariaDB/MySQL ডেটাবেস কম্প্রেস, ডিফ্র্যাগ এবং অপ্টিমাইজ করুন

একটি ডাটাবেসের সমস্ত টেবিল অপ্টিমাইজ করতে, আপনার সার্ভার কনসোলে এই কমান্ডটি চালান:
# mysqlcheck -o innodb_test -u root -p

যেখানে innodb_test একটি ডাটাবেসের নাম

অথবা সার্ভারে সমস্ত ডাটাবেসের অপ্টিমাইজেশন চালান:

# mysqlcheck -o --all-databases -u root -p

আপনি যদি অপ্টিমাইজেশনের আগে এবং পরে ডাটাবেসের আকার পরীক্ষা করেন, আপনি দেখতে পাবেন যে মোট আকার কমে গেছে:

# du -sh

2.5G

# mysqlcheck -o innodb_test -u root -p

innodb_test.b_admin_notifynote :টেবিল অপ্টিমাইজ সমর্থন করে না, রিক্রিয়েট + অ্যানালাইজ এর পরিবর্তে স্ট্যাটাস :OKinnodb_test.b_admin_notify_langnote :টেবিল অপ্টিমাইজ সমর্থন করে না, রিক্রিয়েট + অ্যানালাইজ এর পরিবর্তে স্ট্যাটাস সমর্থন করে না :ঠিক আছে

# du -sh

1.7G

এইভাবে, আপনার সার্ভারে স্থান বাঁচাতে, আপনি সময়ে সময়ে আপনার MySQL/MariDB টেবিল এবং ডাটাবেস অপ্টিমাইজ এবং সংকুচিত করতে পারেন। কোন অপ্টিমাইজেশন কাজ করার আগে একটি ডাটাবেস ব্যাক আপ করতে মনে রাখবেন।


  1. মারিয়াডিবি:ইনস্টলেশন এবং পারফরম্যান্স অপ্টিমাইজেশান

  2. ডাটাবেসে টেবিলের সংখ্যা প্রদর্শন করার জন্য মাইএসকিউএল কোয়েরি কী?

  3. পাইথন ব্যবহার করে মাইএসকিউএল-এ ডাটাবেস এবং সার্ভারে উপস্থিত সমস্ত টেবিলগুলি কীভাবে দেখাবেন?

  4. কীভাবে ওয়ার্ডপ্রেস ডাটাবেস মেরামত করবেন বা ডাটাবেস টেবিল অপ্টিমাইজ করবেন?