Question

Je viens de rencontrer un problème étrange.J'ai fait un rapport à Pgfourine et j'ai découvert que mes transactions XA commencèrent à travailler vraiment lentement.Préparer une transaction et leur validation préparées combinées ont pris 12,55 sînés sur 13,2.Mais pourquoi?

#####  Overall statistics  #####

Number of unique normalized queries: 175
Number of queries:     268,772
Total query duration:  13m2s


#####  Queries by type  #####

SELECT:    116493     43.3%
INSERT:     15926      5.9%
UPDATE:      7935      3.0%
DELETE:      4923      1.8%


#####  Queries that took up the most time (N)  #####

1) 6m32s - 26,338 - COMMIT PREPARED ''
--
2) 6m23s - 25,972 - PREPARE TRANSACTION ''
--
3) 0.6s - 3,848 - update avatar set lfa_position=NULL where Id=0
.....
7) 0.3s - 21,514 - COMMIT
.....

J'ai une théorie mais n'ai pas de preuve .. J'ai des disques lents et j'ai désactivé synchronous_commit.Peut-être que PostgreSQL doit faire un FSYNC pendant "Préparer une transaction" même si Synchronous_Commit est désactivé?

fsync = on 
synchronous_commit = off

Des idées?

mise à jour

mêmes tests avec

fsync = off
synchronous_commit = off


#####  Overall statistics  #####

Number of unique normalized queries: 155
Number of queries:     186,838
Total query duration:  6.6s


#####  Queries by type  #####

SELECT:     84367     45.2%
INSERT:      9197      4.9%
UPDATE:      5486      2.9%
DELETE:      2996      1.6%


#####  Queries that took up the most time (N)  #####

1) 1.8s - 16,972 - PREPARE TRANSACTION ''
--
2) 1.1s - 16,965 - COMMIT PREPARED ''
--
3) 0.4s - 2,904 - update avatar set lfa_position=NULL where Id=0
--
4) 0.2s - 16,031 - COMMIT

ressemble à FSYNC a pris beaucoup de temps, mais pas tout le temps.16k commits - 0.2sec, 17k préparer + commit 2.9Sec.

histoire triste.On dirait que XA commettre prend 15 fois plus de temps que la commission locale et ne prend pas en compte Synchronous_commit.FSYNC= OFF n'est pas sûr pour une utilisation de la production.Donc, si je veux utiliser XA transactions, je dois l'utiliser avec soin et utiliser un bon lecteur SSD avec des iops élevés.

Était-ce utile?

La solution

La théorie que PREPARE TRANSACTION est immédiatement synchronisé est correct et il est mentionné dans la doc:

extrait de http://www.postgresql.org/Docs / 9.1 / statique / wal-async-commit.html :

Les commandes prennent en charge une validation en deux phases, telles que la transaction préparatoire, sont également toujours synchrones.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top