Ir-rapport tiegħek jintemm f’madwar sekonda fuq il-host tad-database u f’erbgħa fuq il-VPN, u n-numru li jistampa psql jindika dritt lejn id-database. Dak in-numru huwa stopwatch fuq in-naħa tal-klijent, mhux kejl tas-server. Ikopri d-dikjarazzjoni fit-triq ’il barra, l-istennija għal tweġiba u l-linji fit-triq lura. Is-separazzjoni ta’ dawn it-tlieta hija l-uniku mod kif tkun taf liema naħa għandek taġġusta.

X’jkejjel verament it-timer ta’ psql

\timing on jibda stopwatch ftit qabel ma l-klijent jikteb id-dikjarazzjoni fis-socket u jwaqqafha meta tkun inqrat l-aħħar linja ta’ dak ir-riżultat. L-eżekuzzjoni tas-server innifsu tinsab x’imkien f’dik it-tieqa, u hekk ukoll kull millisekonda li l-pakketti jqattgħu fil-mina. Xejn fl-output ma jifridhom. EXPLAIN ukoll jistampa numru, imma dak jipproduċih is-server u jeskludi l-istennija tal-klijent. Żewġ numri, żewġ mistoqsijiet differenti.

Ibda sessjoni waħda, ħalli l-kejl tal-ħin mixgħul u wettaq id-dikjarazzjoni li tinteressak minn ġo fiha. L-użu mill-ġdid ta’ sessjoni jżomm l-ispiża tal-konnessjoni barra mill-ewwel kejl.

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';"

In-numru għadu jinkludi t-trasferiment tar-riżultat, li huwa dak li trid hawn. M’għadux jinkludi l-iskambju tal-konnessjoni u l-awtentikazzjoni li żjieda ġdida żżid.

Qabbel dikjarazzjoni waħda fuq tliet toroq

Wettaq l-istess dikjarazzjoni mis-socket Unix, mill-indirizz LAN u mill-isem tal-host VPN, u qabbel it-tlieta. Jekk hija bil-mod biss l-aħħar waħda, il-mistoqsija mhix il-varjabbli.

Kull sejħa tikkonnettja l-ewwel u biss imbagħad tkejjel id-dikjarazzjoni, għalhekk l-ispiża tal-konnessjoni tibqa’ barra min-numru filwaqt li t-trasferiment jibqa’ ġewwa. Żomm il-klawżola WHERE, l-għadd tal-linji u l-magna tal-klijent identiċi, inkella tkun qed tqabbel tagħbijiet tax-xogħol u mhux toroq.

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;"

Fuq LAN id-differenza normalment hija żgħira biżżejjed biex tinjora; fuq VPN spiss mhijiex. L-ordni tat-tliet riżultati mbagħad tgħidlek liema stennija għandek tattakka.

Socket lokali bil-mod ifisser xogħol tas-server jew ippjanar. Riżultat LAN bil-mod ifisser il-mistoqsija jew il-volum li tmexxi. Riżultat VPN biss bil-mod ifisser latenza, MTU jew bandwidth disponibbli fit-triq, u l-ebda bidla fl-indiċi ma tissewwi dan.

Oħroġ il-ħin tal-eżekuzzjoni tas-server innifsu

Is-server jista’ jirrapporta kemm ħin qatta’, u dak in-numru huwa dak li għandu jitqabbel ma’ dak tal-klijent. EXPLAIN ma’ ANALYZE iwettaq id-dikjarazzjoni u jistampa l-ħin tal-ippjanar u l-eżekuzzjoni fil-pjan, filwaqt li BUFFERS iżid imġiba tal-cache li spiss tispjega ġirja sħuna kontra waħda kiesħa. Tħallihx fuq dikjarazzjonijiet tal-kitba sakemm ma tkunx beħsiebek tikteb. Fuq replika tal-qari biss huwa l-iktar post sigur biex tibda, u l-referenza ta’ psql tiddokumenta l-ambitu tat-timer fuq in-naħa tal-klijent.

Għad-dikjarazzjonijiet li l-applikazzjoni diġà twettaq, pg_stat_statements jiġbor l-eżekuzzjoni fuq in-naħa tas-server mingħajr ma jerġa’ jwettaq xejn. Il-linji huma għal kull mistoqsija normalizzata, għalhekk entrata waħda tista’ tkopri bosta postijiet ta’ sejħa.

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

L-ismijiet tal-kolonni jvarjaw skont il-verżjoni: PostgreSQL 13 u aktar tard juru mean_exec_time, filwaqt li verżjonijiet eqdem isejħulu mean_time, għalhekk iċċekkja b’\d pg_stat_statements jekk dik il-mistoqsija tagħti żball. Dawn il-valuri jeskludu l-ippjanar u jeskludu l-vjaġġ sal-klijent tiegħek. Proprju dik l-esklużjoni hija r-raġuni li huma utli għat-tqabbil.

Għodd il-vjaġġi mar-ritorn, mhux biss il-millisekondi

Rapport mibni minn mitejn dikjarazzjoni żgħar dipendenti jimmultiplika kwalunkwe latenza li żżid it-triq b’mitejn. Dikjarazzjoni waħda li tirritorna miljun linja tħallas dik il-latenza darba u mbagħad tħallas bandwidth għal żmien twil. It-tnejn jidhru l-istess fi timer tal-klijent, u jeħtieġu korrezzjonijiet opposti.

Kejjel l-għadd ta’ dikjarazzjonijiet minflok ma tistmah. Aqra t-total, wettaq ir-rapport darba, imbagħad aqrah mill-ġdid u naqqas.

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

Jekk id-delta hija kbira u kull dikjarazzjoni hija rħisa fuq is-server, il-batching hija l-korrezzjoni li tħallas. Għaqqad mistoqsijiet dipendenti, uża dikjarazzjoni waħda bbażata fuq settijiet jew ġib iċ-ċiklu minn cursor. Fil-psql interattiv, \set FETCH_COUNT 1000 riżultat kbir jasal f’lottijiet u jbiddel kif iġibu ruħhom it-trasferiment u l-memorja tal-klijent. Ma jnaqqasx ix-xogħol tas-server, għalhekk mhux se jsalva mistoqsija bil-mod.

Iċċekkja l-mina għal trażmissjonijiet mill-ġdid u waqfiet MTU

Meta d-dikjarazzjonijiet żgħar ikunu mgħaġġla u r-riżultati kbar jieqfu f’nofs it-triq, il-mistoqsija normalment tkun tajba u t-triq le. Mina li l-MTU tagħha huwa inqas mill-konnessjoni ta’ taħt, flimkien ma’ ICMP imblukkat, tipproduċi proprju dak il-mudell: l-ewwel pakketti jaslu, dawk kbar jisparixxu, u t-trasferiment jiddendel sakemm jerġa’ jipprova. Il-counter tal-trażmissjoni mill-ġdid fuq in-naħa tal-klijent juru dan.

Għasses is-socket u l-counters tal-kernel waqt li tkun għaddejja trasferiment bil-mod apposta. Is-somom tat-trażmissjoni mill-ġdid huma kumulattivi, għalhekk innotahom qabel u wara minflok ma taqra kampjun wieħed.

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

It-trażmissjonijiet mill-ġdid li jogħlew waqt it-trasferiment, flimkien ma’ ping li jirnexxi f’1400 byte imma jfalli f’1472, jindikaw problema ta’ MTU u mhux problema tad-database. L-inżul tal-MTU tal-interface tal-mina jew it-tidjiq tal-MSS fil-gateway hija l-korrezzjoni tas-soltu, u l-istess tliet kmandi jikkonfermawha wara. Jekk it-trażmissjonijiet mill-ġdid jibqgħu ċatti filwaqt li t-trasferiment għadu bil-mod, ħares lejn il-bandwidth permessa lill-mina u mhux lejn it-telf.

Sekwenza qasira tkopri r-rapport bil-mod li jmiss: qabbel dikjarazzjoni waħda lokalment, fuq il-LAN u fuq il-VPN; aqra l-eżekuzzjoni tas-server minn EXPLAIN jew pg_stat_statements; għodd is-sejħiet qabel u wara ġirja waħda; u għasses it-trażmissjonijiet mill-ġdid waqt li r-riżultat kbir jiċċaqlaq. Kull pass jeskludi naħa waħda tat-triq. Xejn minnhom ma jeħtieġ li taqta’ x’inhu l-komponent li għandu jerġa’ jinbeda.

Artikli relatati