Som udvikler og DBA, der ofte har foretrukket teknologi, men hvis vi driver en stor organisation, skal vi være mere imødekommende over for alle teknologierne. En af mine store bankkunder bruger flere databaser til at udføre forskellige transaktioner. De bruger også masser af forskellige caching-løsninger til deres virksomhed såvel som top-of-the-line hardware. Jeg havde en meget interessant samtale med min klient om emnet, hvordan man henter forespørgsler, ikke fra cachen til MySQL og SQL Server, vi diskuterede SQL_NO_CACHE og OPTION (RECOMPILE). Vi diskuterede under det omfattende sundhedstjek af databaseydelse .
Lad os se to forskellige eksempler i dag for MySQL og SQL Server. Begge relationsdatabaser udnytter hukommelsescachen til at returnere os dataene. Lad os se, hvordan vi kan skrive en forespørgsel, hvor vi ikke vil bruge de cachelagrede resultater, men direkte hente vores data fra SQL Server-disken og ikke fra cachen.
SQL-serverforespørgsel – MULIGHED (GENKOMPIL)
SELECT Columnname FROM TableName OPTION(RECOMPILE)
MySQL-forespørgsel SQL_NO_CACHE
SELECT SQL_NO_CACHE Columnname FROM TableName OPTION(RECOMPILE)
Når du bruger SQL_NO_CACHE og OPTION (RECOMPILE), henter relationsdatabaserne (henholdsvis MySQL og SQL Server) dataene direkte fra disken i stedet for det, der er gemt i cachen.
Her er et par relevante blogindlæg om samme emne, som du måske finder interessante.
- SQL-SERVER – Listeforespørgselsplan, cachestørrelse, tekst- og eksekveringsantal
- SQL-SERVER – Find den ældste forespørgselsplan fra cachen
- SQL SERVER – Plan cache og datacache i hukommelsen
- SQL SERVER – Lagret procedure – Rens cache og rense buffer
- SQL-SERVER – Fjern alle forespørgselscacheplaner, der ikke er brugt i en bestemt periode
- SQL SERVER – script til at få kompileret plan med parametre fra cachen
- SQL SERVER – Plan cache – Hent og fjern – Et simpelt script
- SQL SERVER – 2017 – Script til at rydde procedurecache på databaseniveau