Sanitas indices in PostgreSQL per oculos elit Java

Salve.

Nomen meum Vanya est et sum Java elit. Ita accidit ut multum laboro apud PostgreSQL - datorum constituendorum, optimizing structuram, perficiendi, ac paulo DBA in weekends ludendi.

Nuper complura databases in micromissionibus nostris ministravi et bibliothecam Javam scripsi pg-index-salutisquae hoc opus faciliorem reddit, me tempus servat et adiuvat me vitare nonnulla errata communia tincidunt. Haec bibliotheca est ut hodie de nobis loquamur.

Sanitas indices in PostgreSQL per oculos elit Java

Disclaimer

Praecipua versio PostgreSQL laboro cum is 10 . Omnes SQL interrogationes utimur, etiam in versione 11 probata sunt. Minima confirmata versio est 9.6.

erectus

Omnia fere ante annum inchoata sunt cum condicione quae mihi mirum erat: creatio auctoris index e caeruleo errore finitus est. Index ipse, more solito, in statu datorum in statu invalido mansit. Log analysis ostendit penuriam temp_file_limit. Et longe abimus... Altius fodiens, totum fasciculum problematum in configuratione datorum inveni et manicas meas volvens eas in oculis meis scintillare infigere coepit.

Quaestio una - default configuratione

Probabiliter omnes satis fessi sunt metaphorae de Postgres, quae in capulo factori currere potest, sed ... de configuratione default vere plures interrogationes movet. Ut minimum, valet attentionem sustentationem_work_mem, temp_file_limit, statement_timeout ΠΈ lock_timeout.

In nobis sustentationem_work_mem erat default LXIV MB, ac temp_file_limit aliquid circa 2 GB - simpliciter non satis habuimus memoriam ad faciendum indicem in magna tabula.

Ergo in pg-index-salutis Collecta seriem clavismeo iudicio, parametri quae singulis datorum configurantur.

Problema duo - duplicata indices

Nostra database vivunt in SSD agitet et utimur HA-configuration cum multiple Mauris interdum, dominum exercitum et n-number of replicas. Orbis spatium valde pretiosum nobis est; non minoris momenti est quam effectus et CPU consummatio. Hinc una ex parte, indicibus lectionis velocitatis indigemus, et ex altera parte, indices superfluos in datorum datorum videre nolumus, cum spatium consumant ac retardant notitias adaequationis.

Et nunc redditis omnibus irritum indexes et visis refert Oleg Bartunov, "magnam" purgationem ordinare decrevi. Evenit tincidunt non amo documenta datorum legere. Non placet valde. Propterea duo errores typici oriuntur - index manualis creatus in prima clave et similis index "manualis" in columna unica. Non opus est facto - Postgres will do everything itself. Tales indices tuto deleri possunt, et ad hoc diagnostica apparuerunt duplicated_indexes.

Quaestio tres - indices secantes

Plurimi tincidunt noviciae indices in una columna creant. Paulatim, hoc negotio percepto, homines incipiunt quaestiones suas optimizare et indices implicatiores addunt plures columnas inclusas. Ita apparent indices in columnis A, A B +, A+B+C et sic porro. Horum indices duo priores tuto ejici possunt, cum sint praepositiones tertii. Hoc quoque multum spatii orbis servat et diagnostica pro hoc sunt intersect_indexes.

Quaestio quattuor claves exterarum sine indicibus

Postgres permittit te clavem angustiis externis creare sine indice fauore specifica. In multis adiunctis haec quaestio non est, ac ne manifestare quidem potest.

Idem apud nos est: iustum est ut aliquando in tempore officium, secundum schedulam ac purgationem datorum ordinum testium, "adici" nobis a magistro hospite coeptum sit. CPU et IO in solitudinem veniebant, petitiones retardabantur et opportuno, servitus quingenti. Velox analysis pg_stat_activity queries sicut ostendit:

delete from <table> where id in (…)

In hoc casu, sane, index erat per id in tabula scopo, et perpauca monumenta secundum conditionem deleta sunt. Placuit ut omnia laborarent, sed proh dolor non erat.

Mirabilis unus in adiutorium venit explicare analyze et dixit praeter tabulas delendo in tabula scopo, esse etiam integritatem relativam perscriptio, et in una e tabulis actis hoc impedimentum fallit. sequentem scan ob idoneos indices defectus. Ita diagnostica natus est foreign_keys_without_index.

Quaestio quinque - nullum valorem in indices

Defalta, Postgres nullas valores in indice rerum comprehendit, sed plerumque ibi non necessariae sunt. Ideo diligentissime conor nullas has ejicere (diagnostics indexes_with_null_values) Partis index in nullable columnas per genus where <A> is not null. Hoc modo magnitudinem unius indicis nostri ab 1877 MB ad 16 KB reducere potui. Et in uno officiorum, magnitudo datorum in summa per 16% diminuta (per 4.3 GB in numeris absolutis) ob exclusionem valorum nullis indicibus. Ingentia in orbe spatii compendia cum modificationibus simplicissimis. πŸ™‚

Quaestio sex - an desunt primaria claves

Ex natura mechanism MVCC in Postgres statu sic fieri potest pereat luxoriosa suiscum magnitudo mensae tuae celeriter crescit ob magnum numerum monumentorum mortuorum. Naively credidi hoc non nobis imminere, neque hoc turpibus nostris accidere, quod nos, LATRO!!!, normales tincidunt ... Quam stultus et rusticus eram...

Quadam die, mira migratio, omnia monumenta in amplam ac strenue mensam sumpsit et renovavit. +100 GB ad mensam magnitudinem ex caeruleo venimus. Damnum erat pudor, sed infortunia nostra non finierunt. Post autovacuum in hac tabula finita horarum 15 post, claruit locum physicam non reversurum. Ministerium impedire non potuimus et VACUUM FULLUM facere, ita uti decrevimus pg_repack. Et vertit illud pg_repack nescit processus mensas sine prima clave vel alia singularitate coarctare, et nostra mensa primarium clavem non habuit. Ita diagnostica natus est tables_without_primary_key.

In bibliotheca versionis 0.1.5 Facultas colligendi notitias ex bloate tabularum et indices et ei respondere opportune modo adiectum est.

Problemata septem et octo - indices insufficiens et indices insuetos

Duo diagnostica sequentia sunt: tables_with_missing_indexes ΠΈ unused_indexes - Apparuit in sua forma finali relative nuper. Punctum est quia detrahi et addi non poterant.

Sicut iam scripsimus, configuratione cum pluribus replicationibus utimur, et lectionis sarcina diversarum exercituum fundamentaliter diversa est. Quam ob rem res evenit ut nonnullae tabulae et indices in quibusdam exercitibus paene non adhibitae sint, et ad analysim statisticam ab omnibus exercitibus in botro colligere debes. Reset Statistics Hoc quoque necessarium est omni exercitui in botro, hoc solum in domino facere non potes.

Accessus hic nobis permisit ut plures decem gigabytarum servaremus, sublatis indicibus qui numquam usi sunt, ac indices absentium addendo ad tabulas raro adhibitas.

Ad summam:

Scilicet, omnes fere diagnostica configurare potes exclusio album. Hoc modo cito cohiberi in applicatione potes, ne novos errores appareant, et paulatim veteres defigant.

Quaedam diagnostica perfici possunt in probationibus functionis statim postquam migrationes datorum evolutae sunt. Et hoc fortasse unum ex potissimis bibliothecae meae lineamentis est. Exemplum usus inveniri potest in demo.

Sensum efficit compescere pro insuetis vel absentis indicibus, sicut pro bloat, solum in datorum realium. Valores collecti notari possunt clickhouse vel ad magna ratio.

Ego vere spero quod pg-index-salutis utile erit et in demanda. Conferre etiam potes ad progressionem bibliothecae nuntiando problemata quae invenis et nova diagnostica suggeris.

Source: www.habr.com