MySQL OPTIMIZE TABLE: ඉඩ ප්‍රතිප්‍රාප්තිය සහ කාර්ය සාධනය වැඩි කිරීම (හොඳ පුරුදු + දෝෂ)

目次

1. හැඳින්වීම

MySQL කාර්ය සාධන මන්දගාමීත්වයන් සමඟ ඔබට ගැටළුවක් තිබේද? දත්ත ගබඩාව විශාල වීමත් සමඟ, විමසුම් ක්‍රියාත්මක කිරීම මන්දගාමී විය හැකි අතර ඔබේ යෙදුමේ සමස්ත කාර්ය සාධනයට බලපායි. මෙම තත්ත්වය සලසා ගැනීමට ප්‍රභාවී ක්‍රමයක් OPTIMIZE TABLE විධානයයි.

මෙම ලිපියේ, අපි MySQL OPTIMIZE TABLE විස්තරාත්මකව පැහැදිලි කරමු—මූලික භාවිතයෙන් හොඳම ක්‍රමවලට දක්වා. මෙම අන්තර්ගතය ආරම්භකයන් සිට මධ්‍යම පරිශීලකයන් දක්වා ප්‍රයෝජනවත් වන ලෙස සැලසුම් කර ඇත, සහ ඔබට දත්ත ගබඩාව කාර්යක්ෂමව කළමනාකරණය කිරීමට උපකාරී වේ.

2. OPTIMIZE TABLE යනු කුමක්ද? ආරම්භක-හිතකාමී විස්තරයක්

OPTIMIZE TABLE හි මූලික සංකල්පය

OPTIMIZE TABLE යනු වගුවක් සුදානම් කිරීම සඳහා භාවිතා කරන MySQL විධානයකි. එය සාමාන්‍යයෙන් පහත සඳහන් අරමුණු සඳහා භාවිතා වේ:

  • ගබඩා ඉඩ ප්‍රතිප්‍රාප්තිය : දත්ත මකා දැමීමෙන් පසු ඉතිරිවූ භාවිත නොකළ ඉඩ ප්‍රතිප්‍රාප්තිය කරයි.
  • ඉන්ඩෙක්ස් නැවත ගොඩනැගීම : දත්ත ප්‍රවේශ වේගය වැඩි කිරීමට ඉන්ඩෙක්ස් නැවත සංවිධානය කරයි.
  • සංඛ්‍යාන නවීකරණය : විමසුම් ක්‍රියාත්මක සැලසුම් සුදානම් කිරීම සඳහා භාවිතා වන සංඛ්‍යාන නවීකරණය කරයි.

ප්‍රධාන පදවල් සරල විස්තර

  • ගබඩා එන්ජින් : MySQL වගු කළමනාකරණය කරන ආකාරය (උදාහරණයක්: InnoDB, MyISAM) නිරූපණය කරයි.
  • විභජනය නිරාකරණය (defrag) : ගොනු විභජනය අඩු කර ගබඩා කාර්යක්ෂමතාව වැඩි කරන ක්‍රියාවලියකි.

මූලික භාවිත උදාහරණය

OPTIMIZE TABLE ක්‍රියාත්මක කිරීම සඳහා මූලික SQL විධානය පහත දැක්වේ:

OPTIMIZE TABLE table_name;

උදාහරණයක් ලෙස, users නමින් වගුවක් සුදානම් කිරීමට, මෙසේ ක්‍රියාත්මක කරන්න:

OPTIMIZE TABLE users;

ප්‍රතිඵලය පිළිබඳ සමාලෝචනය

OPTIMIZE TABLE ක්‍රියාත්මක කිරීම වගුවේ ප්‍රමාණය අඩු කර විමසුම් වේගය වැඩි කරයි. දත්ත නිතර යාවත්කාලීන හෝ මකා දැමෙන වගු සඳහා මෙය විශේෂයෙන් ප්‍රයෝජනවත් වේ.

3. OPTIMIZE TABLE ක්‍රියාත්මක කිරීම සඳහා හොඳම ක්‍රම

ක්‍රියාත්මක කිරීමට පෙර සූදානම් කිරීම

OPTIMIZE TABLE ක්‍රියාත්මක කිරීමට පෙර, පහත සූදානම් කිරීමේ පියවරයන් නිර්දේශ කරයි:

  1. ආපසු ගත කිරීම
  • දත්ත අහිමි වීම වැලැක්වීමට, වගුව හෝ සම්පූර්ණ දත්ත ගබඩාව ආපසු ගත කරන්න.
  • මෙන්න සරල ආපසු ගත කිරීමේ උදාහරණයක්: mysqldump -u username -p database_name > backup.sql
  1. ගබඩා එන්ජින් පරීක්ෂා කිරීම
  • OPTIMIZE TABLE සහය දක්වන ගබඩා එන්ජින් භාවිතා කරන බව තහවුරු කරන්න.
  • උදාහරණය: SHOW TABLE STATUS WHERE Name = 'table_name';

ක්‍රියාත්මක කිරීමේදී වැදගත් සටහන්

  • වගු අගුළු
  • ක්‍රියාත්මක කිරීමේදී වගුව අගුළු විය හැකි බැවින්, අනෙකුත් විමසුම් වලට බලපෑම් විය හැක.
  • පීඩනය වැඩි වන වේලාවන් පිටුපස, රාත්‍රියේ පසු හෝ නඩත්තු කාලය තුළ ක්‍රියාත්මක කිරීම සුදුසුය.
  • ක්‍රියාත්මක කාලය
  • වගුව විශාල නම්, සුදානම් කිරීම දිගු කාලයක් ගත විය හැක.
  • එවැනි අවස්ථාවල, කාර්යය වෙන් කිරීම හෝ අංශික සුදානම් කිරීම ගැන සිතන්න.

ක්‍රියාත්මක කිරීමෙන් පසු සත්‍යාපනය

OPTIMIZE TABLE ක්‍රියාත්මක කිරීමෙන් පසු ප්‍රතිඵල පරීක්ෂා කිරීමේ උදාහරණ විධානය:

SHOW TABLE STATUS WHERE Name = 'users';

ප්‍රතිඵල වලින්, දත්ත ප්‍රමාණය සහ ඉන්ඩෙක්ස් ප්‍රමාණයේ වෙනස්කම් තහවුරු කළ හැක.

4. විකල්ප ක්‍රම සහ OPTIMIZE TABLE සමඟ සංසන්දනය

විකල්පයන්ට හැදින්වීම

OPTIMIZE TABLE වෙනුවට ඔබට භාවිතා කළ හැකි විකල්ප කිහිපයක් ඇත, උදාහරණ ලෙස:

  1. ALTER TABLE … ENGINE=InnoDB භාවිතා කර මැනුවල් සුදානම් කිරීම
  2. mysqldump භාවිතා කර අපනයන සහ ආනයන කිරීම
  3. වගු කොටස් කිරීම භාවිතා කිරීම
  4. සංරක්ෂණය සහ වගු නැවත නිර්මාණය කිරීම

ALTER TABLE … ENGINE=InnoDB භාවිතා කර මැනුවල් සුදානම් කිරීම

OPTIMIZE TABLE වෙනුවට, ALTER TABLE මැනුවල් ලෙස ක්‍රියාත්මක කිරීම වඩාත් විස්තරාත්මක පාලනය ලබා දේ.

ක්‍රියාත්මක කිරීමේ ආකාරය

ALTER TABLE table_name ENGINE=InnoDB;

උදාහරණයක් ලෙස, users වගුව සුදානම් කිරීමට:

ALTER TABLE users ENGINE=InnoDB;

ලාභ

  • OPTIMIZE TABLE සමඟ සමාන ප්‍රතිඵලයක් ලබා දේ.
  • සමහර MySQL අනුවාදවල, OPTIMIZE TABLE ට වඩා ආරක්ෂිත විය හැක.

අවාසි

  • වගුව ඉතා විශාල නම්, නතර කාලයක් සිදුවිය හැක.

mysqldump භාවිතා කර අපනයන සහ ආනයන කිරීම

mysqldump භාවිතා කර දත්ත අපනයනය කර, පසු ඒවා ආනයනය කර සම්පූර්ණ දත්ත ගබඩාව නවීකරණය කළ හැක.

ක්‍රියාත්මක කිරීමේ ආකාරය

mysqldump -u username -p database_name > backup.sql
mysql -u username -p database_name < backup.sql
  • සියලුම වගු සඳහා අදාළ වේ.
  • වගු සම්පූර්ණයෙන් නැවත ගොඩනැගීම නිසා, උපරිම කිරීමේ ප්‍රතිඵලය වැඩිමට පත් කළ හැක.

අවාසි

  • ඔබට දත්ත ගබඩාව තාවකාලිකව නවතා ගැනීමට අවශ්‍ය විය හැක.
  • විශාල දත්ත ගබඩාවන් සඳහා එය දිගු කාලයක් ගත විය හැක.

විකල්ප සමඟ සංසන්දන වගුව

MethodProsConsBest Use Case
OPTIMIZE TABLEEasy to runCauses table lockingSmall to medium-sized tables
ALTER TABLE ENGINE=InnoDBSimilar effect to the optimization MySQL performs internallyCan take a long time for large tablesInnoDB on MySQL 5.7+
mysqldump + importCan rebuild the entire databaseRequires downtimeOptimizing large datasets
PartitioningImproves query speedComplex to configureManaging large datasets
Archive and recreateOrganizes data and optimizesRequires additional data managementTables with lots of old data

5. ගැටළු නිරාකරණය: පොදු දෝෂ සහ විසඳුම්

“වගුවට උපරිම කිරීම සහය නොදේ” දෝෂය

දෝෂ පණිවුඩය

Table does not support optimize, doing recreate + analyze instead

කාරණය

  • InnoDB සමඟ, MySQL 5.7 සහ ඊට පසු OPTIMIZE TABLE හි හැසිරීම වෙනස් වී ඇත.
  • MEMORY ගබඩා එන්ජින් සමඟ එය භාවිතා කළ නොහැක.

විසඳුම

  1. වගුවේ ගබඩා එන්ජින් පරීක්ෂා කරන්න
    SHOW TABLE STATUS WHERE Name = 'table_name';
    
  1. ගබඩා එන්ජින් InnoDB නම්
    ALTER TABLE table_name ENGINE=InnoDB;
    

හෝ සංඛ්‍යාලේඛන නැවුම් කරන්න:

ANALYZE TABLE table_name;

“ලොක් රැඳී සිටීමේ කාලය ඉක්මවා ගියේ” දෝෂය

දෝෂ පණිවුඩය

ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

කාරණය

  • OPTIMIZE TABLE ක්‍රියාත්මක කිරීමේදී වගුවක් ලොක් වීමක් සිදු වෙයි, එය කාලය ඉක්මවා යාමට හේතු වේ.

විසඳුම

  1. අඩු-ට්‍රැෆික් වේලාවල ක්‍රියාත්මක කරන්න
  2. කාලය ඉක්මවා යාමගේ අගය වැඩි කරන්න
    SET innodb_lock_wait_timeout = 100;
    

“ඩිස්ක් ඉඩ අවසන්” දෝෂය

දෝෂ පණිවුඩය

ERROR 1030 (HY000): Got error 28 from storage engine

කාරණය

  • OPTIMIZE TABLE ක්‍රියාකාරීත්වයේ තාවකාලික ගොනු සෑදීමට ප්‍රමාණවත් ඩිස්ක් ඉඩ නොමැත.

විසඳුම

  1. ඉතිරි ඩිස්ක් ඉඩ පරීක්ෂා කරන්න
    df -h
    
  1. තාවකාලික නාමාවලිය වෙනස් කරන්න my.cnf සංස්කරණය කරන්න:
    [mysqld]
    tmpdir = /path/to/larger/tmp
    

සාරාංශය

මෙම කොටසේ, අපි පොදු OPTIMIZE TABLE දෝෂ සහ ඒවා විසඳීම පිළිබඳව සාකච්ඡා කළෙමු. දෝෂ සිදුවන විට, ගබඩා එන්ජින් පරීක්ෂා කිරීම, ලොක් ප්‍රශ්න විසඳීම, සහ ප්‍රමාණවත් ඩිස්ක් ඉඩ ඇති බව තහවුරු කිරීම යන කරුණු සලකන්න.

6. නිතර අසන ප්‍රශ්න

OPTIMIZE TABLE ක්‍රියාත්මක කිරීමේදී දත්ත අහිමි වීමේ අවදානමක් තිබේද?

පිළිතුර

සාමාන්‍යයෙන්, OPTIMIZE TABLE ක්‍රියාත්මක කිරීම දත්ත අහිමි වීමට හේතු නොවේ. එ nevertheless, ක්‍රියාවලිය තුළ දෝෂයක් සිදු වූ විට, දත්ත දූෂණයට ලක් විය හැක.
එම නිසා, පෙර පිටපතක් (බැකප්) ගත කිරීම සුපාරිශීලී වේ.

බැකප් ගත කිරීමේ ක්‍රමය

mysqldump -u username -p database_name > backup.sql

OPTIMIZE TABLE කී වාරයක් ක්‍රියාත්මක කළ යුතුද?

පිළිතුර

ඔබ දත්ත මකා දැමීමේ අඩිවලට අනුව වෙනස් වේ, නමුත් සාමාන්‍යයෙන්, සතියකට එක් වරක් සිට මාසිකව එක් වරක් ක්‍රියාත්මක කිරීම සුපාරිශීලී වේ.
ඊළඟ අවස්ථා වලදී එය තවත් ප්‍රයෝජනවත් විය හැක:

  • නිතර මකා දැමීමේ වගු
  • ඉන්ඩෙක්ස් කඩකාරී වී ඇත
  • විමසුම් ක්‍රියාත්මක වේගය අඩු වී ඇත

OPTIMIZE TABLE ස්වයංක්‍රීය කළ හැකිද?

පිළිතුර

ඔබට MySQL Event Scheduler හෝ cron job භාවිතා කර එය ස්වයංක්‍රීය කළ හැක.

MySQL Event Scheduler භාවිතා කිරීම

CREATE EVENT optimize_tables
ON SCHEDULE EVERY 7 DAY
DO
OPTIMIZE TABLE table_name;

cron job භාවිතා කිරීම

crontab -e

පහත පේළිය එක් කරන්න (සෑම ඉරිදා 3:00 AM ට ක්‍රියා කරයි):

0 3 * * 0 mysql -u username -p'yourpassword' -e "OPTIMIZE TABLE database_name.table_name;"

OPTIMIZE TABLE ප්‍රයෝජනවත් නොවන්නේ නම් මොකද කළ යුතුද?

පිළිතුර

  1. ගබඩා එන්ජින් පරීක්ෂා කරන්න
    SHOW TABLE STATUS WHERE Name = 'table_name';
    
  1. ක්‍රියාත්මක සැලැස්ම පරීක්ෂා කරන්න
    EXPLAIN SELECT * FROM table_name WHERE column_name = 'value';
    
  1. සංඛ්‍යාලේඛන නැවුම් කරන්න
    ANALYZE TABLE table_name;
    
  1. වගුව ඉතා විශාල නම්
  • mysqldump භාවිතා කර බැකප් ගෙන නැවත ආයාත කරන්න
  • කොටස් කිරීම (partitioning) ගැන සිතන්න

මෙම නිතර අසන ප්‍රශ්න (FAQ) OPTIMIZE TABLE සම්බන්ධ පොදු ප්‍රශ්න සහ ප්‍රායෝගික විසඳුම් ආවරණය කරයි.

7. සාරාංශය

මෙම ලිපියේ, අපි MySQL OPTIMIZE TABLE විස්තරාත්මකව පැහැදිලි කළෙමු.
වගු උපරිම කිරීම දත්ත ගබඩා කාර්ය සාධනය වැඩිදියුණු කිරීම සඳහා අත්‍යවශ්‍යය, නමුත් වැරදි අවස්ථාවල එය භාවිතා කළහොත්, ප්‍රතිලාභ සීමාසහිත විය හැක.

OPTIMIZE TABLE හි ප්‍රධාන කරුණු

ItemDetails
PurposeImprove database performance and optimize storage
What it doesDefrag data files, rebuild indexes, refresh statistics
Recommended frequencyWeekly to monthly (more often for tables with frequent deletions)
Storage enginesMyISAM: strong benefits, InnoDB: benefits may be limited

OPTIMIZE TABLE ක්‍රියාත්මක වන විට

OPTIMIZE TABLE ක්‍රියාත්මක කිරීම පහත සඳහන් අවස්ථා වලදී නිර්දේශ කරයි:

  • නිතර දත්ත මකාදැමීම
  • ඔබට තැටි ඉඩ සුරකින්න අවශ්‍යයි
  • SELECT විමසුම් මන්දගාමී වෙමින් පවතී
  • ඉන්ඩෙක්ස් කැඩීම සිදුවේ

ක්‍රියාත්මක කිරීමට පෙර පරීක්ෂා ලැයිස්තුව

ආපසු ගත කිරීමක් (බැකප්) ගන්න

mysqldump -u username -p database_name > backup.sql

ගබඩා එන්ජින් පරීක්ෂා කරන්න

SHOW TABLE STATUS WHERE Name = 'table_name';

අඩු-ට්‍රැෆික් වේලාවලදී ක්‍රියාත්මක කරන්න
සංඛ්‍යාන නවීකරණය කරන්න

ANALYZE TABLE table_name;

විකල්ප සමඟ සංසන්දනය

තත්ත්වය අනුව, OPTIMIZE TABLE හැර වෙනත් ක්‍රමයන් වඩා සුදුසු විය හැක.

MethodProsConsBest Use Case
OPTIMIZE TABLEEasy to runCauses table lockingSmall to medium-sized tables
ALTER TABLE ENGINE=InnoDBSimilar optimization effectTakes longer on large tablesInnoDB on MySQL 5.7+
mysqldump + restoreComplete optimization by rebuilding tablesRequires downtimeOptimizing large datasets

අවසාන පරීක්ෂා ලැයිස්තුව

ඔබ නිවැරදි ගබඩා එන්ජින් භාවිතා කරමින් සිටීද?
ඔබ ආපසු ගත කිරීම (බැකප්) ගත්තාද?
ඔබ අඩු-ට්‍රැෆික් වේලාවලදී එය ක්‍රියාත්මක කරනවාද?
විකල්ප ක්‍රමයක් අවශ්‍යදැයි ඔබ සලකා බැලුවාද?

නිගමනය

OPTIMIZE TABLE නිසි ලෙස භාවිතා කර ඔබේ MySQL කාර්ය සාධනය සෞඛ්‍යවත් තබා ගන්න!
මෙම ලිපිය ඔබට දත්ත ගබඩා කළමනාකරණය සඳහා උපකාරී වේ යැයි අපි බලාපොරොත්තු වෙමු.