Mijn vraag:
Momenteel loop ik na een migratie van mijn lokale MS SQL server naar een AWS RDS tegen een performance probleem aan. Aangezien ik vooral beheerder ben en minder ontwikkelaar heb ik me tot nu toe gericht op het verhogen van de IOPS, Server memory etc.. Dit bracht zeker verbetering maar nog niet waar ik wil zijn. Ik ben dus ook de data en queries die gedaan werden gaan analyseren. Hier kwam ik tegen dat met name een query tegen een view veel problemen oplevert. Eerst zaten er veelste veel records in de tabel (10.8 miljoen en maar 226k zijn actief) dus heb ik dit opgeschoond nu door een extra filter waarde te updaten. Verwijderen kan helaas niet direct in de DB omdat de applicatie dit niet leuk vind. Ik ben ook bezig om deze te laten verwijderen maar dit kan nog niet.
Ik was me dan ook aan het focussen op de volgende view:
SELECT DISTINCT rtrim(ltrim(isnull(attr1289, ''))) AS key_attr, attr1187, attr1276, attr1160, attr1283, attr1256, attr1249, attr1214, attr1241, attr1289, activestatus
FROM hsi.rmObjectInstance1003
WHERE attr1289 IS NOT NULL AND activestatus = 0
UNION
SELECT DISTINCT RTRIM(LTRIM(ISNULL(attr1187, ''))) AS key_attr, attr1187, attr1276, attr1160, attr1283, attr1256, attr1249, attr1214, attr1241, attr1289, activestatus
FROM hsi.rmobjectinstance1003
WHERE (attr1187 IS NOT NULL) AND (activestatus = 0)
Het doel van de view is om op een naam of een ID nummer te kunnen zoeken in een enkele query. Active status is hier het bovengenoemde filter. Momenteel duurt een query op deze views circa 7 seconde waardoor een gebruiker zo'n 10 seconde zit te wachten. In de oude on-prem omgeving hadden we dit niet. De SQL Query die uitgevoerd word op de view is de volgende:
SELECT * FROM hsi.rmobjectinstanceExternalParty WHERE key_attr LIKE 'variable%' and activeStatus = 0
Relevante software en hardware die ik gebruik:
AWS RDS
io1 storage met 32k IOPS
r5.2Xlarge instance
MS SQL 2019 Server Standard
Wat ik al gevonden of geprobeerd heb:
Een index op de view had wat kunnen betekenen maar helaas ondersteund een indexed view geen UNION functie. Andere optie kan mogelijk nog zijn de view er helemaal uit te halen en het zoeken te splitsen over 2 velden en dan direct op de tabel te queryen. Dit betekend dat ik van 7 naar 3/4 seconde ga. Maar misschien mis ik nog compleet iets in de omgeving wat een winst op kan leveren.
Momenteel loop ik na een migratie van mijn lokale MS SQL server naar een AWS RDS tegen een performance probleem aan. Aangezien ik vooral beheerder ben en minder ontwikkelaar heb ik me tot nu toe gericht op het verhogen van de IOPS, Server memory etc.. Dit bracht zeker verbetering maar nog niet waar ik wil zijn. Ik ben dus ook de data en queries die gedaan werden gaan analyseren. Hier kwam ik tegen dat met name een query tegen een view veel problemen oplevert. Eerst zaten er veelste veel records in de tabel (10.8 miljoen en maar 226k zijn actief) dus heb ik dit opgeschoond nu door een extra filter waarde te updaten. Verwijderen kan helaas niet direct in de DB omdat de applicatie dit niet leuk vind. Ik ben ook bezig om deze te laten verwijderen maar dit kan nog niet.
Ik was me dan ook aan het focussen op de volgende view:
SELECT DISTINCT rtrim(ltrim(isnull(attr1289, ''))) AS key_attr, attr1187, attr1276, attr1160, attr1283, attr1256, attr1249, attr1214, attr1241, attr1289, activestatus
FROM hsi.rmObjectInstance1003
WHERE attr1289 IS NOT NULL AND activestatus = 0
UNION
SELECT DISTINCT RTRIM(LTRIM(ISNULL(attr1187, ''))) AS key_attr, attr1187, attr1276, attr1160, attr1283, attr1256, attr1249, attr1214, attr1241, attr1289, activestatus
FROM hsi.rmobjectinstance1003
WHERE (attr1187 IS NOT NULL) AND (activestatus = 0)
Het doel van de view is om op een naam of een ID nummer te kunnen zoeken in een enkele query. Active status is hier het bovengenoemde filter. Momenteel duurt een query op deze views circa 7 seconde waardoor een gebruiker zo'n 10 seconde zit te wachten. In de oude on-prem omgeving hadden we dit niet. De SQL Query die uitgevoerd word op de view is de volgende:
SELECT * FROM hsi.rmobjectinstanceExternalParty WHERE key_attr LIKE 'variable%' and activeStatus = 0
Relevante software en hardware die ik gebruik:
AWS RDS
io1 storage met 32k IOPS
r5.2Xlarge instance
MS SQL 2019 Server Standard
Wat ik al gevonden of geprobeerd heb:
Een index op de view had wat kunnen betekenen maar helaas ondersteund een indexed view geen UNION functie. Andere optie kan mogelijk nog zijn de view er helemaal uit te halen en het zoeken te splitsen over 2 velden en dan direct op de tabel te queryen. Dit betekend dat ik van 7 naar 3/4 seconde ga. Maar misschien mis ik nog compleet iets in de omgeving wat een winst op kan leveren.