Laravel සංවර්ධකයින්ට Supabase, Neon හෝ ස්වයං-හෝස්ට් PgBouncer සමඟ PostgreSQL භාවිතා කිරීමේදී කලින් අත්විඳින්නට වූ ගැටළු දැන් ඉවරයි. PDO::ATTR_EMULATE_PREPARES සකස් කිරීම, බූලියන් බයින්ඩින් සඳහා සමාජ පැකේජයක් ස්ථාපනය කිරීම, මයිග්රේෂන් සඳහා වෙනත් සම්බන්ධතා සැකසුම තබා ගැනීම වැනි පුරුදු ක්රියාවලියක් අවසන් විය.
Laravel 13.17 නව සංස්කරණය තුළ PostgreSQL transaction pooler (උදා: PgBouncer) සඳහා ෆ්රේම්වර්ක් මට්ටමේ ස්වභාවික සහය ඇතුළත් කර ඇත. එකම සැකසුම් කොඩියක්, විකල්ප බ්ලොක් එකක් එක් කිරීමෙන් පසු, Laravel සියල්ලම පූල් කරණය අවශ්යතා අනුව සකස් කරයි – emulated prepares, boolean binding, මයිග්රේෂන් මාරු කිරීම වැනි දේවල් සියල්ලම.
PostgreSQL සම්බන්ධතා ඇයි මෙතරම් බර?
MySQL වල සම්බන්ධතා ලාංඡනයක් වැනි තාරකාවක් (lightweight threads) ලෙස ක්රියා කරන අතර, PostgreSQL සම්බන්ධතාවයක් සෑදීමේදී OS ප්රොසෙස් එකක් (fork) තැනේ. ඒක 5‑10 MB RAM පරිභෝජනය කරන අතර, බොහෝ PostgreSQL සර්වර් වල max_connections පමණක් 100ක් පමණ වේ.
Laravel PHP‑FPM ඉල්ලීම් සෑම විටම නව සම්බන්ධතාවක් විවෘත කරයි. 50 එකලස් ඉල්ලීම් තිබේ නම්, PostgreSQL ප්රොසෙස් 50ක් පවත්වා ගත යුතුයි. Queue worker, scheduler, දෙවන app server එකක් එක් කළහොත් “FATAL: too many connections” දෝෂයක් ලොග් වල පෙනේ. Octane භාවිතා කරන විට, ස්ථාවර workers (උදා: 32 Swoole workers) ඒකකයටම සම්බන්ධතා තබා ගනී, එම නිසා තත්යයෙහිම බොහෝ idle PostgreSQL ප්රොසෙස් පවතී.
Transaction Pooler එකේ කාර්යය කුමක්ද?
PgBouncer වැනි pooler එක, ඔබේ යෙදුම සහ PostgreSQL අතර ලාංඡා මධ්යස්ථයකි. ඔබේ යෙදුම “වියළි” සම්බන්ධතා (cheap connections) සෑදෙයි, ඒවා pooler එකේ හරහා නියමිත PostgreSQL සම්බන්ධතා (සාමාන්යයෙන් 20ක්) මත බෙදා හැරේ. Transaction mode හි, සත්ය සම්බන්ධතාවය එක් transaction එකක් පමණක් භාවිතා කරයි; transaction අවසන් වූ විගස එය නැවත pool එකට ආපසු යයි.
මෙම ක්රමය Supabase Supavisor, Neon pooler endpoints, AWS RDS Proxy වැනි සේවාවන්ට ඉතා ප්රයෝජනවත් වේ. නමුත් transaction mode එක server‑side prepared statements, SET, LISTEN/NOTIFY වැනි session‑level විධාන කඩිනම්ව බිඳ වැටේ. එනිසා Laravel තුළ native සහය අවශ්ය වූයේය.
පෙර කල යුතු වැඩ
- PDO::ATTR_EMULATE_PREPARES => true සකස් කර server‑side prepares අක්රිය කිරීම.
- boolean binding (true/false) 1/0 ලෙස යැවීම නිවැරදි කිරීමට community package එකක් ස්ථාපනය කිරීම.
- DDL හා migrations සඳහා වෙනත් සම්බන්ධතා සැකසුම (pgsql_direct) භාවිතා කර, සෑම migrate කමටම
--database=pgsql_directඑක් කිරීම.
Laravel 13.17 මෙම සියලු පියවර ඉවත් කරයි. config/database.php තුළ 'pgbouncer' => true වැනි සරල කොඩියක් එක් කිරීමෙන්, framework එකම සියල්ලම කළමනාකරණය කරයි.
ශ්රී ලංකාවට ඇති වැදගත්කම
ශ්රී ලංකාවේ තාක්ෂණික ආරම්භකයන්, විශ්වවිද්යාල සිසුන්, හා මැදමැද සමාගම් සඳහා මෙම නවත්වය විශාල වාසියක් ගෙන එයි. පූල් කරණය නිසා server RAM අවශ්යතා අඩු වේ, එම නිසා low‑cost VPS හෝ cloud instance එකකත් වැඩි concurrent requests හසුරවන්න පුළුවන්. ඉන්පසු, Laravel සමාජ පැකේජයන්හි රඳා සිටීම අවශ්ය නොවීමෙන්, dependency ගණන අඩු කර, security risk කුමක්වත් අඩු වේ. CI/CD pipeline එකේ migration පියවර සරලව, අමතර config ගැටළු නොමැතිව, deployment වේගවත් වේ. එම නිසා ශ්රී ලංකාවේ startups තරඟකාරී වෙළඳපලේ ඉක්මනින් නිෂ්පාදන ගෙන එන්න හැකියාව ලැබේ.
අවසානයේ, Laravel 13.17 නව PgBouncer native support එක, PostgreSQL‑වලට Laravel යෙදුම් සකස් කරන සියලුම සංවර්ධකයන්ට පූල් කිරීමේ ගැටළු අතහැර, කාර්යක්ෂම, ආරක්ෂිත, හා පරිසර‑හිතකාරී පද්ධතියක් ලබා දේ.