Search

onze sponsors

microsoft_logo.gif


 

computrain_logo.JPG

Forum Login | Register
   Forum

 

Subject: Cost of indexed views when updating
Prev Next
You are not authorized to post a reply.

Author Messages
Dave HoogendoornUser is Offline

Posts:8

22-11-2009 23:16:05 Alert 

Hoi,

Kan iemand mij aangeven of de impact die een indexed view heeft op updates van onderliggende tabellen vooraf te berekenen is?

Ik verwacht dat deze updates meer tijd gaan kosten bij het gebruik van een of meer indexed views. Hoewel MS in haar documentatie aangeeft dat OLAP databases het meeste voordeel hebben bij het gebruik van indexed views, zegt Microsoft niet dat er geen voordeel is te behalen bij OLTP databases. Dit kost uiteraard e.e.a. aan uitzoekwerk om te bepalen hoe deze indexed view er uit moet gaan zien, dit zal echter geen probleem zijn schat ik in. De truuk is uiteraard een goede balans te vinden tussen de indexed views en de OLTP tabellen. De extra tijd die het kost om updates en inserts te verwerken in de indexed views moet opwegen tegen het voordeel van de indexed view. Het lijkt mij dat hier een formule voor zou moeten zijn. Is er iemand die zich hier al eens mee bezig heeft gehouden?

Als er iemand is die zijn ervaring wil delen, graag!

B.v.d.

Dave

 

Rob PellicaanUser is Offline

Posts:11

23-11-2009 09:47:06 Alert 
Dave,

Ik ben niet bekend met een formule hiervoor en het lijkt mij onwaarschijnlijk dat zo 'magic formula' bestaat. Er zijn namelijk talloze variabelen die mee kunnen spelen. Een indexed view kan al oneindig veel variaties hebben. Is het een aggregate? Zitten er veel computed columns in? Zullen er veel page splits onstaan bij updates? Blokkeren de queries momenteel de updates (of andersom) door locks op de tabel of een of meerdere indexen? Etc, etc?

Ik denk dat het eenvoudiger is om het gewoon te testen. Als een update na het leggen van een indexed view van 0,1 seconde naar 0,2 seconde gaat is dit een flink verschil, maar is het wellicht toch een acceptable trade-off voor een query die van 30 seconden naar 5 seconden gaat en dagelijks 1000 keer wordt uitgevoerd.

Een goed begin is te kijken hoeveel updates (writes) er uitgevoerd worden versus het aantal reads op de tabel. Bijvoorbeeld met onderstaande query. Vinden er meer writes dan reads plaats, dan heeft het waarschijnlijk geen nut.

-- Possible Bad Indexes (writes > reads)
SELECT OBJECT_NAME(s.[object_id]) AS [Table Name], i.name AS [Index Name], i.index_id,
user_updates AS [Total Writes], user_seeks + user_scans + user_lookups AS [Total Reads],
user_updates - (user_seeks + user_scans + user_lookups) AS [Difference]
FROM sys.dm_db_index_usage_stats AS s WITH (NOLOCK)
INNER JOIN sys.indexes AS i WITH (NOLOCK)
ON s.[object_id] = i.[object_id]
AND i.index_id = s.index_id
WHERE OBJECTPROPERTY(s.[object_id],'IsUserTable') = 1
AND s.database_id = DB_ID()
AND user_updates > (user_seeks + user_scans + user_lookups)
AND i.index_id > 1
ORDER BY [Difference] DESC, [Total Writes] DESC, [Total Reads] ASC;


IJeb ReitsmaUser is Offline

Posts:9

23-11-2009 10:24:16 Alert 

Ik heb in het verleden indexed views toegepast op een OLTP database voor aggregaties. Bij grote hoeveelheden records kan hiermee het aantal reads drastisch verminderd worden.
Dit met de Enterprise versie van SQL Server 2005, deze kan zelf bepalen of met de indexed view voordeel te behalen is ten opzichte van het gebruik van de onderliggende tabellen.

Mijn werkwijze was als volgt:
- Zoek de queries die de meeste reads veroorzaken met DMV's en/of tracing. Hierbij is het ook van belang hoe vaak een bepaalde query wordt uitgevoerd.
- Maak de indexed views die passen bij de duurste queries (in dit geval SUM). Dit zijn degene die veel reads veroorzaken en/of vaak worden uitgevoerd.
- Kijk hierna of de indexed views ook daadwerkelijk gebruikt worden. Als dit niet het geval is kan je ze natuurlijk beter verwijderen.
- Hierna weer hetzelfde vanaf stap 1, ook rekening houdende met writes.

André KammanUser is Offline
PASS Nederland

Posts:137


24-11-2009 01:23:56 Alert 

Hoi Dave,

Let er wel even op dat er nogal wat voorwaarden zijn waaraan je moet voldoen : http://msdn.microsoft.com/en-us/library/aa933148(SQL.80).aspx
Ook als je partitioning gebruik zijn er een paar dingen waar je op moet letten (beter geworden in 2k8 trouwens) : http://technet.microsoft.com/en-us/library/bb964715.aspx

Ik ben het overgens eens met IJeb en Rob, je moet er even over nadenken maar de winst kan groot zijn.

Groeten,

André

Dave HoogendoornUser is Offline

Posts:8

26-11-2009 23:50:46 Alert 
Andre,

Met name de tweede link bevat nieuwe informatie voor mij. Bedankt!

Gr Dave
You are not authorized to post a reply.
Forums > Forums > Performance (SIG) > Cost of indexed views when updating



ActiveForums 3.6
  
Copyright (c) 2012 PASS Nederland   Privacy Statement  Terms Of Use