Horrible performance de locking PostgreSQL

J'ai récemment remarqué une perte de performance de locking PostgreSQL très horrible après avoir exécuté le server DB pendant un mois. La charge du site a augmenté beaucoup ces semaines, mais la vitesse s'améliore.

$ psql webspace2_db psql (9.0.1) Type "help" for help. webspace2_db=# 

Le server DB exécute FreeBSD 8.1 + PostgreSQL 9.0.1

 FreeBSD Moncalvo 8.1-RELEASE-p2 FreeBSD 8.1-RELEASE-p2 #1: Mon Jan 10 13:02:48 MYT 2011 hailang@Moncalve:/usr/obj/usr/src/sys/Moncalve amd64 

La memory totale sur le server est de 4 Go

 Moncalvo# cat /var/run/dmesg.boot | grep memory real memory = 4294967296 (4096 MB) avail memory = 4101955584 (3911 MB) 

Totalement 3 Go de memory partagée est intitulé dans la configuration du kernel

 # Shared Memory options SEMMNI=256 options SEMMSL=128 options SEMMNS=32768 options SEMMAP=512 options SEMMNU=256 options SEMOPM=128 options SHMMNI=512 options SHMSEG=256 options SHMMAX=3221225472 options SHMALL=3221225472 options SHMMAXPGS=786432 

Ce sont les parameters keys de postgresql.conf

 Moncalvo# cat postgresql.conf | grep shared_buffers shared_buffers = 512MB # min 128kB Moncalvo# cat postgresql.conf | grep effective_cache_size effective_cache_size = 3276MB Moncalvo# cat postgresql.conf | grep work_mem work_mem = 256MB # min 64kB maintenance_work_mem = 128MB # min 1MB 

Selon les users, le site Web devient plus lent et plus lent ces jours-ci, j'ai réglé les services Web sur un autre server mais sans amélioration de performance efficace, alors je pense que le problème est peut-être avec le server DB. J'ai donc enregistré des requêtes lentes et j'ai trouvé que la plupart d'entre elles étaient dotées d'un mécanisme de locking, et un peu de time est horrible.

 LOG: duration: 4768697.255 ms statement: SELECT pg_advisory_lock(93690) LOG: duration: 4739020.976 ms statement: SELECT pg_advisory_lock(93690) LOG: duration: 4709376.119 ms statement: SELECT pg_advisory_lock(93690) LOG: duration: 4679438.894 ms statement: SELECT pg_advisory_lock(93690) LOG: duration: 4649714.811 ms statement: SELECT pg_advisory_lock(93690) LOG: duration: 4619931.184 ms statement: SELECT pg_advisory_lock(93690) LOG: duration: 4590323.188 ms statement: SELECT pg_advisory_lock(93690) LOG: duration: 4560627.214 ms statement: SELECT pg_advisory_lock(93690) LOG: duration: 4530796.297 ms statement: SELECT pg_advisory_lock(93690) LOG: duration: 4501178.286 ms statement: SELECT pg_advisory_lock(93690) LOG: duration: 4471515.579 ms statement: SELECT pg_advisory_lock(93690) LOG: duration: 4441832.934 ms statement: SELECT pg_advisory_lock(93690) LOG: duration: 4410774.012 ms statement: SELECT pg_advisory_lock(93690) LOG: duration: 4382435.595 ms statement: SELECT pg_advisory_lock(93690) 

Toute aide et suggestion est très appréciée.

One Solution collect form web for “Horrible performance de locking PostgreSQL”

Je ne suis pas un expert en DB, mais cela semble être une utilisation non valide de Advisory Locks quelque part dans votre application.

PostgreSQL fournit un moyen de créer des verrous ayant des significations définies par l'application. Ceux-ci sont appelés serrures de conseil, car le système n'applique pas son utilisation – il appartient à l'application de les utiliser correctement.

et

Comme toutes les serrures de PostgreSQL, une list complète des verrous de conseils actuellement détenus par une session peut être trouvée dans la vue système pg_locks .

Modifier:

En regardant le code source moodle, /moodle/lib/dml/pgsql_native_moodle_database.php Je viens de find quelque chose qui pourrait être intéressant:

 public function get_session_lock($rowid) { // NOTE: there is a potential locking problem for database running // multiple instances of moodle, we could try to use // pg_advisory_lock(int, int), luckily there is not a big chance // that they would collide if (!$this->session_lock_supported()) { return; } parent::get_session_lock($rowid); $sql = "SELECT pg_advisory_lock($rowid)"; ... } 
  • La prise de table postgresql prend très longtime
  • Comment configurer postgresql sur EC2 afin que mes données soient sauvegardées et sécurisées?
  • Utilisation de PostgreSQL 9.0 et PostGIS 1.5 sur Debian Squeeze
  • Modification de tablespace sur table avec réplication en continu
  • Comment puis-je mettre à jour les référentiels YUM pour get la version Postgres9.x?
  • Je pense que j'ai installé plusieurs servers postgresql, comment puis-je identifier et supprimer les «extra»?
  • Postgres - ne pouvait pas créer de socket TCP / IP
  • Temps incorrect sur la database postgresql
  • Pourquoi pg_restore de BLOB-s est si lent et comment cela peut-il être amélioré?
  • login à distance Postgres
  • Comment les tables peuvent-elles être cachées à un user dans PostgreSQL 8.1?
  • Les astuces du serveur de linux et windows, tels que ubuntu, centos, apache, nginx, debian et des sujets de rĂ©seau.