- 1 1. Introduction
- 2 2. MySQL ලොක් කිරීමේ යන්ත්රණ මූලික කරුණු
- 3 3. වගු ලොක් පිළිබඳ සමාලෝචනය සහ වර්ග
- 4 4. වගු ලොක් භාවිතා කරන ආකාරය
- 5 5. Table Lock Considerations and Best Practices
- 6 6. ටේබල් ලොක් FAQ
- 6.1 Q1. ටේබල් ලොක්වල් සහ පේළි ලොක්වල් අතර වෙනස කුමක්ද?
- 6.2 Q2. ටේබල් ලොක් භාවිතා කිරීමෙන් කාර්ය සාධනයට බලපානවාද?
- 6.3 Q3. වත්මන් ලොක් තත්ත්වය පරීක්ෂා කරන්නේ කෙසේද?
- 6.4 Q4. ඩෙඩ්ලොක් එකක් සිදු වුවහොත් මොකද කළ යුත්තේ?
- 6.5 Q5. ටේබල් ලොක් භාවිතා කිරීමේ හොඳම පුරුදු මොනවාද?
- 6.6 Q6. ටේබල් ලොක් කවදා භාවිතා කළ යුත්තේ?
- 6.7 Q7. ලොක් එකක් නිදහස් කිරීම අමතක වුවහොත් මොකද වෙන්නේ?
- 7 7. නිගමනය
1. Introduction
MySQL හි ලොක්ස් (Locks) හි වැදගත්කම සහ භූමිකාව
MySQL යනු වඩාත් පාවිච්චි කරන දත්ත ගබඩා කළමනාකරණ පද්ධති අතරින් එකකි. එහි ලොක්ස් (locks) දත්ත සමගත්යතාවය සහ අඛණ්ඩතාවය රැක ගැනීමට අත්යවශ්ය භූමිකාවක් ඉටු කරයි. බහු පරිශීලකයන් එකවර දත්ත ප්රවේශ කරන්නේ නම්, ලොක්ස් නිසි ලෙස භාවිතා නොකළහොත් දත්ත විකෘතියක් හෝ අනිච්චිත යාවත්කාලීන කිරීම් සිදුවිය හැකිය.
උදාහරණයක් ලෙස, අන්තර්ජාල වෙළඳපොළක් තුළ ඇණවුම් සැකසීම ගැන සිතන්න. බහු පරිශීලකයන් එකවර ගබඩා දත්ත සංස්කරණය කරන අතර ලොක් කිරීම නිසි ලෙස ක්රියාත්මක නොවන්නේ නම්, ගබඩා වාර්තා අසමතුලිත වීමේ අවදානමක් පවතී. එවැනි ගැටළු වැළැක්වීමට MySQL පේළි ලොක් (row locks) සහ වගු ලොක් (table locks) වැනි ක්රම මාර්ග ලබා දේ.
වගු ලොක් (Table Locks) අවබෝධ කිරීමෙන් විසඳන ගැටළු
වගු ලොක් යනු සම්පූර්ණ වගුවක් අගුළු දැමීමේ ක්රමයකි. විශාල දත්ත ප්රමාණයක් හසුරවන්නේ හෝ දැඩි දත්ත සමගත්යතාවය තහවුරු කිරීමේ අවශ්යතාවයක් ඇති විට මෙය ප්රයෝජනවත් වේ. එය පහත සඳහන් වර්ගයේ ගැටළු විසඳීමට භාවිතා කරයි:
- දත්ත ගැටුම් වැළැක්වීම : බහු විමසුම් එකම වගුව එකවර සංස්කරණය කරන විට ඇතිවන ගැටුම් වලින් වැළැක්වීම.
- දත්ත අඛණ්ඩතාවය තහවුරු කිරීම : බහු ක්රියාකාරකම් එකම පරිදි ක්රියාත්මක වන බව සහතික කිරීම.
- සැකසීමේ දෝෂ වැළැක්වීම : අසම්පූර්ණ ක්රියාකාරකම් මඟින් සිදුවන දත්ත විකෘතියෙන් ආරක්ෂා කිරීම.
කෙසේ වෙතත්, වගු ලොක් ප්රයෝජනවත් වුවද, ඒවා සමස්ත පද්ධතියේ කාර්ය සාධනයට බලපෑම් කළ හැකිය.
මෙම ලිපියේ අරමුණ සහ ඉලක්ක ප්රේක්ෂකයන්
මෙම ලිපිය MySQL වගු ලොක් (table locks) පිළිබඳව මූලික සංකල්පයන් සිට ප්රායෝගික භාවිතය දක්වා පියවරෙන් පියවර විස්තර කරයි. එය ආරම්භකයන්ට මූලික දැනුම ගොඩනැගීමට සහ මධ්යම හා උසස් පරිශීලකයන්ට ගැටළු විසඳීම සහ කාර්ය සාධන වැඩිදියුණු කිරීමේ තාක්ෂණික උපදෙස් ලබා දීමට අදහස් කරයි.
- ආරම්භකයන් : ලොක් කිරීමේ මූලික සංකල්පයන් අවබෝධ කර ගැනීමට කැමති අය.
- මධ්යම පරිශීලකයන් : කාර්ය සාධනය වැඩිදියුණු කර සාමාන්ය ගැටළු වලින් වැළැක්වීමට කැමති අය.
- ඉංජිනේරුවන් : නිෂ්පාදන පරිසරයේ MySQL භාවිතා කරමින් ලොක් ක්රියාකාරිත්වය උපරිම කර ගැනීමට බලාපොරොත්තු වන අය.
2. MySQL ලොක් කිරීමේ යන්ත්රණ මූලික කරුණු
ලොක් (Lock) යනු කුමක්ද? සරල විස්තරයක්
දත්ත ගබඩා පද්ධතිවල, ලොක් යනු බහු පරිශීලකයන් හෝ ක්රියාවලීන් එකවර දත්ත ප්රවේශ කරන විට දත්ත ගැටුම් සහ අසමතුලිතතා වැළැක්වීමට භාවිතා කරන පාලන ක්රමයකි. ලොක් නිසි ලෙස භාවිතා කිරීමෙන්, දත්ත ගබඩාවේ සමගත්යතාවය රැකගෙන, කාර්යක්ෂම දත්ත සැකසීම සක්රීය කරගත හැකිය.
උදාහරණයක් ලෙස, දෙදෙනෙකු එකම රෙකෝඩ් එකම වේලාවේ යාවත්කාලීන කිරීමට උත්සාහ කරන විට, කුමන යාවත්කාලීනය ප්රමුඛත්වය ලබා ගත යුතුද යන ගැටළුවක් උදාවේ. ලොක් යොදා ගැනීමෙන්, එක් ක්රියාකාරකමක් අනෙක් ක්රියාකාරකම අවසන් වන තුරු රැඳී සිටීමට බල කරයි.
ලොක් වර්ගයන්
MySQL හි, ලොක් වර්ගයන් ඒවායේ අරමුණ සහ ඉලක්ක දත්තයේ විස්තරාත්මක පරිමාණය අනුව ලබා දේ.
පේළි ලොක් (Row Locks) සහ වගු ලොක් (Table Locks)
- පේළි ලොක් පේළි ලොක් යනු වගුවේ නියමිත පේළි කිහිපයක් පමණක් අගුළු දැමීමයි. බහු ගනුදෙනුකරුවන් වෙනත් පේළි මත ක්රියා කරන විට ඒවා එකවර ක්රියාත්මක විය හැකි බැවින් ගැටුම් අඩු කර කාර්ය සාධනය වැඩි කරයි.
- ලාභ : සුක්ෂ්ම-පරිමාණ ලොක් කිරීමෙන් තරඟය (contention) අඩු වේ.
- අලාභ : කළමනාකරණය වඩා සංකීර්ණ වන අතර අතිරේක පූර්ණභාරයක් (overhead) ඇති විය හැකිය.
- වගු ලොක් වගු ලොක් යනු සම්පූර්ණ වගුවක් අගුළු දැමීමයි. සම්පූර්ණ-වගු සමගත්යතාවය අවශ්ය වන විට හෝ විශාල යාවත්කාලීන (bulk updates) සිදු කරන විට මෙය භාවිතා වේ.
- ලාභ : සරල හා අඩු පූර්ණභාරයක්.
- අලාභ : සමකාලීනතාව (concurrency) සීමා කර කාර්ය සාධනය අඩු විය හැකිය.
බෙදාගත් ලොක් (Shared Locks) සහ පූර්ණ ලොක් (Exclusive Locks)
- බෙදාගත් ලොක් බෙදාගත් ලොක් එකම වේලාවේ බහු ගනුදෙනුකරුවන්ට දත්ත කියවීමට ඉඩ දෙයි. නමුත් ලිවීමේ (write) ක්රියාකාරකම් සීමා කරයි.
- උදාහරණය : බහු පරිශීලකයන් එකම වගුවේ SELECT විමසුම් ක්රියාත්මක කරන විට.
- පූර්ණ ලොක් පූර්ණ ලොක් එකම ක්රියාවලියට දත්ත කියවීමට සහ ලිවීමට අවසර දේ. අනෙකුත් සියලු ගනුදෙනුකරුවන් ලොක් මුදාහරින තුරු රැඳී සිටිය යුතුය.
- උදාහරණය : UPDATE හෝ DELETE විමසුම් ක්රියාත්මක කරන විට.
ලොක් පරිමාණය (Lock Granularity)
ලොක් පරිමාණය යනු ලොක් එකක් මඟින් බලපෑම් කරන දත්ත පරාසයයි. සුක්ෂ්ම පරිමාණ ලොක් කිරීම සමකාලීනතාව වැඩි කරයි, නමුත් පූර්ණභාරය (overhead) වැඩි වේ. සාමාන්ය උදාහරණයන් අතර:
- Global Lock : සම්පූර්ණ දත්ත ගබඩාවට අදාළ වේ.
- Table Lock : නියමිත වගුවකට අදාළ වේ.
- Row Lock : නියමිත පේළි සඳහා අදාළ වේ.
සුදුසු ලොක් තෝරා ගැනීම
තත්ත්වය අනුව සුදුසු ලොක් වර්ගය තෝරා ගැනීම වැදගත් වේ. උදාහරණයක් ලෙස, විශාල පරිමාණ වගු මෙහෙයුම් සඳහා වගු ලොක් භාවිතා කරන්න, සහ කාර්යක්ෂම සමකාලීන සැකසීම අවශ්ය වන විට පේළි ලොක් භාවිතා කරන්න.
3. වගු ලොක් පිළිබඳ සමාලෝචනය සහ වර්ග
වගු ලොක් මූලික සංකල්පය
වගු ලොක් යනු MySQL හි සම්පූර්ණ වගුවක් අගුළු දැමීමේ ක්රමයකි. මෙය වෙනත් සේවාදායකයන්ට එම වගුවට ප්රවේශ වීමට උත්සාහ කරන විට නියමිත කොන්දේසි යටතේ රැඳවීමට බලපායි. වගු ලොක් සම්පූර්ණ වගු දත්ත අඛණ්ඩතාවය රැක ගැනීමට ප්රයෝජනවත් වන අතර විශාල ප්රමාණයේ දත්ත මත බල්ක් මෙහෙයුම් කරන විට සාමාන්යයෙන් භාවිතා වේ.
වගු ලොක් ප්රධාන වශයෙන් පහත තත්ත්වයන්හි භාවිතා වේ:
- කණ්ඩායම් සැකසීම හෝ බල්ක් ඇතුළත් කිරීම.
- දැඩි දත්ත අඛණ්ඩතාවය සහතික කිරීම අවශ්ය වන විට.
- සමකාලීනව විශේෂ ප්රශ්න ධාවනය කිරීමේදී ගැටළු ඇති විය හැකි විට.
එහෙත්, වගු ලොක් සමකාලීනතාවය සීමා කරන බැවින්, ඒවා සුදුසු ලෙස භාවිතා කළ යුතුය.
වගු ලොක් වර්ග
MySQL වගු ලොක් දෙකක් ප්රධාන වශයෙන් ලබා දේ: READ ලොක් සහ WRITE ලොක්.
READ ලොක්
READ ලොක් වගු දත්ත කියවීමට පමණක් භාවිතා වේ. READ ලොක් තබා ඇති අතරතුර, වෙනත් සේවාදායකයන්ටද ඒ දත්ත එකවර කියවීමට හැකිය, නමුත් දත්ත වෙනස් කිරීම (ලියන) අනුමත නොවේ.
- විශේෂත්වයන් :
- බහු සේවාදායකයන් එකවර කියවිය හැකිය.
- ලිවීමේ මෙහෙයුම් ලොක් මුදා හැරෙන තුරු රැඳී සිටිය යුතුය.
- සාමාන්ය භාවිතා අවස්ථා :
- විශ්ලේෂණය හෝ වාර්තා නිර්මාණය වැනි පූර්ණ-කියවීමේ සැකසීම.
SQL උදාහරණය:
LOCK TABLES my_table READ;
-- During this time, other clients can read data from my_table, but cannot modify it.
UNLOCK TABLES;
WRITE ලොක්
WRITE ලොක් වගු දත්ත වෙනස් කරන මෙහෙයුම් සඳහා භාවිතා වේ. WRITE ලොක් තබා ඇති අතරතුර, වෙනත් සේවාදායකයන්ට වගුව කියවීමට හෝ ලිවීමට නොහැක.
- විශේෂත්වයන් :
- ලිවීමේ මෙහෙයුම් ප්රමුඛත්වය ලබා ගනී.
- වෙනත් සේවාදායකයන්ගේ සියලුම මෙහෙයුම් (කියවීම සහ ලිවීම) අවහිර වේ.
- සාමාන්ය භාවිතා අවස්ථා :
- බල්ක් යාවත්කාලීන කිරීම හෝ ඇතුළත් කිරීම.
- සම්පූර්ණ වගු අඛණ්ඩතාවය අවශ්ය වන සැකසීම්.
SQL උදාහරණය:
LOCK TABLES my_table WRITE;
-- During this time, other clients cannot access my_table.
UNLOCK TABLES;
වගු ලොක් භාවිතයේ ප්රතිලාභ සහ අවධානම්
ප්රතිලාභ
- දත්ත අඛණ්ඩතාවය සහතික කිරීම : බහු මෙහෙයුම් සමකාලීනව සිදු වුවත්, වගු ලොක් සමග සමාන්ය ප්රතිඵලයන්ට සහතික වේ.
- ඉදිරිපත් කිරීමේ පහසුව : වගු මට්ටමේ අගුළු දැමීම පේළි මට්ටමේ අගුළු දැමීමට වඩා සරලයි.
අවධානම්
- සමකාලීනතාවය අඩුවීම : සම්පූර්ණ වගුව අගුළු දැමීම නිසා කාර්ය සාධනය අඩුවිය හැක.
- ඩෙඩ්ලොක් අවදානම : වෙනත් සේවාදායකයන් ලොක් මුදා හැරීමට රැඳී සිටින අතර ගැටුම් උදාවිය හැක.
- විශාල පරිමාණ පද්ධති සඳහා සුදුසුකම : බහු සේවාදායකයන් සමකාලීනව ක්රියා කරන විට, පේළි ලොක් වඩා හොඳ තේරීමක් විය හැක.
4. වගු ලොක් භාවිතා කරන ආකාරය
LOCK TABLES ප්රකාශය සඳහා මූලික ව්යවස්ථාව සහ උදාහරණ
LOCK TABLES ප්රකාශය MySQL හි වගු ලොක් යෙදීමට භාවිතා වේ. මෙම ප්රකාශය සමඟ, ඔබට නියමිත වගුවක් READ හෝ WRITE ලොක් භාවිතා කර අගුළු දැමිය හැක.
ව්යවස්ථාව
LOCK TABLES table_name lock_type;
table_name: අගුළු දැමීමට අවශ්ය වගුවේ නාමය.lock_type: ලොක් වර්ගය (READහෝWRITE).
උදාහරණ
උදාහරණ 1: READ ලොක් යෙදීම
LOCK TABLES orders READ;
-- Lock the "orders" table as read-only
SELECT * FROM orders;
-- Other clients cannot modify "orders"
UNLOCK TABLES;
උදාහරණ 2: WRITE ලොක් යෙදීම
LOCK TABLES orders WRITE;
-- Lock the "orders" table as write-only
UPDATE orders SET status = 'shipped' WHERE order_id = 1;
-- Other clients cannot read or write "orders"
UNLOCK TABLES;
UNLOCK TABLES ප්රකාශය සමඟ ලොක් මුදා හැරීම
The UNLOCK TABLES ප්රකාශය වර්තමාන සැසියේ තබා ඇති සියලුම වගු අගුළු මුදා හරියයි. සමහර අවස්ථා වල (උදාහරණයක් ලෙස, සැසිය අවසන් වන විට) අගුළු ස්වයංක්රීයව මුදා හැරිය හැක, නමුත් පැහැදිලිව ඒවා මුදා හරිනුම අනිච්චිත අගුළු තත්ත්වයන් වැළැක්වීමට උපකාරී වේ.
Syntax
UNLOCK TABLES;
Example
LOCK TABLES products WRITE;
-- Perform table operations
INSERT INTO products (product_name, price) VALUES ('Widget', 19.99);
-- Release the lock after the operation is complete
UNLOCK TABLES;
Real-World Usage Scenarios
Scenario 1: Ensuring data integrity
ඉන්වෙන්ටරි කළමනාකරණ පද්ධතියක, එකම නිෂ්පාදනය සඳහා එකවර බහු ක්රියාවලීන් දත්ත වෙනස් කිරීමෙන් වැළැක්වීමට WRITE අගුළක් යොදන්න.
LOCK TABLES inventory WRITE;
UPDATE inventory SET stock = stock - 1 WHERE product_id = 1001;
UNLOCK TABLES;
Scenario 2: Read-only data analysis
දත්ත විශ්ලේෂණය කරන විට, විශ්ලේෂණය අතරතුර අනෙකුත් ක්රියාවලීන් දත්ත වෙනස් කිරීමෙන් වැළැක්වීමට READ අගුළක් යොදන්න.
LOCK TABLES sales READ;
SELECT SUM(amount) AS total_sales FROM sales;
UNLOCK TABLES;
Important Notes When Using Table Locks
- Impact on performance
- WRITE අගුළක් අනෙකුත් ගනුදෙනුකරුවන්ගේ සියලු ක්රියාකාරකම් අවහිර කරන බැවින්, එය අවධානයෙන් භාවිතා කළ යුතුය.
- Session management
- අගුළු සැසියකට අනුව කළමනාකරණය කරයි. අගුළ එකම සැසිය තුළ පමණක් ක්රියාත්මක වන බැවින්, වැරදි වැළැක්වීමට සැසි නිසි ලෙස පාලනය කිරීම වැදගත් වේ.
- Lock contention
- බහු ගනුදෙනුකරුවන් එකම වගුව අගුළු කිරීමට උත්සාහ කරන විට තරඟයක් සිදුවිය හැක. තරඟය නිතර සිදුවේ නම්, අගුළු වර්ගය සහ කාලය සමාලෝචනය කරන්න.

5. Table Lock Considerations and Best Practices
Important Considerations When Using Table Locks
වගු අගුළු දත්ත අඛණ්ඩතාවය සහතික කිරීම සඳහා ඉතා ප්රයෝජනවත් වන නමුත්, ඒවා භාවිතා කරන විට පහත සලකා බැලීම් මතක තබා ගත යුතුය.
1. Avoiding Lock Contention and Deadlocks
- Lock contention : බහු ගනුදෙනුකරුවන් එකම වගුව එකවර අගුළු කිරීමට උත්සාහ කරන විට තරඟයක් සිදුවේ. එවිට, සමහර ගනුදෙනුකරුවන් රැඳී සිටින තත්ත්වයට පත් වෙති, එය සැකසීම ප්රමාද කරයි.
- Deadlocks : ගනුදෙනුකරු A සහ ගනුදෙනුකරු B වෙන වෙනම සම්පත් රඳවා තබා, එකිනෙකාගේ සම්පතට ප්රවේශය බලා සිටින විට ඝාතන අගුළක් සිදුවේ. මෙය වැළැක්වීමට, අගුළු ලබා ගැනීමේ ක්රමය සම්මත කර, අගුළු භාවිතය අවම කරගන්න.
2. Impact on Performance
පේළි අගුළු සමඟ සසඳන විට, වගු අගුළු විශාලතම ග්රැන්යුලාරිටි ඇති අතර සමකාලීන ක්රියාකාරකම් සීමා කරයි. උදාහරණයක් ලෙස, බහු ගනුදෙනුකරුවන් එකවර ක්රියා කරන විශාල පරිමාණ පද්ධතිවල, වගු අගුළු සමස්ත පද්ධති කාර්ය සාධනය අඩු කරයි.
3. Forgetting to Release Locks
අගුළක් මුදා නොහැරුවහොත්, අනෙකුත් ගනුදෙනුකරුවන් වගුවට ප්රවේශය නොලැබේ, එය අනිච්චිත පද්ධති අඩු කාලයක් ඇති කරයි. සෑම විටම අගුළු මුදා හැරීමේ ක්රියාව (UNLOCK TABLES) ක්රියාත්මක කිරීමේ පුරුද්දක් ගන්න.
Best Practices for Table Locks
1. Apply the Minimum Necessary Lock
වගු අගුළු භාවිතා කරන විට, පද්ධතියේ පුරා බලපෑම අඩු කිරීම සඳහා අගුළු පරාසය අවශ්යතම අඩුම මට්ටමට සීමා කරන්න.
- Example : බහු වගු සංස්කරණය කළ යුතු නම්, ක්රියාකාරකම් වෙන් කර, එක් වරක් එක වගුවක් පමණක් අගුළු කරන්න.
2. Shorten Lock Duration
අගුළ දිගු කාලයක් තබා ගන්නා විට, අනෙකුත් ගනුදෙනුකරුවන් රැඳී සිටීමේ අවදානම වැඩි වේ. අගුළු කාලය කෙටි කිරීමට:
- අගුළ තුළ ක්රියාත්මක වන ක්රියාකාරකම් සරල කර, කාලය ගතවන සැකසීම් වලින් වැළැක්වන්න.
- හැකි නම්, අගුළුยุක්තිකය පෙර පරීක්ෂා කර, සුදුසුකම් ලබා ගන්න.
3. Monitor Lock Status
අගුළු තත්ත්වය නිරීක්ෂණය කිරීමෙන් ගැටළු ඇති වූ විට ඉක්මනින් ප්රතිචාර දැක්විය හැක. MySQL පවතින අගුළු තත්ව පරීක්ෂා කිරීමට පහත විධාන ලබා දේ:
SHOW FULL PROCESSLIST: වත්මන් ගනුදෙනුකරුවන්ගේ සම්බන්ධතා සහ ක්රියාකාරකම් පරීක්ෂා කරන්න.SHOW OPEN TABLES: වත්මන් අගුළු කර ඇති වගු පරීක්ෂා කරන්න.
4. Use Table Locks Appropriately with Row Locks
අධික සමාන්තර සැකසුම් සහිත පද්ධතිවල හෝ නිශ්චිත පේළි පමණක් වෙනස් කරන විට, පේළි ලොක්වල් වඩාත් සුදුසු විය හැක. පද්ධති අවශ්යතා මත පදනම්ව ටේබල් ලොක්වල් සහ පේළි ලොක්වල් අතර තේරීමක් කරන්න.
5. සංග්රාම සමඟ ඒකාබද්ධ කිරීම
සංග්රාම භාවිතා කිරීමෙන් කිහිපයක් මෙහෙයුම් එක ඒකකයක් ලෙස සැලකීමට ඉඩ සලසයි. ටේබල් ලොක්වල් සමඟ ඒකාබද්ධ කළ විට, මෙම ප්රවේශය තවත් ශක්තිමත් දත්ත සැකසුම්කරණයට හැකියාව ලබා දෙයි.
- උදාහරණය :
START TRANSACTION; LOCK TABLES orders WRITE; UPDATE orders SET status = 'completed' WHERE order_id = 1; UNLOCK TABLES; COMMIT;
කාර්යක්ෂම ලොක් කළමනාකරණය සඳහා උපදෙස්
- ලොක් භාවිතය අවම කරන්න : විශාල දත්ත සෙට් හෝ ඉහළ සමාන්තරභාවයක් සමඟ සැලකිල්ලෙන් ලොක් භාවිතය සැලසුම් කරන්න.
- පද්ධති බර ව්යාප්ත කරන්න : ඉහළ කාලවලදී විශාල ලොක් භාවිතයෙන් වළකින්න සැලසුම්කරණය යුක්තිසහගත කරන්න.
- පරීක්ෂණ පරිසරයකදී අභිරූපණය කරන්න : නිෂ්පාදනයට යෙදීමට පෙර ස්ටේජිං හෝ පරීක්ෂණ පරිසරයකදී ලොක්වල බලපෑම තහවුරු කරන්න.
6. ටේබල් ලොක් FAQ
ටේබල් ලොක් සම්බන්ධයෙන් නිතර අසන ප්රශ්න සහ පිළිතුරු පහත දැක්වේ. මෙය ආරම්භකයින් සහ මධ්යම මට්ටමේ පරිශීලකයින් සඳහා ඉතා උපකාරී වේ.
Q1. ටේබල් ලොක්වල් සහ පේළි ලොක්වල් අතර වෙනස කුමක්ද?
A: වෙනස ලොක් කරන දත්ත පරාසයේ පිහිටීමයි.
- ටේබල් ලොක් : සම්පූර්ණ ටේබලය ලොක් කරයි. බහුල මෙහෙයුම් හෝ දැඩි දත්ත ස්ථිරභාවය අවශ්ය වන විට භාවිතා කරයි, නමුත් සමාන්තරභාවය සීමා කරයි.
- පේළි ලොක් : නිශ්චිත පේළි පමණක් ලොක් කරයි. බහුල බාහිරයින් විසින් විවිධ පේළි ප්රවේශ වන විට සමාන්තර සැකසුම්කරණයට ඉඩ සලසයි.
Q2. ටේබල් ලොක් භාවිතා කිරීමෙන් කාර්ය සාධනයට බලපානවාද?
A: ඔව්, ටේබල් ලොක්වල් කාර්ය සාධනයට බලපෑම් කළ හැක. පහත සඳහන් තත්ත්වයන්හි සැලකිලිමත් වන්න:
- එකම ටේබලයට බහුල බාහිරයින් සමගාමීව ප්රවේශ වන විට, ලොක් ගැටලු සැකසුම්කරණය ප්රමාද කළ හැක.
- විශාල ටේබල් ලොක් කිරීමෙන් අනෙකුත් බාහිරයින් දිගුකාලීනව වළක්වාගත හැක. මෙය සමනය කිරීමට, ලොක් පරාසය අවම කරන්න සහ ලොක් කාලය කෙටි කරන්න.
Q3. වත්මන් ලොක් තත්ත්වය පරීක්ෂා කරන්නේ කෙසේද?
A: MySQL විසින් ලොක් තත්ත්වය පරීක්ෂා කිරීමට ප්රකාශන ලබා දෙයි. සුලබ ප්රකාශන ඇතුළත් වන්නේ:
SHOW FULL PROCESSLIST;වත්මන් සම්බන්ධිත බාහිරයින් සහ ඔවුන්ගේ ක්රියාකාරකම් පෙන්වයි. ලොක් සඳහා බලාගෙන සිටින ක්රියාවිරිත්ව තත්ත්වයන් වන “Waiting for table metadata lock” වැනි තත්ත්ව පෙන්වයි.SHOW OPEN TABLES WHERE In_use > 0;වත්මන් භාවිතා වන (ලොක් කරන) ටේබල් පෙන්වයි.
Q4. ඩෙඩ්ලොක් එකක් සිදු වුවහොත් මොකද කළ යුත්තේ?
A: ඩෙඩ්ලොක් එකක් සිදු වන විට, MySQL ස්වයංක්රීයව එක් සංග්රාමයක් අවසන් කරන අතර අනෙකට දිගටම ඉඩ සලසයි. නමුත් ඩෙඩ්ලොක් නිතර සිදු වනවා නම්, පහත උපායන් සලකා බලන්න:
- ලොක් ලබාගැනීමේ අනුපිළිවෙල සම්මතකරණය කරන්න.
- ලොක් කාලය කෙටි කිරීමට සංග්රාම පරාසය අඩු කරන්න.
- ලොක් ගැටලු අවම කිරීමට ප්රශ්න විසඳීම් නැවත නිර්මාණය කරන්න.
Q5. ටේබල් ලොක් භාවිතා කිරීමේ හොඳම පුරුදු මොනවාද?
A: හොඳම පුරුදු ඇතුළත් වන්නේ:
- අවශ්ය ලොක් පමණක් යෙදෙන්න : සැකසුම්කරණය සඳහා අවශ්ය ටේබල් පමණක් ලොක් කරන්න.
- ලොක් කාලය කෙටි කරන්න : දිගුකාලීනව ලොක් තබාගැනීමෙන් වළකින්න.
- කාර්ය සාධනය සලකන්න : සමාන්තරභාවය ඉහළ වන විට පේළි ලොක්වල් වෙත මාරු වන්න.
- සංග්රාම භාවිතා කරන්න : ස්ථිරභාවය පවත්වාගැනීමට බහුල මෙහෙයුම් එකතු කරන්න.
Q6. ටේබල් ලොක් කවදා භාවිතා කළ යුත්තේ?
A: ටේබල් ලොක් පහත දර්ශනවලදී ඵලදායී වේ:
- විශාල දත්ත සෙට්වල බහුල යාවත්කාලීන කිරීම් සිදු කරන විට.
- බැච් සැකසුම්කරණයේදී දත්ත අඛණ්ඩතාව තහවුරු කරන විට.
- අනෙකුත් බාහිරයින්ගෙන් තාවකාලිකව ප්රවේශය සීමා කරන විට.
Q7. ලොක් එකක් නිදහස් කිරීම අමතක වුවහොත් මොකද වෙන්නේ?
A: ලොක් එකක් නිදහස් කිරීම අමතක වුවහොත්, අනෙකුත් බාහිරයින්ට ටේබලයට ප්රවේශ වීමට නොහැකි වේ. මෙය පද්ධති කාර්ය සාධනය පහත වැටීමට හෝ ඩෙඩ්ලොක් ඇති වීමට හේතු විය හැක. UNLOCK TABLES භාවිතා කරමින් ලොක් නිදහස් කිරීම පුරුදුවක් කරගන්න.
7. නිගමනය
ටේබල් ලොක්වල වැදගත්කම සහ නිසි භාවිතය
MySQL වගු අගුළු (table locks) යනු දත්ත සමාන්යතාවය රැක ගැනීමට අත්යවශ්ය ලක්ෂණයකි. ඒවා බච් ප්රොසෙසින්, විශාල යාවත්කාලීන කිරීම්, සහ දැඩි දත්ත අඛණ්ඩතාවය අවශ්ය වන මෙහෙයුම් වල විශේෂයෙන් වැදගත් භූමිකාවක් ගනී. කෙසේ වෙතත්, අගුළු නිසි ලෙස කළමනාකරණය නොකළහොත්, ඒවා කාර්ය සාධන අඩු වීම සහ deadlock වැනි ගැටළු ඇති කරයි.
මෙම ලිපිය පහත ප්රධාන කරුණු ආවරණය කරයි:
- වගු අගුළු මූලික කරුණු : අගුළු වර්ග සහ ලක්ෂණ අවබෝධය මූලිකයයි.
- භාවිතය සහ ප්රායෝගික උදාහරණ : අපි
LOCK TABLESසහUNLOCK TABLESමූලික වාක්ය රචනය සහ වාස්තුක ලෝක උදාහරණ පරීක්ෂා කළෙමු. - සලකා බැලීම් සහ හොඳම පුරුදු : කාර්ය සාධන බලපෑම අඩු කිරීම සහ deadlock අවදානම අඩු කිරීම කෙසේදැයි අපි පැහැදිළි කළෙමු.
- FAQ : ප්රායෝගික ගැටළු විසඳීමට සාමාන්ය ප්රශ්න වලට පිළිතුරු දුන්නෙමු.
වගු අගුළු ප්රභාවී ලෙස භාවිතා කිරීම සඳහා ප්රධාන කරුණු
- සුදුසු අගුළු වර්ගය තෝරන්න : ඉතා සමකාලීන පරිසරවල පේළි අගුළු (row locks) භාවිතා කර, දැඩි දත්ත සමාන්යතාවය අවශ්ය වන විට වගු අගුළු (table locks) භාවිතා කරන්න.
- අගුළු බලපෑම අඩු කරන්න : අවශ්ය අගුළු පමණක් යොදන්න සහ අගුළු කාලය හැකි තරම් කෙටි ලෙස තබන්න.
- ගැටළු පූර්වක ලෙස වැළැක්වන්න : අගුළු තත්ත්වය නිතර නිරීක්ෂණය කර, deadlock වලින් වැළැක්වීමට පද්ධති සැලසුම් කරන්න.
මෙම ලිපිය හරහා, ඔබ MySQL වගු අගුළු මූලික කරුණු සහ ප්රායෝගික යෙදුම් දෙකම ඉගෙන ගෙන ඇත. වගු අගුළු නිවැරදිව භාවිතා කිරීමෙන්, ඔබට දත්ත අඛණ්ඩතාවය රැකගෙන, කාර්යක්ෂම සහ ස්ථාවර පද්ධති මෙහෙයුමක් ලබා ගත හැක.


