2017-01-29 6 views
1

In Bezug auf meine Frage here, habe ich Langsamkeit mit Time-to-First-Byte in meiner NodeJS App, mit Knex als Datenbank-Bibliothek.Monitor aktive DB-Verbindungen zu einem Zeitpunkt

Ausführungen:

  • Postgres: 9.6.1
  • Node: 7.4.0
  • Knex: 0.12.6
  • Angular: 1.3

Es wurde vorgeschlagen, dass:

Um dies zu lösen, müssen Sie schauen, wie Sie die Verbindungen verwenden:

  • die Größe des Pools

  • die Art und Weise Verbindungen verwaltet werden bei Anfragen

Wie kann ich beim Ausführen einer http-Anfrage die aktiven Verbindungen anzeigen und wie knex den Pool verwaltet? Wie kann ich sicher sein, dass meine Verbindungen optimal genutzt werden?

Pool Knex config in Knoten:

pool: { 
    min: 2, 
    max: 8, 
} 
+0

Optimale Pool-Nutzung durch den Anwendungsanforderungen diktiert wird. Ich weiß nicht, ob Knex Ihnen diese Flexibilität bieten kann. Es abstrahiert viel, oft muss mehr als nur eine App vollständig für die Optimierung gesteuert werden. –

+1

Sie benötigen eine anständige Instrumentierungsschicht, um die einzelnen Transaktionen und das Timing über verschiedene Plattformkomponenten hinweg überwachen zu können. Ich kenne nicht viele freie, die es wert sind, aber ich benutze NewRelic. Sie haben wahrscheinlich eine kostenlose dev-Version - es ist eine einfache 'require'-Anweisung oben in Ihrer Node-App. Sie sollten in der Lage sein, mit wenig oder gar keiner Anstrengung eine Aufteilung der Zeit und der Ressourcen über Postgres, Node usw. hinweg zu sehen. – SylonZero

Antwort

1

Führen Sie Ihre Anwendung mit DEBUG=knex:* Umgebungsvariable, und Sie werden ganz detaillierte Informationen sehen, was + Timings innerhalb knex geschieht, wenn Sie Ihre Anfrage starten.

Sollte Ihnen genug Informationen geben, um zu sehen, wo die Zeit vergeht.

Wenn Sie Statistiken wie von generic-pool wie diese direkt beantragen:

knex = require('knex')({client: 'pg', connection: 'postgres:///knex_test'}) 
poolStats = { 
    connectionsAvailable: knex.client.pool.availableObjectsCount(), 
    connectionsUsed: knex.client.pool.inUseObjectsCount(), 
    clientsWaitingForConnection: knex.client.pool.waitingClientsCount(), 
}; 

{ connectionsAvailable: 2, 
    connectionsUsed: 0, 
    clientsWaitingForConnection: 0 } 
Verwandte Themen