Wíwọn àkókò psql nípasẹ̀ VPN: yíya ìdúró nẹ́tíwọ́kì kúrò nínú iṣẹ́ ìbéèrè
psql ń ròyìn nọ́mbà àkókò kan fún gbogbo gbólóhùn, nítorí náà VPN tí ó lọra ń mú kí ó pọ̀ sí i. Ya àkókò ìsopọ̀, ìmúṣẹ, gbígbé àti ìlọ-àbọ̀ kúrò ní ọ̀tọ̀ọ̀tọ̀ kí o tó ṣàtúnṣe ẹ̀gbẹ́kí.
Ìròyìn rẹ máa ń parí ní nǹkan bí ìṣẹ́jú àáyá kan lórí olùgbanà dátàbésì àti ní mẹ́rin nípasẹ̀ VPN, nọ́mbà tí psql ń tẹ̀jáde ń tọ́ka tààrà sí dátàbésì náà. Nọ́mbà yẹn jẹ́ aago ìdúró ní ẹ̀gbẹ́ ọ̀dọ̀ alákòóso, kì í ṣe ìwọ̀n olùpèsè. Ó ń bo gbólóhùn náà ní ọ̀nà jáde, ìdúró de ìdáhùn àti àwọn ìlà tí ń padà bọ̀. Pínpín àwọn mẹ́ta yìí ni ọ̀nà kan ṣoṣo láti mọ ẹ̀gbẹ́ tí a ó ṣàtúnṣe.
Kí ni aago psql ń wọ̀n ní tòótọ́
\timing on bẹ̀rẹ̀ aago ìdúró díẹ̀ kí alákòóso tó kọ gbólóhùn náà sínú sọ́kẹ́tì, ó sì dá a dúró nígbà tí a bá ti ka ìlà ìkẹyìn ti àbájáde yẹn. Ìmúṣẹ olùpèsè fúnra rẹ̀ wà ní ibòmíì nínú fèrèsé yẹn, àti gbogbo mílísẹ́kọ́ńdì tí àwọn pákẹ́ẹ̀tì ń lò nínú ọ̀nà abẹ́lẹ̀. Kò sí ohun kan nínú àbájáde tí ó ń yà wọ́n sọ́tọ̀. EXPLAIN pẹ̀lú ń tẹ̀jáde nọ́mbà, ṣùgbọ́n olùpèsè ni ó ń dá a, ó sì yọ ìdúró alákòóso kúrò. Nọ́mbà méjì, ìbéèrè méjì tí ó yàtọ̀.
Bẹ̀rẹ̀ ìpàdé kan, jẹ́ kí ìwọ̀n àkókò wà ní ṣíṣí, kí o sì ṣe gbólóhùn tí ó kàn ọ́ láti inú rẹ̀. Lílo ìpàdé lẹ́ẹ̀kan sí i ń pa ìnáwó ìsopọ̀ mọ́ ní òde ìwọ̀n àkọ́kọ́.
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';"Nọ́mbà náà ṣì ní gbígbé àbájáde kún un, ìyẹn ni ohun tí o fẹ́ níbí. Kò ní ìpààrọ̀ ìsopọ̀ àti ìjẹ́rìí tí ìpè tuntun yóò fi kún un mọ́.
Fi gbólóhùn kan wé ní ọ̀nà mẹ́ta
Ṣe gbólóhùn kan náà nípasẹ̀ sọ́kẹ́tì Unix, nípasẹ̀ àdírẹ́sì LAN àti nípasẹ̀ orúkọ olùgbanà VPN, kí o sì fi mẹ́tẹ̀ẹ̀ta wé. Bí ó bá jẹ́ pé ìkẹyìn nìkan ló lọra, ìbéèrè kì í ṣe àyípadà.
Gbogbo ìpè ń kọ́kọ́ sopọ̀, lẹ́yìn náà ni ó wọ̀n gbólóhùn náà, nítorí náà ìnáwó ìsopọ̀ wà ní òde nọ́mbà náà nígbà tí gbígbé wà ní inú. Pa gbólóhùn WHERE, iye ìlà àti ẹ̀rọ alákòóso mọ́ bíi ti ara wọn, bí bẹ́ẹ̀ kọ́ o ń fi ẹrù iṣẹ́ wé, kì í ṣe àwọn ọ̀nà.
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;"Lórí LAN ìyàtọ̀ sábà kéré tó láti fojú kọjá; nípasẹ̀ VPN kì í sábà rí bẹ́ẹ̀. Pípèsè àwọn àbájáde mẹ́ta lẹ́yìn náà yóò sọ fún ọ ìdúró wo ni kí o kọlu.
Sọ́kẹ́tì àdúgbò tí ó lọra túmọ̀ sí iṣẹ́ olùpèsè tàbí ìwéwèé. Àbájáde LAN tí ó lọra túmọ̀ sí ìbéèrè tàbí iye tí ó ń gbé. Àbájáde VPN nìkan tí ó lọra túmọ̀ sí ìdánudúró, MTU tàbí ẹ̀bùn ìlà tí ó wà lórí ọ̀nà, kò sì sí ìyípadà àtọ́ka tí ó ń tún un ṣe.
Mú àkókò ìmúṣẹ olùpèsè fúnra rẹ̀ jáde
Olùpèsè lè ròyìn àkókò tí ó lò, àti pé ìyẹn ni nọ́mbà tí a ó fi wé ti alákòóso. EXPLAIN pẹ̀lú ANALYZE ń ṣe gbólóhùn náà, ó sì ń tẹ̀jáde àkókò ìwéwèé àti ìmúṣẹ nínú ètò náà, nígbà tí BUFFERS ń fi ìhùwàsí káṣì kún un tí ó sábà ṣàlàyé ìsá gbígbóná lòdì sí tútù. Má ṣe darí rẹ̀ sí àwọn gbólóhùn kíkọ àyàfi bí o bá ní lọ́kàn láti kọ. Lórí ẹ̀dà kíkà nìkan ni ibi tí ó ní ààbò jù láti bẹ̀rẹ̀, àti ìwé ìtọ́kasí psql ń ṣàkọsílẹ̀ ìwọ̀n ẹ̀gbẹ́ alákòóso ti aago náà.
Fún àwọn gbólóhùn tí ohun èlò náà ti ń ṣe, pg_stat_statements ń kó ìmúṣẹ ẹ̀gbẹ́ olùpèsè jọ láì tún ohunkóhun ṣe. Àwọn ìlà wà fún ìbéèrè tí a ti mú dé ipò deede, nítorí náà àkọsílẹ̀ kan lè bo àwọn ibi ìpè púpọ̀.
select calls, round(mean_exec_time::numeric, 2) as mean_ms, rows
from pg_stat_statements
order by mean_exec_time desc
limit 5;Àwọn orúkọ ìwẹ̀ náà yàtọ̀ nípa ẹ̀dà: PostgreSQL 13 àti àwọn tí ó tẹ̀le ń fi mean_exec_time hàn, nígbà tí àwọn ẹ̀dà àtijọ́ ń pè é ní mean_time, nítorí náà yẹ̀wò pẹ̀lú \d pg_stat_statements bí ìbéèrè yẹn bá fún ọ ní àṣìṣe. Àwọn iye yìí yọ ìwéwèé kúrò, wọ́n sì yọ ìrìnàjò sí alákòóso rẹ kúrò. Ìyọkúrò yẹn gan-an ni ó mú kí wọ́n wúlò fún ìfiwéra.
Ka àwọn ìrìnàjò ìlọ-àbọ̀, kì í ṣe mílísẹ́kọ́ńdì nìkan
Ìròyìn tí a kọ́ láti inú igba gbólóhùn kékeré tí ó gbára lé ara wọn ń sọ ìdánudúró tí ọ̀nà bá fi kún un di igba. Gbólóhùn kan tí ó ń dá mílíọ̀nù ìlà padà ń san ìdánudúró yẹn lẹ́ẹ̀kan, lẹ́yìn náà ó ń san ẹ̀bùn ìlà fún àkókò pípẹ́. Àwọn méjèèjì ń hàn bíi ti ara wọn nínú aago alákòóso, wọ́n sì nílò àwọn àtúnṣe tí ó tako ara wọn.
Wọ̀n iye gbólóhùn dípò kí o fojú díwọ̀n rẹ̀. Ka àpapọ̀, ṣe ìròyìn náà lẹ́ẹ̀kan, lẹ́yìn náà kà á lẹ́ẹ̀kan sí i, kí o sì yọkúrò.
select sum(calls) as calls from pg_stat_statements;
-- run the report here
select sum(calls) as calls from pg_stat_statements;Bí delta bá tóbi, tí gbólóhùn kọ̀ọ̀kan sì pọ́n lórí olùpèsè, ìkójọ ni àtúnṣe tí ó ń san èrè. Darapọ̀ àwọn ìbéèrè tí ó gbára lé ara wọn, lo gbólóhùn kan tí ó dá lórí àkójọ, tàbí darí ìdì náà láti inú kọ́sọ̀. Nínú psql ìbáraẹnisọ̀rọ̀, \set FETCH_COUNT 1000 ń jẹ́ kí àbájáde ńlá wá ní àkójọ, ó sì ń yí ìhùwàsí gbígbé àti ìrántí alákòóso padà. Kò dín iṣẹ́ olùpèsè kù, nítorí náà kò ní gba ìbéèrè tí ó lọra là.
Yẹ̀wò ọ̀nà abẹ́lẹ̀ fún àtúnráńṣẹ́ àti ìdúró MTU
Nígbà tí àwọn gbólóhùn kékeré bá yára tí àwọn àbájáde ńlá sì dúró ní àárín ọ̀nà, ìbéèrè sábà wà dáadáa, ọ̀nà kò sí. Ọ̀nà abẹ́lẹ̀ tí MTU rẹ̀ kéré ju ọ̀nà ìsàlẹ̀ lọ, pẹ̀lú ICMP tí a dí, ń dá irú àpẹẹrẹ yẹn gan-an: àwọn pákẹ́ẹ̀tì àkọ́kọ́ ń dé, àwọn ńlá ń parẹ́, gbígbé sì ń ro kí ó tó gbìyànjú lẹ́ẹ̀kan sí i. Àwọn kíkà àtúnráńṣẹ́ ní ẹ̀gbẹ́ alákòóso ń fi ìyẹn hàn.
Wo sọ́kẹ́tì àti àwọn kíkà kérẹ́nẹ́lì nígbà tí gbígbé tí a mọ̀ọ́mọ̀ lọra ń lọ. Àpapọ̀ àtúnráńṣẹ́ jẹ́ àkójọpọ̀, nítorí náà kọ wọ́n sílẹ̀ ṣáájú àti lẹ́yìn dípò kíkà àpẹẹrẹ kan.
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Àtúnráńṣẹ́ tí ó ń ga sí i nígbà gbígbé, pẹ̀lú ping tí ó ṣàṣeyọrí ní 1400 báìtì ṣùgbọ́n tí ó kùnà ní 1472, ń tọ́ka sí ìṣòro MTU kì í ṣe ìṣòro dátàbésì. Sísọ MTU ti ojú ọ̀nà abẹ́lẹ̀ kalẹ̀ tàbí fífún MSS ní ẹnubodè ni àtúnṣe tí ó wọ́pọ̀, àwọn ìlà náà mẹ́ta ń jẹ́rìí rẹ̀ lẹ́yìn náà. Bí àtúnráńṣẹ́ bá wà ní pẹlẹbẹ nígbà tí gbígbé ṣì lọra, wo ẹ̀bùn ìlà tí a gbà fún ọ̀nà abẹ́lẹ̀ dípò ìsọnu.
Ìtẹ̀lé kúkúrú ń bo ìròyìn tí ó lọra tí ó tẹ̀le: fi gbólóhùn kan wé ní àdúgbò, lórí LAN àti nípasẹ̀ VPN; ka ìmúṣẹ olùpèsè láti EXPLAIN tàbí pg_stat_statements; ka àwọn ìpè ṣáájú àti lẹ́yìn ìsá kan; kí o sì wo àtúnráńṣẹ́ nígbà tí àbájáde ńlá ń rìn. Ìgbésẹ̀ kọ̀ọ̀kan yọ ẹ̀gbẹ́ kan ti ọ̀nà kúrò. Kò sí ọ̀kan nínú wọn tí ó béèrè pé kí o díwọ̀n ẹ̀yà wo ni kí o tún bẹ̀rẹ̀.