DataFacts.nl

Eén van de businessblogs van Depercon

Page Life Expectancy: Een indicator of uw SQL Server genoeg geheugen heeft

Wat te doen als de performance van de queries op uw databaseserver te wensen overlaat

Natuurlijk probeert u uw queries te optimaliseren. Als dit geen oplossing biedt dan wordt het tijd om te kijken of uw databaseserver wel voldoende geheugen heeft. Een belangrijke indicator hiervoor is de ‘Page Life Expectancy’. Deze kunt u met de applicatie ‘perfmon.exe’ monitoren.

Page Life Expectancy
De PLE geeft aan hoeveel seconden een ‘page’ van 8kb gemiddeld in het Buffer Cache van SQL Server blijft staan. Zodra de PLE 100 is dan betekent dat gemiddeld iedere page in het Buffer Cache eenmaal per 100 seconden wordt vervangen door een nieuwe page.

Tijdens het laden van deze nieuwe page wordt uw disk-systeem en vaak ook netwerk belast. Dit heeft meestal gevolgen voor de performance van de queries die gebruik maken van deze pages, immers deze worden eerst vanaf disk geladen.

Vaak wordt een grens van 300 seconden gehanteerd. Is uw PLE lager dan 300 seconden, dan kan uw databaseserver meer RAM gebruiken. Bij een PLE hoger dan 300 dan is dat vaak niet nodig.

Mijns inziens ligt dit wat genuanceerder. Het is namelijk afhankelijk van de hoeveelheid geheugen die uw SQL Server reeds beschikbaar heeft.

Voorbeelden
1) Bij een PLE van 50 voor een SQL Server met 8 Gb wordt elke 50 seconden 8 Gb aan data van disk in het buffer cache gelezen. Dat is circa 160 Mb per seconde.

2) Bij een PLE van 50 voor een SQL Server met 2 Gb wordt elke 50 seconden 2 Gb aan data van disk in het buffer cache gelezen. Dat is circa 40 Mb per seconde.

3) Bij een PLE van 200 voor een SQL Server met 8 Gb wordt elke 200 seconden 8 Gb aan data van disk in het buffer cache gelezen. Dat is circa  40 Mb per seconde.

De laatste 2 voorbeelden zullen de disk en het netwerk net zoveel belasten.

Mijn advies is daarom om de volgende formule te gebruiken om te bepalen of uw databaseserver genoeg geheugen heeft:
 

[Max Beschikbaar Buffer Geheugen] / [PLE]
mag niet hoger zijn dan 5.000.000.

Dat wil zeggen dat er gemiddeld niet meer dan 5mb/sec van disk mag worden gelezen. Is dit wel het geval dan heeft uw databaseserver meer geheugen nodig.

Goed presterende (snelle) SQL Queries maken

Vaak volstaat het om een SQL query te schrijven die functioneel het juiste resultaat oplevert zonder dat de snelheid van de query een rol speelt, bijvoorbeeld als één record moet worden opgehaald van een tabel die in mutatiescherm van een applicatie moet worden gebruikt.

Vaak is de snelheid waarmee de SQL query een resultaat oplevert wel heel erg belangrijk [lees meer...]

Adressenbestand ontdubbelen? Probeer het eens met trigrammen (update).

Ieder bedrijf heeft er last van: Het bedrijfsbestand (relatiebestand, naw gegevens, adresgegevens, mailingbestand, klanten, prospects) groeit en op den duur is het bestand gevuld met relaties die dubbel voorkomen, maar net niet 100% hetzelfde. Een goede opschoonactie is dan soms noodzakelijk, bijvoorbeeld voordat de mailing de deur uitgaat. Ik heb zelf een aantal van dit soort trajecten doorlopen en hier soms software van derden gebruikt (bijvoorbeeld Human Inference). Maar hoe vind je nou die dubbelen zonder dit soort dure software en zonder het gehele bestand handmatig te moeten doorlopen?

Een antwoord kan zijn: met trigrammen.

[lees meer...]

Taal van een tekst bepalen m.b.v. trigrammen

Tri-grammen kunnen voor verschillende doeleinden worden gebruikt. Al eerder schreef ik over het gebruiken van Trigrammen bij het ontdubbelen van een relatiebestand. Tri-grammen kunnen ook worden gebruikt bij het bepalen van de taal van een stuk tekst.
[lees meer...]

Hoe strip je de HTML opmaak uit een webpagina

Vaak is het nodig om de HTML-tags uit (stukken uit) een HTML pagina te halen. Bijvoorbeeld in situaties dat de content van de pagina moet worden onderzocht of geanaliseerd. Dit is heel eenvoudig te doen met reguliere expressies (Regex).

[lees meer...]

Checklist bij het converteren van een database tekstveld

Na het converteren van een databestand is het noodzakelijk om deze conversie goed te testen. Immers, zodra de conversie niet helemaal goed is verlopen is er data verloren gegaan die heel vaak niet meer terug is te halen. 

Op welke punten moet je nu letten bij het converteren van een tekstveld? Hierbij een checklist.

[lees meer...]

Hoe haal je de relevante keywords uit web/html content.

Information Retrieval is een zeer interessante tak van sport: De kunst van het vinden van de juiste content uit een hele grote verzameling op basis van een Query/vraag. Hoe weet Google toch dat als ik artikelen over ‘apple’ zoek ik het computermerk Apple bedoel en niet zo’n stuk fruit?  

Dit begint bij het op een slimme manier indexeren van de content. In dit artikel geeft ik een ‘brute force’ voorbeeld hoe je de belangrijkste sleutelwoorden van een stuk HTML content zou kunnen bepalen.

[lees meer...]

Hoe converteer/importeer je snel 2 miljoen XML bestanden naar een SQL Server database

Onlangs ben ik een conversie-uitdaging aangegaan waarbij 2.1 miljoen XML bestanden (relationele nawbestanden) geconverteerd/geimporteerd moesten worden naar een SQL server database in een afwijkend datamodel. Deze 2.1 miljoen XML bestanden gebruikten 4 verschillende XML formaten maar moesten wel allemaal ingelezen worden in het zelfde datamodel. Ik had de beschikking over een Windows server en SQL server 2005 om dit voor elkaar te krijgen.

Bij een dergelijke conversie loop je in ieder geval tegen de volgende uitdagingen aan:

  • Windows kan niet meer dan ongeveer 64000 bestanden per map aan.
  • Windows is niet gebouwd om snel met dit soort hoeveelheden bestanden om te kunnen gaan.
  • Er moet XSL transformatie worden toegepast. (4 verschillende transformaties)
  • De referentiele integriteit moet ‘buitenom’ bewaakt worden
  • De codering van de karakterset

Ik heb dit conversietraject opgelost met behulp van SQL Server Integration Services (SSIS) en zal globaal uitleggen hoe ik dit heb gedaan. Let op! Alleen voor techneuten.

[lees meer...]

Cheat sheet (Factsheet) voor SQL Server gebruikers

SQL Server factsheetIk werk zelf veel met SQL Server en MySQL. Met name voor het schrijven van queries om gegevens te bevragen en te manipuleren. Sommige bewerkingen vragen dusdanig veel resources van een systeem dat ik deze queries ook snel (lees: korte executietijd) moet maken zodat deze efficient met de resources omgaan.

Om deze queries gemakkelijker te kunnen schrijven heb ik enige tijd geleden al een factsheet gemaakt waarop alle voor mij belangrijke functies, datatypen, checklijsten, symbolen en syntaxis voor SQL Server te vinden.

Deze cheat sheet (factsheet) past op een dubbelzijdig in kleur afgedrukt A4-tje en kan (het liefst gelamineerd) als naslag in de tas geschoven worden.

[lees meer...]

Hoe haal je URL’s uit HTML pagina’s

In mijn dagelijkse werk houd ik mij veel bezig met Information Extraction. Met Information Extraction (Informatie Extractie) wordt bedoeld ‘het vinden van Informatie uit ongestructureerde data, bijvoorbeeld vrije tekst of HTML’. Information Extraction kan worden gebruikt om bijvoorbeeld geautomatiseerd elementen uit CVs te herkennen of documenten geautomatiseerd te categoriseren. Zoekmachines maken vaak gebruik van Information Extraction om relevantie van een website op basis van een zoekterm te bepalen.

Soms is het interessant om de URLs / Hyperlinks uit een stuk ongeordende tekst te halen, bijvoorbeeld:

  • om te bepalen wat op dit moment een heel erg HOT onderwerp is op het internet
  • om een spider of crawler (Gebruikt door onder andere zoekmachines) te maken
  • om het onderwerp van een artikel te achterhalen.
  • om een sitemap te kunnen maken

Er zijn een aantal methoden mogelijk om deze URLs te vinden. Eén daarvan is het gebruiken van regular expressions (Reguliere expressies). Om dit te kunnen doen is er naast een reguliere expressie een stukje programmeerwerk nodig. Ik zal een voorbeeld geven hoe dit te doen met C# (.NET).

[lees meer...]