Om te voorkomen dat onze shared databaseservers onderuit getrokken worden hebben we een script (SQLSlayer) lopen wat in noodgevallen ruimte creëert op de server. Dit kan dus de oorzaak zijn als je database query is afgebroken. In dit artikel beschrijven we hoe dit script precies werkt.

Afbreken van SELECT queries

Op het moment dat een query 8 uur of langer loopt, breken wij deze af. De Technisch beheerder ontvangt hierover dan een e-mail. We breken deze queries af, omdat ze naast inefficiënt zijn, ook ervoor zorgen dat de harde schijf snel vol loopt. Wanneer je van ons een bericht ontvangt dat we een query hebben moeten afbreken, check dan graag of je je query en database kunt optimaliseren. Hoe je dit doet wordt uitgelegd op de pagina Database optimaliseren.

Afbreken van slapende verbindingen

Wanneer er meer dan 55% van het maximum aantal verbindingen naar een database in gebruik is, zal een script in werking treden. Dit script breekt alle connecties af die langer dan vijf seconden niets doen (Command: Sleep). Vervolgens checkt het script of nog steeds meer dan 55% van de verbindingen in verbruik is.

Wanneer dit het geval is zal de tweede fase van het script in werking treden. Er wordt een lijst gemaakt van de lopende SELECT statements. Deze lijst is gesorteerd op leeftijd, waarbij de langst lopende 20 query’s gekilled worden. Elke keer dat de 20 langst lopende query’s gekilled worden, checked het script of het aantal openstaande verbindingen afgenomen is.

Afbreken van UPDATE en INSERT statements

Mocht ook dit niet helpen tegen de verstopping, dan zal het script de langst lopende UPDATE en INSERT statements afbreken. Natuurlijk is dit geen wenselijke situatie! Dit soort situaties laten zich vaak niet voorspellen en wanneer het verwijderen van de SELECT query’s en slapende verbindingen niet voldoende geweest is, moeten we een reactief beleid voeren. De meeste klanten delen een databaseserver en daarom voorkomen we dat een klant een databaseserver in zijn eentje omver trekt.

Informeren van klanten

Uiteraard worden we van dit soort acties op de hoogte gebracht en gelukkig hoeft dit script niet heel vaak in werking te treden. Als we merken dat een website te veel vraagt van onze databaseserver zullen we deze naar een aparte databaseserver verplaatsen waarop minder monitoring loopt. Uiteraard wordt de betreffende klant hiervan op de hoogte gebracht met het verzoek hier naar te kijken.

00