Profunda dive in PostgreSQL internam mutant. Alexey Lesovsky

Transumptum de Alexey Lesovsky scriptor 2015 relationis "Infimus dive in PostgreSQL interna statistica"

Disclaimer from the author of the relation: Animadverto hanc relationem esse datam Novembris 2015 - plus quam 4 annos elapsos esse ac multum temporis praeterisse. Versio 9.4 in relatione tractata non diutius sustinetur. Praeteritis 4 annis, 5 novae emissiones dimissi sunt in quibus multae innovationes, emendationes et mutationes circa statisticam sunt, et quaedam materia exstinguitur et non pertinet. Haec loca recensens notare conatus sum ne lectorem seducat. His ego locis non multum exscribit, et evenit prorsus alia fama.

PostgreSQL DBMS ingens mechanismus est, et haec mechanismus ex multis subsystematibus constat, cuius operatio ordinata directe ad DBMS exsecutionem pertinet. Durante operatione, statistica et informatione de operatione partium colliguntur, quae te permittit ut efficaciam PostgreSQL aestimare et satagat ad meliores effectus. Multum tamen est huius informationis et satis simpliciorem formam praebetur. Haec informationes processus et interpretatio est interdum munus omnino non leve, ac "ferarum" instrumentorum et utilitatum facile confundere potest etiam progressus DBA.
Profunda dive in PostgreSQL internam mutant. Alexey Lesovsky


Bona dies Nomen meum Aleksey est. Ut Ilya dixit, ego loqui de PostgreSQL mutant.

Profunda dive in PostgreSQL internam mutant. Alexey Lesovsky

PostgreSQL actio mutant. PostgreSQL duo mutant. Actio statistica quae dicetur. Ac statistica schedula de data distributione. Dicam speciatim de statisticis PostgreSQL actuositatis, quae sinunt nos iudicare de effectu et aliquo modo emendare.

Dicam tibi quomodo efficaciter utaris statistica ad solvendas varietates problematum quas habes vel habere potest.

Profunda dive in PostgreSQL internam mutant. Alexey Lesovsky

Quid in fama non erit? In relatione statistica scheduler non attingam, quia... Hic locus separatus est ob relationem separatam quomodo notitia in datorum reposita est et quomodo investigatio consiliumque notionem accipit notionum qualitativarum et quantitativarum huius notitiae.

Et nulla instrumenta recognitiones erunt, unum productum alteri non comparabo. Nullam non aliquam nulla. Abeamus hoc.

Profunda dive in PostgreSQL internam mutant. Alexey Lesovsky

Cupio tibi ostendere utens statistica utilis sit. Necesse est. Tutum est uti. Omnes opus est regularis SQL ac basic notitia SQL.

Et fama de rebus statisticis eligere ut quaestiones explicet.

Profunda dive in PostgreSQL internam mutant. Alexey Lesovsky

Si PostgreSQL inspiciamus et mandatum in systemate operante ad processum videndum curram, "arcam nigram" videbimus. Videbimus aliquos processus qui aliquid agant, et ex nomine dure possumus fingere quid ibi agant, quid agant. Essentialiter sed arca nigra est, intus aspicere non possumus.

Possumus videre CPU onus in top, usus per aliquas utilitates systematis memoriae inspicere possumus, sed intra PostgreSQL inspicere non poterimus. Ad hoc opus est aliis instrumentis.

Profunda dive in PostgreSQL internam mutant. Alexey Lesovsky

Et ulterius perdurantes, dicam vobis ubi tempus consumitur. Si imaginamur PostgreSQL in forma talis schematis, tunc respondere possumus ubi tempus absumitur. Haec duo sunt: ​​clientem petit ab applicationibus et negotiorum curriculi dispensando quae PostgreSQL permittit ut se currendo contineat.

Si incipimus spectare ad summum angulum sinistrum, videre possumus quomodo petitiones clientium discursum sint. Petitio venit ab applicatione et sessione clientis ad ulteriora opera aperitur. Postulatio ad schedulam mittitur. Schedularius consilium quaesitum aedificat. Mittit porro ad supplicium. Est quaedam notitia scandali initus/output cum tabulis et indicibus consociata. Data necessaria legentur ex orbis in memoriam in area speciale "buffiffis communes". Exitus petitionis, si updates sunt, deleta sunt in transactionis log in WAL. Quaedam statistica notitia desinit in stipes aut statistica collector. Et ex petitione remittitur in clientelam. Post quem cliens nova petitione omnia denuo repetere potest.

Quid de background officia et background processibus? Plures habemus processus qui custodiunt datorum sursum et currentium in mode operandi normali. Hi processus etiam in relatione tangentur: autovacuum, checkpointer, processuum replicationis relatarum, scriptor background. Tangam singula ut refero.

Profunda dive in PostgreSQL internam mutant. Alexey Lesovsky

Quae problemata cum mutant?

  • Nulla mattis consequat auctor. PostgreSQL 9.4 109 metrica praebet ad informationem statisticam spectandam. Attamen si datorum multas tabulas, schemata, databases reponit, omnia haec metrica multiplicari debebunt per congruentem numerum tabularum, databases. Etiam id est nec dui. Et facillime in ea mergi.
  • Proxima problema est quod statistica calculis repraesentatur. Si has statisticas spectemus, calculis continenter crescentibus videbimus. Et si multum temporis transiit cum statistica reset, valores in billions videbimus. Et non dicunt nobis.
  • Fabula nulla. Si defectum aliquem haberes, aliquid ante 15-30 minutas incidit, non poteris statisticis uti et videre quod abhinc 15-30 momentis accidit. Hoc problema est.
  • Defectus instrumenti in PostgreSQL constructo quaestio est. Tincidunt nucleus nullam utilitatis praebent. Nihil tale habent. Illi simpliciter praebent statisticam in datorum datorum. Utere, roga, fac quod vis.
  • Cum nullum instrumentum in PostgreSQL aedificatum sit, aliam quaestionem causat. Sortes instrumenta partium tertiae. Omnis societas quae manus directas plus minusve habet, programmata propria scribere conatur. Et consequenter, communitas multum habet instrumenta quae ad operandum mutant. Instrumenta quaedam et aliquas facultates habent, alia instrumenta non habent alias facultates, vel aliquas facultates novas. Ac condicio oritur ut duobus, tribus vel quatuor instrumentis uti debes, quae se mutuo constringunt et munera diversa habent. Hoc est valde ingratum.

Profunda dive in PostgreSQL internam mutant. Alexey Lesovsky

Quid inde sequitur? Magni interest ut statistica directe capere possit, ut a programmata non dependeat, vel aliquo modo te ipsum melioret: nonnulla munera addas ut beneficium tuum accipias.

Et debes basic notitia SQL. Ut aliqua notitia ex statisticis, SQL queries creare debes, i.e. scire debes quomodo selecta et iungenda sint compilata.

Profunda dive in PostgreSQL internam mutant. Alexey Lesovsky

Statistics plura nobis narrant. Dividi possunt in genera.

  • Prima categoria est eventorum in database. Hoc evenit cum aliquis eventus datorum occurrit: postulatio, accessus ad mensam, autovacuum committit, tunc haec sunt omnia. Calculis his congruentibus incrementa sunt. Et harum rerum indagare possimus.
  • Secundum genus est proprietates obiectorum, ut tabulae et databases. possessiones habent. Tabularum magnitudo haec est. Augmentum tabularum et incrementum indices indagare possumus. Mutationes in dynamicis videre possumus.
  • Tertium genus est tempus ab eventu. Exhibita res est. Habet propriam mensuram durationis. Hic incepit, hic finivit. Vestigare possumus. Aut tempus suscipit ut truncum ex orbe legere aut scribere. Talia perscrutata sunt etiam.

Profunda dive in PostgreSQL internam mutant. Alexey Lesovsky

Fontes statistica sistuntur haec:

  • In memoria communi (buffis communibus) segmentum est ad rerum staticarum reponendas notitias, sunt etiam calculi, qui constanter incrementa capiunt cum certa eventa occurrunt, vel momenta quaedam in operatione datorum oriuntur.
  • Omnia haec calculi non sunt pervia utenti nec administratori ne pervia. Haec sunt humiles res. Ad eos accedere, PostgreSQL interfaciem praebet in forma functionum SQL. Facere possumus electos iactus his munerum utentes et quaedam metrica (vel metri copia).
  • Attamen his muneribus utendo non semper opportunum est, ita functiones fundamentum sententiarum (VIEWs). Hae sunt virtuales tabulae quae statisticam sub systemate specifico, vel in certo eventuum datorum statuto praebent.
  • Hae sententiae infixae (VIEWs) sunt primariae usoris interfacies ad operandum cum mutant. Praesto sunt per defaltam sine ullis uncinis additis, statim uti potes, eas inspice, et ab eis cognosces. Et tunc sunt contritiones. Contribus officialibus. Involucrum postgresql-contrib instituere potes (exempli gratia, postgresql94-contrib), moduli debiti in configuratione onerant, parametri specificare pro ea, sileo PostgreSQL et eo uti potes. (Nota. Secundum distributionem in recentioribus versionibus sarcina contriba est pars sarcinae principalis).
  • et sunt priyatae contrib. Non includuntur in distributione vexillum PostgreSQL. Debent vel componi vel in bibliothecam institui. Optiones valde diversae esse possunt, secundum quod elaborationis huius officialis huius operae accessit cum .

Profunda dive in PostgreSQL internam mutant. Alexey Lesovsky

Haec lapsus praesentat omnia illa VIEWs et quaedam functionum quae praesto sunt in PostgreSQL 9.4. Ut enim videmus, earum multum sunt. Et satis facile est, si primum offendas, confundi.

Profunda dive in PostgreSQL internam mutant. Alexey Lesovsky

Sed si priorem picturam sumamus Как тратится врСмя Π½Π° PostgreSQL et compatible cum hoc indice, hanc imaginem consequimur. Uterque visu (VIEWs) uti possumus vel singulas functiones unius consilii vel alterius ad obtinendum statisticas respondentes cum PostgreSQL currit. Et iam quaedam de operatione subsystematis accipere possumus.

Profunda dive in PostgreSQL internam mutant. Alexey Lesovsky

Primum illud videbimus is pg_stat_database. Ut patet, haec est actio. Nulla sit amet consequat est. Vestibulum varius consequat auctor. Et dat notitiam perutilem eorum quae in nostris datorum aguntur.

Quae utilia inde auferemus? De rebus simplicissimis initium sit.

Profunda dive in PostgreSQL internam mutant. Alexey Lesovsky

select
sum(blks_hit)*100/sum(blks_hit+blks_read) as hit_ratio
from pg_stat_database;

Primum quod intueri possumus est recipis hit cache. Cache hit rate utilis metrica est. Permittit te aestimare quantum notitia ex cache communibus buffers sumpta et quantum ex disco legatur.

Suus ' quanto plus cache hits habemus, eo melius. Metimur hanc metricam pro cento. Et, exempli gratia, si nostri recipis horum cache hits plus quam 90% est, hoc bonum est. Si infra 90% defluit, significat non satis habere memoriam ut in memoria data sit calidum caput tenere. Et ut hac notitia utar, PostgreSQL accedere cogatur orbis et hoc tardior est quam si notitia e memoria legeretur. Et debes cogitare de augenda memoria: vel augere quiddam commune, vel augere memoriam ferramentorum (RAM).

Profunda dive in PostgreSQL internam mutant. Alexey Lesovsky

select
datname,
(xact_commit*100)/(xact_commit+xact_rollback) as c_ratio,
deadlocks, conflicts,
temp_file, pg_size_pretty(temp_bytes) as temp_size
from pg_stat_database;

Quid ab hac re aliud sumis? Videre potes anomalias in database. Quid hic ostenditur? Committit, reverti, creatio imaginum temporalium, eorum magnitudo, deadlocks et conflictus.

Hanc petitionem uti possumus. Hoc SQL satis simplex est. Et haec notitia hic intueri possumus.

Profunda dive in PostgreSQL internam mutant. Alexey Lesovsky

Et hic sunt limina bonorum. Respicimus commissorum et umbilicum rationem. Committit est felix confirmatio rei gestae. Rollbacks sunt reverti, i.e., negotium aliquod opus fecit, eliquatum datorum, calculi aliquid, ac deinde defectus incidit et eventus transactionis depelluntur. Ille est Malum est numerus volventium continenter crescens. Et eas aliquo modo vitare debes, et codicem edite ut hoc non fiat.

Certamina replicatione comparantur. Repellendus et sint et. Si habes aliquas queries quae in replica fiunt et conflictus oriuntur, tunc debes has pugnas exquirere et videre quid agatur. Singula in lignis inveniri possunt. Et condiciones conflictus tolle, ut applicationes petitionum sine erroribus operantur.

Deadlocks quoque res malae sunt. Cum petitiones pro facultatibus pugnant, una postulatio accessit una subsidia et seram sumpsit, altera petitio secundae subsidii accessit et etiam seram accepit, et tunc utraque petitio accesserunt mutuo opes et obstitit dum expectans proximum seram dimittere. Haec quoque condicio problematica est. Necesse est ut in ambitu rescribendi applicationes et accessus ad facultates serialisandi. Et si videas deadlocks tuos continue augeri, singula in lignis intueri debes, condiciones quae oriuntur analysi et vide quid rei sit.

Documenta temporalia (temp_files) mala quoque sunt. Cum usoris petitio memoriam satis non habet ad notitias operationales, temporarias accommodandas, fasciculum in orbe creat. Omnesque operationes quas temporale quiddam in memoria efficere potuit in disco peragi incipiunt. Tarda est. Hoc tempus auget interrogationis exsecutionis. Et cliens qui postulavit ad PostgreSQL responsum paulo post accipiet. Si omnes hae operationes in memoria aguntur, Postgres multo citius respondebit et client minus exspectabit.

Profunda dive in PostgreSQL internam mutant. Alexey Lesovsky

Pg_stat_bgwriter - Haec sententia describit operationem duorum PostgreSQL background subsystems: hoc checkpointer ΠΈ background writer.

Profunda dive in PostgreSQL internam mutant. Alexey Lesovsky

Primum videamus de potestate puncta sic dicta. checkpoints. Quae sunt puncta potestate? LAPIS positio est in transactione iniuriarum significans omnes notitias mutationes in ligno scriptas feliciter congruere cum notitia in disco. Processus, secundum quod inposuit et occasus, longus esse potest et plerumque constat ex sordidis paginis synchronising in communibus buffers cum fasciculis in disco. Quid est hoc? Si PostgreSQL in accessu orbis assidue erat et inde notitias ferebat, et notitias scribebat in singulis accessibus, tardum esset. Ergo PostgreSQL segmentum memoriae habet cuius magnitudo ab occasus in configuratione dependet. Postgressores thesauri in hac memoria vivant notitias postea processus vel interrogationes. In causa petitionum data mutandi, mutatur. Et dabimus duas versiones notitiarum. Alter in memoria est, alter in orbe est. Et intervenit synchronize notitia huius opus. Opus est synchronise id quod in memoriam orbis mutatur. Ad hoc opus checkpoints.

Checkpoint percurrit quiddam commune, notas sordidas paginas quae ad LAPIS necessaria sunt. Alterum deinde per quiddam communicatum movet. Et paginae quae ad LAPIS designatae sunt, eas iam conformat. Hoc modo notitia cum orbis conformatur.

Duo sunt genera checkpoints. Una LAPIS fit cum timeout. Hoc LAPIS est utile et bonum - checkpoint_timed. Et sunt checkpoints in demanda - checkpoint required. Hoc LAPIS occurrit cum amplissimas notitias habemus. Multam transactionis acta memoriae sumus. Et PostgreSQL credit opus esse omnia haec quam celerrime synchronizare, scopo facere et movere in.

Et si videris mutant pg_stat_bgwriter et vidi quod habes checkpoint_req multo maior est quam checkpoint_timed, ergo hoc malum est. Cur malum? Hoc significat PostgreSQL sub accentus constantem esse cum notitias orbis scribendas esse oportet. LAPIS TEMPORIS LAPIS minus stressful est et secundum schedulam internam perficitur et quasi per tempus dilatatur. PostgreSQL facultatem habet laborem morandi et subsystem disci non intendere. Hoc est utile ad PostgreSQL. Et queries quae in LAPIS exsecutioni sunt, accentus non experientur ex eo quod orbis subsystem occupatum est.

Et LAPIS accommodandi sunt tres parametri;

  • сheckpoint_segments.

  • сheckpoint_timeout.

  • сheckpoint_competion_target.

Operationem moderandi puncta moderari permittunt. At ego in illis non habito. Eorum auctoritas locus separatus est.

monitio: Versio 9.4 in relatione tractata non iam ad propositum pertinet. In versionibus recentioribus parametri PostgreSQL checkpoint_segments locum parametri min_wal_size ΠΈ max_wal_size.

Profunda dive in PostgreSQL internam mutant. Alexey Lesovsky

Proximus subsystem scriptor background est background writer. Quid agit? Perpetuo sine fine currit ansa. Paginas lustrat in paginis communibus buffers et avolat sordida pagina quae disco invenit. Sic LAPIS LAPIS adiuvat ut minus laboris in LAPIS executionem faciat.

Quid aliud opus est? Necessitas praebet paginas blank in buffers communibus, si subito requiruntur (magne et statim) ad datam accommodandam. Si res exorta est, cum paginae paginae postularentur ut impleretur et iam in buffers communibus essent. Postgresive backend illos tantum carpit et utitur, nihil se purgare debet. Sed si subito nullae tales paginae sunt, posteriori intermittit opus et incipit paginas quaerere ut eas effundat in orbem et eas propter suas necessitates capiat - quae negative afficiunt tempus instantiae instantiae exequentis. Si vidisti quod parametri maxwritten_clean magna, hoc significat quod scriptor curriculi officium suum non facit et debes parametros augere bgwriter_lru_maxpagesita ut in uno cyclo plus operari possit, paginis clarioribus.

Et alius index valde utilis est buffers_backend_fsync. Backends non fsync quia tarda est. Praetereunt fsync usque IO BIBLIOTHECA LAPIS. LAPIS QUEUM suum habet, intervenit fsync et componit paginas in memoria cum lima in disco. Si magna et plena queue in LAPIS, tergum fsync ipsum facere cogitur, et hoc opus retardat tergum., i.e. postea responsio recipiet quam potuit. Si vides valorem tuum maius esse quam nihilum, iam haec quaestio est debes attendere ad curricula scriptoris occasus ac etiam perpendas observantiam orbis subsystem.

Profunda dive in PostgreSQL internam mutant. Alexey Lesovsky

monitio: _The following text describes the statistical views associated cum replicatione. Pleraque intuitu et functionis nomina in Postgres nominata sunt 10. Essentia renaming erat reponere xlog on wal ΠΈ location on lsn in function/visu nomina, etc. Praecipuum exemplum, munus pg_xlog_location_diff() fuit renamed to pg_wal_lsn_diff()._

Multum hic habemus etiam. Sed solum opus ad locum pertinentibus.

Profunda dive in PostgreSQL internam mutant. Alexey Lesovsky

Si videmus omnes valores aequales esse, haec optio idealis est et imago post dominum non cessat.

Hie hexadecimalis positio in transactione leg. Constanter auget si qua est actio in datorum datorum: insertis, deletis, etc.

Profunda dive in PostgreSQL internam mutant. Alexey Lesovsky

сколько записано xlog Π² Π±Π°ΠΉΡ‚Π°Ρ…
$ select
pg_xlog_location_diff(pg_current_xlog_location(),'0/00000000');
Π»Π°Π³ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π² Π±Π°ΠΉΡ‚Π°Ρ…
$ select
client_addr,
pg_xlog_location_diff(pg_current_xlog_location(), replay_location)
from pg_stat_replication;
Π»Π°Π³ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π² сСкундах
$ select
extract(epoch from now() - pg_last_xact_replay_timestamp());

Haec si alia sunt, est pigrinum genus. Laguna est pigra inter imaginem et dominum, i.e. notitia inter servos differt.

Tres sunt rationes pigri:

  • Hoc subsystem orbis subsystem cum litteris fasciculi synchronisationi non potest.
  • Hi possibilis sunt errores retis, vel retiacula oneraria, cum tempus data non habet ut ad imaginem perveniret et illud effingere non potest.
  • Ac processus. Processus rarissimus casus est. Et hoc bis vel ter vidi, sed hoc etiam fieri potest.

Et hic sunt tres interrogationes quae nos permittunt uti mutant. Aestimare possumus quantum in ligno transactionis notavimus. Est tale munus pg_xlog_location_diff et replicationem pigri in bytes et secundis aestimare possumus. Etiam valorem ex hac sententia pro hoc utimur.

Note: _In loco pg_xlog_locationDiff() functiones uti possunt detractione operante et unum locum ab alio subtrahere. Solatium.

Unum punctum cum pigricia, quod est in secundis. Si nulla actio in domino est, transactio ibi circiter quindecim minutas antecessit et nulla actio est, et si huius pigri imaginem inspicimus, laganum 15 minutorum videbimus. Hoc memorabile est. Et hoc potest confundere cum laganum hunc spectas.

Profunda dive in PostgreSQL internam mutant. Alexey Lesovsky

Pg_stat_all_tables altera sententia utilis est. statistica in tabulis ostendit. Cum tabulas habemus in datorum, est aliqua actio cum illa, quaedam actiones, ex hac sententia hanc informationem accipere possumus.

Profunda dive in PostgreSQL internam mutant. Alexey Lesovsky

select
relname,
pg_size_pretty(pg_relation_size(relname::regclass)) as size,
seq_scan, seq_tup_read,
seq_scan / seq_tup_read as seq_tup_avg
from pg_stat_user_tables
where seq_tup_read > 0 order by 3,4 desc limit 5;

Primum quod intueri possumus est sequentem per mensam lustrat. Ipse numerus post hos transitum malum necessario est et non denotat nos aliquid faciendum.

Est tamen secunda metrica - seq_tup_read. Hic numerus versuum e scan consequentibus rediit. Si numerus mediocris 1, 000, 10, 000 excedat, hoc iam denotat, fortassis indicem alicubi aedificare debes ut indicem quaeruntur innitantur, vel quaestionibus optimize fieri potest, qui talibus lustralibus sequentialibus utatur. quod non accidit.

Simplex exemplum - petitionem dicamus cum magnis INCENDIUM et TERMINO gratuita. Exempli gratia, 100 ordines in tabula lustrantur et postea 000 ordines requiruntur, et priores ordines lustrati rejiciuntur. Hic quoque casus malus est. Ut pellentesque eget est sit amet malesuada. Et hic simplex SQL quaesitum est ubi hoc intueri potes et numeros consequentes aestimare.

Profunda dive in PostgreSQL internam mutant. Alexey Lesovsky

select
relname,
pg_size_pretty(pg_total_relation_size(relname::regclass)) as
full_size,
pg_size_pretty(pg_relation_size(relname::regclass)) as
table_size,
pg_size_pretty(pg_total_relation_size(relname::regclass) -
pg_relation_size(relname::regclass)) as index_size
from pg_stat_user_tables
order by pg_total_relation_size(relname::regclass) desc limit 10;

Tabulae magnitudinum etiam obtineri possunt hac mensa utens et muneribus adiectis utens pg_total_relation_size(), pg_relation_size().

In genere sunt mandata dt ΠΈ diquae adhiberi possunt in PSQL ac etiam mensuras tabularum et indices considerant.

Tamen functionibus adhibitis nos adiuvat intueri mensuras tabularum, etiam inspectis indicibus, vel neglectis indicibus, et iam aliquas aestimationes facere secundum datorum incrementum, quomodo crescat, quo studio, i.e. aliquam conclusionem de inspectione ipsum.

Profunda dive in PostgreSQL internam mutant. Alexey Lesovsky

Actio memoria. Quid est memoria? Intueamur ad operationem UPDATE - operatio ordines adaequationis in mensa. Re quidem vera renovatio duae operationes sunt (vel etiam plures). Hic novam versionem in versu inserens et veterem versionem obsoletam versu notans. Postmodum autovacuum veniet et emundet has versiones iam receptas linearum, hunc locum ut reuse praesto notet.

Praeterea renovatio non solum ad mensam adaequationis est. Haec renovatio etiam index est. Si plures indices in mensa habes, tum in renovatione omnes indices qui in quaestionibus renovatis agros includunt, renovari etiam necesse est. Hi indices etiam versiones versuum vetustas habebunt quae purgatione opus erit.

Profunda dive in PostgreSQL internam mutant. Alexey Lesovsky

select
s.relname,
pg_size_pretty(pg_relation_size(relid)),
coalesce(n_tup_ins,0) + 2 * coalesce(n_tup_upd,0) -
coalesce(n_tup_hot_upd,0) + coalesce(n_tup_del,0) AS total_writes,
(coalesce(n_tup_hot_upd,0)::float * 100 / (case when n_tup_upd > 0
then n_tup_upd else 1 end)::float)::numeric(10,2) AS hot_rate,
(select v[1] FROM regexp_matches(reloptions::text,E'fillfactor=(\d+)') as
r(v) limit 1) AS fillfactor
from pg_stat_all_tables s
join pg_class c ON c.oid=relid
order by total_writes desc limit 50;

Et ex novo consilio, UPDATE operatio gravis ponderis est. Sed facilius. Eat hot updates. Visi sunt in versione PostgreSQL 8.3. Et quid est hoc? Haec renovatio levis est quae indices reaedificandi non facit. Hoc est, recordum renovavimus, sed tantum in pagina (quod ad tabulam pertinet) renovatum est, et indices adhuc in pagina idem testimonium designant. Aliquantulus logicae interesting operantis est: cum vacuum venit, catenas istas gignit hot aedificat omniaque sine adaequatione indicibus laborat, omniaque cum minore rerum copia fiunt.

Et tu n_tup_hot_upd magna, ipsum bonum est. Hoc significat leve pondus updates praedominare et hoc nobis vilius est secundum facultates et omnia denique bona.

Profunda dive in PostgreSQL internam mutant. Alexey Lesovsky

ALTER TABLE table_name SET (fillfactor = 70);

Quomodo augere volumen hot updateov? Uti possumus fillfactor. Magnitudinem spatii liberae reservati determinat, cum paginam in mensa insertis utens implens. Cum inserta adduntur tabulae, paginam complent et nullum vacuum relinquunt. Inde nova pagina illustratur. Notitia iterum impletur. Et hic est modus agendi, fillfactor = 100%.

Facere possumus fillfactorem 70%. Hoc est, inter insertas, nova pagina extulit, sed solum 70% pagina repleta est. Et habemus 30% pro subsidio relictum. Cum renovationem facere debes, in eadem pagina verisimillimum erit, et in eadem pagina nova versio lineae aptabitur. Et hot_update voluntas tua. Eo facilius in tabulis scribere.

Profunda dive in PostgreSQL internam mutant. Alexey Lesovsky

select c.relname,
current_setting('autovacuum_vacuum_threshold') as av_base_thresh,
current_setting('autovacuum_vacuum_scale_factor') as av_scale_factor,
(current_setting('autovacuum_vacuum_threshold')::int +
(current_setting('autovacuum_vacuum_scale_factor')::float * c.reltuples))
as av_thresh,
s.n_dead_tup
from pg_stat_user_tables s join pg_class c ON s.relname = c.relname
where s.n_dead_tup > (current_setting('autovacuum_vacuum_threshold')::int
+ (current_setting('autovacuum_vacuum_scale_factor')::float * c.reltuples));

Autovacuum queue. Autovacuum subsystem est cuius perpaucae sunt statisticae in PostgreSQL. Tantum videre possumus in tabulis in pg_stat_activity quot vacuums habemus in momento. Sed difficillimum est intelligere quot tabulae statim in queue.

Note: _Satus cum Postgres X, res cum Vatovac semita valde invaluit - visum apparuit pg_stat_progress.vacuum, quod signanter simpliciorem reddit vacuum currum vigilantiae.

Hac interrogatione simpliciore uti possumus. Et videbimus quando vacuum habe- batur. Sed quomodo et quando incipiet vacuum? Hae versiones legatariae linearum, de quibus antea dixi, sunt. Renovatio facta est, nova versio in linea inserta est. Iamnonis versio chordae apparuit. In mensa pg_stat_user_tables talis est parametri n_dead_tup. Numerum linearum "mortuorum" indicat. Statimque numerus ordinum mortuorum maior fit quam limen certum, autovacuum ad mensam perveniet.

Et quomodo hoc limen iniri? Haec est valde certa recipis totius ordinis in tabula. Est parametri autovacuum_vacuum_scale_factor. Recipis decernit. Dicamus 10% + additam esse limen fundamentale 50 linearum. Et quid fit? Cum plures ordines mortui habemus quam omnium ordinum in mensa "10% + 50", tunc mensam in autovacuum ponimus.

Profunda dive in PostgreSQL internam mutant. Alexey Lesovsky

select c.relname,
current_setting('autovacuum_vacuum_threshold') as av_base_thresh,
current_setting('autovacuum_vacuum_scale_factor') as av_scale_factor,
(current_setting('autovacuum_vacuum_threshold')::int +
(current_setting('autovacuum_vacuum_scale_factor')::float * c.reltuples))
as av_thresh,
s.n_dead_tup
from pg_stat_user_tables s join pg_class c ON s.relname = c.relname
where s.n_dead_tup > (current_setting('autovacuum_vacuum_threshold')::int
+ (current_setting('autovacuum_vacuum_scale_factor')::float * c.reltuples));

Sed unum est. Basic limina parametri av_base_thresh ΠΈ av_scale_factor singillatim assignari potest. Itaque limen non erit global, sed singuli mensae. Ergo ut calculare, praestigiis et praestigiis uti debes. Et si interest, experientiam collegarum ab Avito inspicere potes (coniunctio in lapsu invalida est et in textu renovata est).

Scripserunt for munin pluginqui haec ratione. Duo linteamen illic est. Sed recte et satis efficaciter computat nos perpendere ubi multum opus est vacuum pro tabulis ubi parum est.

Quid de hoc facere possumus? Si magnum queue et autovacuum magnum habere non possumus, tunc numerum vacui opificum augere possumus vel simpliciter vacuum ferociorem facere.ita, ut prius, mensa minutatim procedit. Et ita decrescet queue. - Summa hic est ad monitor orbis onus, quia ... vacuum non est rem liberam, quamvis adveniente SSD/NVMe machinis quaestio minus notabilis facta est.

Profunda dive in PostgreSQL internam mutant. Alexey Lesovsky

Pg_stat_all_index est statistica in indicibus. Nulla id magna est. Atque ea uti possumus in indice rerum usu habere. Et exempli causa determinare possumus quos indices extra habemus.

Profunda dive in PostgreSQL internam mutant. Alexey Lesovsky

Ut iam dixi, renovatio non solum renovatio tabularum, sed etiam renovatio indices. Proinde, si plures indices in tabula habemus, tum cum ordines in tabula adaequationis, indices agrorum inscriptorum etiam renovari oportet, atque. si indices insuetos habebimus, quibus inspectis non sunt indices, pendent adprehensis. Et carere oportet. Hoc enim agro opus est idx_scan. Simpliciter spectamus numerum indices lustrationum. Si indices nullas lustrationes habent per longum tempus repositionis statisticae (saltem 2-3 septimanas), tunc verisimillimum sunt hi indices mali, necesse est eas removere.

Note: Cum indices insuetos quaerentes in replicationibus racemis fluentibus, necesse est omnes nodos botri cohibere, quia statistica globalia non sunt, et si index non in domino usus est, tunc in replicas (si onus adsit).

Duo nexus:

https://github.com/dataegret/pg-utils/blob/master/sql/low_used_indexes.sql

http://www.databasesoup.com/2014/05/new-finding-unused-indexes-query.html

Haec exempla interrogationis gravioris sunt quam ut indices insuetos suspicemur.

Secunda ligatio postulatio magis interesting est. Est logica admodum non levis. Commendare enim referat.

Profunda dive in PostgreSQL internam mutant. Alexey Lesovsky

Quid aliud dignum est indices colligere?

  • Indices insolens mali sunt.

  • Spatium capiunt.

  • Tardus renovatio operationes.

  • Extra opus vacuum.

Si indices insuetos removemus, tantum datorum melius facimus.

Profunda dive in PostgreSQL internam mutant. Alexey Lesovsky

Proximus propositio est pg_stat_activity. Hoc est analogon utilitatis pstantum in PostgreSQL. Si ps'om processuum spectes in systemate operante, deinde pg_stat_activity Ostendet tibi actionem intus PostgreSQL.

Quae utilia inde auferemus?

Profunda dive in PostgreSQL internam mutant. Alexey Lesovsky

select
count(*)*100/(select current_setting('max_connections')::int)
from pg_stat_activity;

Videre possumus generalem activitatem, quae in database aguntur. Novam instruere possumus. Omnia hic explosa, novae coniunctiones non recipiuntur, errores in applicationem infundunt.

Profunda dive in PostgreSQL internam mutant. Alexey Lesovsky

select
client_addr, usename, datname, count(*)
from pg_stat_activity group by 1,2,3 order by 4 desc;

Quaesitum est sic currere et videre totum recipis nexus relativum ad maximum iunctio limitem et videre qui maxime nexus habet. Et in hoc casu usore dato perspicimus cron_role DVIII hospites aperuit. Et factum est ei ibi. Non opus est nobis agere et intueri. Et satis fieri potest quod hic sit aliquis numerus coniunctionum anomalorum.

Profunda dive in PostgreSQL internam mutant. Alexey Lesovsky

Si inposuit inposuit OLTP, quaesitio debet esse ieiuna, celerrima et non diu quaesita. Sed si queries longas oriatur, tunc in termino brevi nihil est quod cures, sed In longo spatio, diu quaesitae datorum laedunt, effectum tabularum bloate augent cum fit fragmentum mensae. Ambas bloas et longas interrogationes depellere debes.

Profunda dive in PostgreSQL internam mutant. Alexey Lesovsky

select
client_addr, usename, datname,
clock_timestamp() - xact_start as xact_age,
clock_timestamp() - query_start as query_age,
query
from pg_stat_activity order by xact_start, query_start;

Quaeso nota: hac rogatione diu quaesita et transactiones cognoscere possumus. Munus utimur clock_timestamp() operating tempus determinare. Diu quaesitiones quas invenimus, meminisse possumus, eas adimplere explainconsilia intuere et quodammodo optimize. Praesens longas petitiones iacimus et in vita nostra progredimur.

Profunda dive in PostgreSQL internam mutant. Alexey Lesovsky

select * from pg_stat_activity where state in
('idle in transaction', 'idle in transaction (aborted)';

Malae transactiones sunt res in otiosis in re gerenda, et otiosis in re publica civitatibus.

Quid est hoc? Transactiones plures civitates habent. Et harum aliquando assumenda quis. Est ager definire civitatibus state in hac praesentatione. Utimur et statuimus.

Profunda dive in PostgreSQL internam mutant. Alexey Lesovsky

select * from pg_stat_activity where state in
('idle in transaction', 'idle in transaction (aborted)';

Et, ut supra dixi, hae duae civitates otiosi in negotio, et otiosi in negotio (aborted) mali sunt. Quid est? Haec cum applicatione transactionis aperuisset, aliquas actiones faciebat et de suo negotio perrexit. Rei aperta manet. Pendet, nihil in eo accidit, nexum capit, comas in ordines mutatos et potentia auget tabulas aliarum tabularum, ob machinam machinam transactionis Postrges architecturae. Atque haec etiam confodietur, quia plerumque utique noxia sunt.

Si vides te plusquam 5-10-20 ex eis habere in database, tunc debes sollicitare et aliquid cum illis facere incipere.

Hic utimur etiam ad tempus calculi clock_timestamp(). Transigimus transactions et optimize applicationis.

Profunda dive in PostgreSQL internam mutant. Alexey Lesovsky

Ut supra dixi, interclusio est cum duo vel plures operationes pro una vel coetus copiarum pugnant. Hoc enim agrum habemus waiting cum Boolean valorem true aut false.

Verum - hoc significat processum pendentem, aliquid fieri oportet. Cum processum exspectat, significat clientem qui hoc processum initiavit etiam exspectat. Cliens in navigatro sedet atque etiam stat.

monitio: _Statim ex Postgres version 9.6 agri waiting remota et duo magis notitia agri loco additae wait_event_type ΠΈ wait_event._

Profunda dive in PostgreSQL internam mutant. Alexey Lesovsky

Quid faciam? Si diu verum vides, significat postulationes tales exigi. Simpliciter nos tales transactiones deducunt. In tincidunt scribimus quod optimize quodammodo indigent ut nulla sit curriculum facultatum. Tum tincidunt optimize application ut hoc non fiat.

Extremum autem est in potentia non fatalis deadlocks Eventum. Duae transactiones duas facultates renovaverunt, deinde eas iterum accesserunt, hoc tempore ad facultates oppositas. In hoc casu, PostgreSQL rem ipsam necat ut alius operari possit. Finis huius condicionis mortua est et eam per se ipsam non potest videri. Ergo PostgreSQL extremas mensuras sumere cogitur.

Profunda dive in PostgreSQL internam mutant. Alexey Lesovsky

https://github.com/lesovsky/uber-scripts/blob/master/postgresql/sql/c4_06_show_locked_queries.sql

https://github.com/lesovsky/uber-scripts/blob/master/postgresql/sql/show_locked_queries_95.sql

https://github.com/lesovsky/uber-scripts/blob/master/postgresql/sql/show_locked_queries_96.sql

http://big-elephants.com/2013-09/exploring-query-locks-in-postgres/

Et hic sunt duae interrogationes quae te interclusionem indagare permittunt. Utimur sententia pg_locksquas gravis indagare comas sinit.

Primaque ligamen est ipsum textum postulationis. Satis diu est.

Secundus autem nexus est articulus in cincinnis. Utile est legere, valde interesting.

Quid igitur videmus? Duas petitiones videmus. Cum transaction ALTER TABLE res est consequat. Incepit, sed non complevit, et applicatio quae hanc transactionem scripsit, alia alicubi facit. Secunda petitio renovatio est. Exspectat tabulam altaris ad finiendum antequam opus suum continuare possit.

Sic reperire possumus quis conclusit quem, quem detineat, et ulterius agere possimus.

Profunda dive in PostgreSQL internam mutant. Alexey Lesovsky

Postero modulus est pg_stat_statements. Ut dixi, modulus est. Eo utere, debes bibliothecam suam in configuratione onerare, PostgreSQL sileo, modulum institue (uno mandato) et tunc novam sententiam habebimus.

Profunda dive in PostgreSQL internam mutant. Alexey Lesovsky

CΡ€Π΅Π΄Π½Π΅Π΅ врСмя запроса Π² милисСкундах
$ select (sum(total_time) / sum(calls))::numeric(6,3)
from pg_stat_statements;

Π‘Π°ΠΌΡ‹Π΅ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΏΠΈΡˆΡƒΡ‰ΠΈΠ΅ (Π² shared_buffers) запросы
$ select query, shared_blks_dirtied
from pg_stat_statements
where shared_blks_dirtied > 0 order by 2 desc;

Quid inde auferemus? Si de rebus simplicibus loquimur, tempus exsecutionis mediocris interrogationis accipere possumus. Tempus crescit, quod significat PostgreSQL lente respondet et ad aliquid faciendum opus est.

Inspicere possumus acerrimam scripturam transactionum in datorum quae mutant notitias in communibus buffers. Vide, qui notitias ibi updates vel delet.

Et simpliciter possumus intueri diversa statistica pro huiusmodi petitionibus.

Profunda dive in PostgreSQL internam mutant. Alexey Lesovsky

https://github.com/dataegret/pg-utils/blob/master/sql/global_reports/query_stat_total.sql

Nos pg_stat_statements Utimur ea ad edificationem relationum. Nos semel in die reset mutant. Sit scriptor cumulare. Priusquam statistica altera vice reponat, relationem faciamus. Hic nexus ad famam est. Hoc spectare potes.

Profunda dive in PostgreSQL internam mutant. Alexey Lesovsky

Quid facimus? Computamus generalem statisticam pro omnibus petitionibus. Deinde, pro unaquaque rogatione, singularem collationem ad has universales mutant.

Et quid vigilamus? Totam exsecutionem tempus omnium petitionum cuiusdam generis inspicere possumus in curriculo omnium aliarum petitionum. Inspicere possumus CPU et I/O resource usus ad imaginem altiorem. Et iam optimize has queries. Quaesitum tectum super hac relatione aedificamus et iam cogitationem cibi quid optimize comparamus.

Profunda dive in PostgreSQL internam mutant. Alexey Lesovsky

Quid reliquimus scaenae? Sunt adhuc paucae submissiones supersunt quae non consideravi quia tempus limitatum est.

Sunt pgstattuple modulus additus est etiam e sarcina machinae vexillum. Non sino vos aestimare bloat mensae, sic dictae mensae ruptio. Et si fragmentum multum est, removere debes et diversis instrumentis utere. Et munus pgstattuple diu operatur. Et quo plures tabulae sunt, eo amplius laborabit.

Profunda dive in PostgreSQL internam mutant. Alexey Lesovsky

Proximus est contrib pg_buffercache. Patitur te quiddam communium inspicere: quam intensive et pro quibus tabulis quiddam paginae adhibentur. Et simpliciter permittit ut in communibus quiddam inspicere et perpendere quid ibi agatur.

Postero modulus est pgfincore. Mensam res per ordinem vocationis permittit low-gradu mincore(), i.e. mensam in communibus bubonibus onerare permittit vel eam exonerare. Et inter alia concedit cella operativa inspicere, i.e., quantum spatium mensa in cella paginae, in communibus bubundis occupat, et simpliciter permittit nos inposuit tabulae aestimare.

Modulus proximus - pg_stat_kcache. Etiam ratio vocationis utitur getrusage(). Et ante et post requisitionem executus est. Et in consequentibus statisticis, aestimare nobis permittit quantum petitio nostra in orbe I/O, i.e., operationes cum systematis fasciculi et processus usus spectat. Modulus tamen est iuvenis (tussis tussis) et ad operationem suam requirit PostgreSQL 9.4 et pg_stat_statuta, de quibus supra dixi.

Profunda dive in PostgreSQL internam mutant. Alexey Lesovsky

  • Sciens uti statistica utilis est. Non opus est tibi tertiae factionis programmata. Intrare potes, vide, aliquid age, aliquid age.

  • Usura statistica non est difficilis, iustus regularis SQL. Petentem collegisti, compilavit, misit, aspexit.

  • Statistics interrogatus respondit auxilium. Si interrogationes habes, statisticam convertis - vide, conclusiones concludas, eventus resolvere.

  • & experimentum. Multae petitiones, multae datae. Potes semper optimam esse interrogationem. Facere potes versionem tuam petitionis quae tibi magis quam originalibus convenit ac ea uteris.

Profunda dive in PostgreSQL internam mutant. Alexey Lesovsky

References

Nexus idonei qui in articulo inventi sunt, ex materia in relatione erant.

Auctor scribere plura
https://dataegret.com/news-blog (lat)

Statistics Collector
https://www.postgresql.org/docs/current/monitoring-stats.html

Ratio Administrationis functiones
https://www.postgresql.org/docs/current/functions-admin.html

Contrib modulorum
https://www.postgresql.org/docs/current/pgstatstatements.html
https://www.postgresql.org/docs/current/pgstattuple.html
https://www.postgresql.org/docs/current/pgbuffercache.html
https://github.com/klando/pgfincore
https://github.com/dalibo/pg_stat_kcache

SQL utilia et exempla SQL code
https://github.com/dataegret/pg-utils

Gratias tibi omnes pro attente!

Source: www.habr.com