Warbixintaadu waxay ku dhammaataa qiyaastii hal ilbiriqsi server-ka xogta iyo afar iyada oo loo marayo VPN, lambarka uu psql daabaco wuxuu si toos ah u tilmaamayaa xogta. Lambarkaas waa saacad-joojin dhinaca macmiilka, ma aha cabbir server. Waxay daboolaysaa hadalka marka uu baxayo, sugnaanta jawaabta iyo safafka soo noqonaya. Kala soocidda saddexdan waa dariiqa kaliya ee lagu ogaado dhinac kee la hagaajinayo.

Waxa ay psql cabbirkeedu runtii cabbiro

\timing on wuxuu bilaabaa saacad-joojin wax yar ka hor inta uusan macmiilku qorin hadalka socket-ka wuxuuna joojiyaa marka safka ugu dambeeya natiijadaas la akhriyo. Fulinta server-ka laftiisu waxay ku taal meel ku dhex jirta daaqaddaas, iyo sidoo kale millisek kasta oo baakaduhu ku qaataan tunnel-ka. Waxba ma soo saaridda kala soocma. EXPLAIN sidoo kale wuxuu daabacaa lambar, laakiin kan waxaa soo saara server-ka wuxuuna ka reebaa sugnaanta macmiilka. Laba lambar, laba su'aal oo kala duwan.

Bilow hal fadhi, ka tag cabbiraadda waqtiga oo shidan oo ku socodsii hadalka aad danaynayso gudaha fadhigaas. Dib u isticmaalka fadhi waxay kharashka xiriirka ka reebtaa cabbirka koowaad.

psql "host=db.internal port=5432 dbname=appdb user=app" \
  -c "\timing on" \
  -c "select count(*) from orders where created_at > now() - interval '1 day';"

Lambarku wali waxa uu ku darayaa wareejinta natiijada, taas oo ah waxa aad halkan rabto. Waxa uu hadda ma ku darayo is-weydaarsiga xiriirka iyo aqoonsiga oo wicitaan cusub ku dari lahaa.

Isbarbardhig hal hadal saddex waddo

Ku socodsii isla hadalka socket-ka Unix, ciwaanka LAN iyo magaca server-ka VPN, oo isbarbardhig saddexda. Haddii kaliya kan ugu dambeeya uu gaabis yahay, weydiintu ma aha doorsoome.

Wicitaan kastaa wuxuu marka hore xiriir sameeyaa oo markaas ka dib cabbiraa hadalka, sidaas darteed kharashka xiriirku wuxuu ka baxsadaa lambarka halka wareejintu ku dhex jirto. Hayso qaybta WHERE, tirada safafka iyo mishiinka macmiilka oo isku mid ah, haddii kale waxaad isbarbardhigaysaa culaysyada shaqada halkii waddooyinka.

psql -h /var/run/postgresql -U app -d appdb -c "\timing on" -c "select count(*) from orders;"
psql -h 10.40.0.12 -U app -d appdb -c "\timing on" -c "select count(*) from orders;"
psql -h db.vpn.internal -U app -d appdb -c "\timing on" -c "select count(*) from orders;"

LAN gudaheed farqiintu badanaa way yar tahay in la iska indhatiro; VPN ahaan marar badan may aha. Kala soocista saddexda natiijada ayaa markaas kuu sheegta sugnaanta aad weerartaa.

Socket maxalli ah oo gaabis ah waxay ka dhigan tahay shaqada server-ka ama qorshaynta. Natiijada LAN oo gaabis ah waxay ka dhigan tahay weydiinta ama mugga ay dhaqaajiso. Kaliya natiijada VPN oo gaabis ah waxay ka dhigan tahay daahitaan, MTU ama bandwidth la heli karo oo jidka ku yaal, mana jirto wax beddelaad index ah oo taas hagaajiya.

Soo saar waqtiga fulinta server-ka laftiisa

Server-ku wuxuu soo sheegi karaa waqti inta uu qaatay, lambarkaasna waa kan lala barbardhigo kan macmiilka. EXPLAIN oo ANALYZE la socda wuxuu fuliyaa hadalka wuxuuna daabacaa waqtiga qorshaynta iyo fulinta gudaha qorshaha, halka BUFFERS uu ku daro habdhaqanka kaydka oo badanaa sharraxa orod diiran iyo mid qabow. Ha u jeedin hadallada qorista haddii aanad qorshaynayn inaad qorto. Nuqul kaliya-laguaakhriyo karo waa meesha ugu ammaansan ee laga bilaabo, iyo tixraaca psql wuxuu diiwaangeliyaa baaxadda saacad-joojinta dhinaca macmiilka.

Hadallada ay barnaamijku horey u socodsiiyo, pg_stat_statements wuxuu soo ururiyaa fulinta dhinaca server-ka isagoon waxna dib u socodsiiin. Safafku waxay ku saleysan yihiin weydiin la caadiyeeyay, sidaas darteed hal gelin waxay dabooli kartaa dhowr goobood oo wicitaan.

select calls, round(mean_exec_time::numeric, 2) as mean_ms, rows
from pg_stat_statements
order by mean_exec_time desc
limit 5;

Magacyada tiirarka way kala duwan yihiin iyadoo ku xiran daabacaadda: PostgreSQL 13 iyo kuwa ka dambeeya waxay soo bandhigaan mean_exec_time, halka noocyada hore ay u yaqaaniin mean_time, sidaas darteed hubi \d pg_stat_statements haddii weydiintaas khalad keento. Qiyamkaani waxay ka reebaan qorshaynta waxayna ka reebaan safarka ilaa macmiilkaaga. Ka-reebitaankaas ayaa iyaga faa'iido u leh isbarbardhigga.

Tiri safarada socodka iyo soo noqoshada, ma aha oo kaliya millisekanno

Warbixin laga dhisay laba boqol oo hadallo yaryar oo isku xiran waxay laba boqol ku dhufataa daahitaan kasta oo jidku ku daro. Hal hadal oo soo celiya hal milyan oo safaf ah wuxuu bixiyaa daahitaankaas hal mar ka dibna wuxuu muddo dheer bixiyaa bandwidth. Labaduba isku mid ayay uga muuqdaan saacad-joojinta macmiilka, waxayna u baahan yihiin hagaajinno is burinaya.

Cabbir tirada hadallada halkii aad qiyaasi lahayd. Akhri wadarta, hal mar socodsii warbixinta, ka dibna mar kale akhri oo ka jar.

select sum(calls) as calls from pg_stat_statements;
-- run the report here
select sum(calls) as calls from pg_stat_statements;

Haddii delta-du weyn tahay oo hadal kastaa server-ka ku jaban yahay, kooxayntu waa hagaajinta lacagta soo celisa. Isku dar weydiimaha isku xiran, isticmaal hal hadal oo ku saleysan goobo, ama loop-ka ka wad cursor. psql is-dhexgal ah gudihiisa, \set FETCH_COUNT 1000 natiijada weyn waxay ku timaaddaa kooxo oo waxay beddelaa habdhaqanka wareejinta iyo xusuusta macmiilka. Ma yareyso shaqada server-ka, sidaas darteed ma badbaadin doonto weydiin gaabis ah.

Baadh tunnel-ka dib-u-gudbin iyo istaag MTU

Marka hadallada yaryar ay degdeg yihiin oo natiijada waaweyn ay joogsadaan badhka jidka, weydiintu badanaa way fiican tahay jidkuna ma fiicna. Tunnel MTU-diisu ka hooseyso xiriirka hoose, oo ay la socoto ICMP la xannibay, waxay soo saartaa isla qaabkaas: baakadaha ugu horreeya way yimaadaan, kuwa waaweyn way lunto, wareejintuna way laalaadtaa ilaa uu mar kale isku dayo. Tirooyinka dib-u-gudbinta dhinaca macmiilka ayaa taas muujiya.

Fiiri socket-ka iyo tirooyinka kernel-ka inta wareejin si ula kac ah gaabis ah ay socoto. Wadarta dib-u-gudbintu waa isku-tuuris, sidaas darteed qor ka hor iyo ka dib halkii aad akhrin lahayd hal muunad.

ss -tin dst 10.40.0.12
netstat -s | grep -iE "retransmit|segments retransmitted"
ping -M do -s 1400 -c 3 10.40.0.12

Dib-u-gudbinta kor u kacda inta wareejintu socoto, oo ay la socoto ping ku guuleysta 1400 byte laakiin ku guuldareysta 1472, waxay tilmaamayaan dhibaatada MTU halkii ay ahaan lahayd dhibaatada xogta. Hoos u dhigista MTU ee interface-ka tunnel-ka ama cidhiidhinta MSS ee albaabka waa hagaajinta caadiga ah, isla saddexda amar ayaa taas ka dib xaqiijiya. Haddii dib-u-gudbintu siman tahay inta wareejintu wali gaabis ah, fiiri bandwidth-ka tunnel-ka loo oggolaaday halkii aad fiirin lahayd luminta.

Taxane gaaban ayaa daboolaya warbixinta gaabis ah ee xigta: isbarbardhig hal hadal gudaha, LAN iyo VPN; ka akhri fulinta server-ka EXPLAIN ama pg_stat_statements; tiri wicitaannada ka hor iyo ka dib hal orod; oo fiiri dib-u-gudbinta inta natiijada weyn ay dhaqaaqayso. Tallaabo kastaa waxay ka reebtaa hal dhinac oo jidka ah. Midkoodna ma doonayo inaad qiyaasto qaybta dib loo bilaabayo.

Maqaallo la xiriira