Ik heb op werk een niet al te krappe PostgreSQL server welke gebruikt word als database voor een nieuwe website. Het database schema hiervan is verre van optimaal, maar hier is op dit moment helaas niets meer aan aan te passen. Het probleem waar ik tegenaan loop is dat ik ongeveer 15 minuten nodig heb (inclusief processing in Python) om een zogenaamde "matching" te draaien. Deze matching zoekt een student bij een vacature.
Dit alles gaat nog relatief snel (gezien de vorige versie hiervan), maar eigenlijk moet dit in onder de 5 minuten gaan draaien. De code is al een stuk geoptimaliseerd, en de profiler van Python laat zien dat er ongeveer 80% van de tijd word besteed aan database queries, en dan voornamelijk INSERT queries. Wat me wel opvalt is dat er erg veel database queries gedaan worden, uiteindelijk ongeveer 141000.
Toch wil ik eerst kijken naar het optimaliseren van de database, omdat er in het aantal queries niet heel erg veel meer te optimaliseren valt. En zeker omdat ongeveer de 40 tot 50% hiervan steeds dezelfde is zou ik verwachten dat dit tot op zekere hoogte door PostgreSQL gecached zou worden. Met iotop krijg ik te zien dat er vrijwel geen reads worden gedaan vanaf de schijf, maar wel een hoop (trage) writes met ongeveer 100kByte/s als piek. Dit terwijl top laat zien dat er één core voor ~70% bezig word gehouden door PostgreSQL.
Ik heb wat zitten spelen met de PostgreSQL configuratie, maar ik krijg de database gewoon niet sneller. Zijn er punten welke ik kan aanpassen waardoor de database "ineens" een stuk sneller word? Bijvoorbeeld een flink stuk van de data in RAM te laden, want daarvan hebben we méér dan genoeg.
De hardware waar het allemaal op draait:
CPU: Intel Xeon L5520 @ 2.27GHz, 2x 4 cores (16 threads)
RAM: 3x 16GB RDIMM
HDD: 2x 146GB SAS 15k RPM
Nu weet ik ook wel dat er waarschijnlijk een gigantische snelheidswinst haalbaar zou zijn door er 1 of 2 SSDs in te zetten voor de database, maar dat ga ik er niet doorkrijgen.
EDIT: Als dit topic op de verkeerde plek staat hoor ik het graag, ik kon niet kiezen wat nu de juiste plek was
Dit alles gaat nog relatief snel (gezien de vorige versie hiervan), maar eigenlijk moet dit in onder de 5 minuten gaan draaien. De code is al een stuk geoptimaliseerd, en de profiler van Python laat zien dat er ongeveer 80% van de tijd word besteed aan database queries, en dan voornamelijk INSERT queries. Wat me wel opvalt is dat er erg veel database queries gedaan worden, uiteindelijk ongeveer 141000.
Toch wil ik eerst kijken naar het optimaliseren van de database, omdat er in het aantal queries niet heel erg veel meer te optimaliseren valt. En zeker omdat ongeveer de 40 tot 50% hiervan steeds dezelfde is zou ik verwachten dat dit tot op zekere hoogte door PostgreSQL gecached zou worden. Met iotop krijg ik te zien dat er vrijwel geen reads worden gedaan vanaf de schijf, maar wel een hoop (trage) writes met ongeveer 100kByte/s als piek. Dit terwijl top laat zien dat er één core voor ~70% bezig word gehouden door PostgreSQL.
Ik heb wat zitten spelen met de PostgreSQL configuratie, maar ik krijg de database gewoon niet sneller. Zijn er punten welke ik kan aanpassen waardoor de database "ineens" een stuk sneller word? Bijvoorbeeld een flink stuk van de data in RAM te laden, want daarvan hebben we méér dan genoeg.
De hardware waar het allemaal op draait:
CPU: Intel Xeon L5520 @ 2.27GHz, 2x 4 cores (16 threads)
RAM: 3x 16GB RDIMM
HDD: 2x 146GB SAS 15k RPM
Nu weet ik ook wel dat er waarschijnlijk een gigantische snelheidswinst haalbaar zou zijn door er 1 of 2 SSDs in te zetten voor de database, maar dat ga ik er niet doorkrijgen.
EDIT: Als dit topic op de verkeerde plek staat hoor ik het graag, ik kon niet kiezen wat nu de juiste plek was