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.
Bona dies Nomen meum Aleksey est. Ut Ilya dixit, ego loqui de PostgreSQL mutant.
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.
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.
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.
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.
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.
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.
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.
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.
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 .
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.
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.
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.
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).
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.
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.
Pg_stat_bgwriter - Haec sententia describit operationem duorum PostgreSQL background subsystems: hoc checkpointer
ΠΈ background writer
.
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
.
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_maxpages
ita 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.
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.
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.
ΡΠΊΠΎΠ»ΡΠΊΠΎ Π·Π°ΠΏΠΈΡΠ°Π½ΠΎ 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.
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.
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.
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
ΠΈ di
quae 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.
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.
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.
ALTER TABLE table_name SET (fillfactor = 70);
Quomodo augere volumen hot update
ov? 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.
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.
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
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.
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.
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:
Haec exempla interrogationis gravioris sunt quam ut indices insuetos suspicemur.
Secunda ligatio postulatio magis interesting est. Est logica admodum non levis. Commendare enim referat.
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.
Proximus propositio est pg_stat_activity
. Hoc est analogon utilitatis ps
tantum in PostgreSQL. Si ps
'om processuum spectes in systemate operante, deinde pg_stat_activity
Ostendet tibi actionem intus PostgreSQL.
Quae utilia inde auferemus?
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.
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.
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.
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 explain
consilia intuere et quodammodo optimize. Praesens longas petitiones iacimus et in vita nostra progredimur.
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.
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.
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
._
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.
Et hic sunt duae interrogationes quae te interclusionem indagare permittunt. Utimur sententia pg_locks
quas 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.
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.
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.
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.
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.
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.
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.
-
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.
References
Nexus idonei qui in articulo inventi sunt, ex materia in relatione erant.
Auctor scribere plura
Statistics Collector
Ratio Administrationis functiones
Contrib modulorum
SQL utilia et exempla SQL code
Gratias tibi omnes pro attente!
Source: www.habr.com