Closed VYJR-COWI closed 11 months ago
557058:622a62a3-9bf2-41ae-8c7b-ca3a891081a8:
Det er svært at svare på hvor ofte de 8 SP er blevet brugt, samt det enkelte View. Det afhænger af planer i Cachen. Hvis Plan Cache er ustabil, så er information om brug af SP også mangelfuld.
I Region Sjælland tyder det på at jar_HentMatrikelEjere_sp og jar_ngis_HentMatrikelEjerInfo_sp ikke bliver brugt.
View v_gisflader_hint bruges i minimum wms tema Alle_godkendte og Alle_godkendte_filter, som anvendes ofte.
/* Hvor ofte køres SP så https://learn.microsoft.com/en-us/sql/relational-databases/system-dynamic-management-views/sys-dm-exec-procedure-stats-transact-sql?view=sql-server-ver16 */ SELECT TOP 10 d.object_id, d.database_id, OBJECT_NAME(object_id, database_id) 'SP', d.cached_time, d.last_execution_time, d.total_elapsed_time, d.total_elapsed_time/d.execution_count AS [avg_elapsed_time], d.last_elapsed_time, d.execution_count FROM sys.dm_exec_procedure_stats AS d WHERE OBJECT_NAME(object_id, database_id) IN (SELECT o.Name FROM sys.sql_modules m INNER JOIN sys.objects o ON o.object_id = m.object_id WHERE m.definition LIKE '%WITH%(Index%' ) ORDER BY SP ASC; GO
Cached planer som anvender View v_gisflader_hint (tager lang tid at køre):
declare @search_string nvarchar(255) set @search_string = 'v_gisflader_hint' SELECT DB_NAME(t.[dbid]) AS [Database Name], t.text AS [Query Text], qs.total_worker_time AS [Total Worker Time], qs.total_worker_time/qs.execution_count AS [Avg Worker Time], qs.max_worker_time AS [Max Worker Time], qs.total_elapsed_time/qs.execution_count AS [Avg Elapsed Time], qs.max_elapsed_time AS [Max Elapsed Time], qs.total_logical_reads/qs.execution_count AS [Avg Logical Reads], qs.max_logical_reads AS [Max Logical Reads], qs.execution_count AS [Execution Count], qs.creation_time AS [Creation Time], qp.query_plan AS [Query Plan] FROM sys.dm_exec_query_stats AS qs WITH (NOLOCK) CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS t CROSS APPLY sys.dm_exec_query_plan(plan_handle) AS qp WHERE CAST(query_plan AS NVARCHAR(MAX)) LIKE ('%' + @search_string + '%') AND t.[dbid] = DB_ID() ORDER BY qs.total_worker_time DESC OPTION (RECOMPILE); GO
557058:622a62a3-9bf2-41ae-8c7b-ca3a891081a8:
Bemærk, at hvis Index hints ikke længere anvendes, så bliver v_gisflader_hint overflødig, da det tilsvarende View v_gisflader blot kan anvendes.
557058:d4aadeb7-abfa-4df0-8db0-03abecf92fe8:
Hej Kim,
Kan du godkende vores overslag på analysen af
JAR-1693
Closed
på følgende?
Seniorkonsulent: 40 timer
Projektleder: 4 timer
Pris: 38768 DKK
Analysen beskrives med følgende trin:
Mvh
Anders
557058:622a62a3-9bf2-41ae-8c7b-ca3a891081a8:
Hvis dette er en analyse, så kan det ikke godkendes. Det er en opgave som skal udføres.
557058:c389ac26-5aa4-43e2-bf4c-7b2c3cde322c:
Der udarbejdes script til at kunne køres hos regionerne.
557058:622a62a3-9bf2-41ae-8c7b-ca3a891081a8:
Så er det godkendt
557058:55eec49a-f472-4fa2-8785-468150a6a64e:
Godkendt af region syd.
Hermed godkendes analyse & udviklingsarbejde (scripts) svarende til:
Seniorkonsulent: 40 timer
Projektleder: 4 timer
Pris: 38768 DKK
mvh
Kim
Hej Peter Riis
Jeg finder nogle flere WITH INDEX hvis jeg modificere din query en smule:
WHERE m.definition LIKE '%WITH%Index%'
Fx finder jeg denne:
FROM e_gis gf WITH (nolock,INDEX(IX_e_gis_spatial))
Det betyder at der i stedet for 9, findes 15 objekter.
Opklarende spørgsmål:
Mvh Magnus
557058:622a62a3-9bf2-41ae-8c7b-ca3a891081a8:
Hej Magnus-Matias Isbrand Høirup .
Tak for input. Ja, de skal inkluderes. Vi vil ikke have index hints i databasen.
Hej Peter Riis
Jeg kommer til at skulle bruge længere tid på at teste de ekstra objekter. Noget af det som kan komme til at tage tid er at finde ud af hvordan de bruges, hvis de ikke er refereret direkte i koden, men kaldes via andre objekter i databasen.
I forhold til at teste performance kan det være der være variation og caching som gør det svært at få retvisende resultat.
Opklarende spørgsmål
557058:622a62a3-9bf2-41ae-8c7b-ca3a891081a8:
Jeg er med på at det kan komme til at tage længere tid, men måske ikke så meget. Lad os tage udgangspunkt i et eksempel og evt. tage et kort møde hvor vi ser på det sammen.
Hej Peter Riis
Lad os gøre det. Er der et tidspunkt der passer dig?
Jeg har ingen møder i dag og du kan ringe til mig via Teams (mi@cowi.dk)
aftalte med Peter Riis at teste performance for objekterne, med og uden index hints via:
set statistics io, time on;
og ved at tjekke execute planen for om de samme indexes bruges, når hints er fjernet.
Hej Peter Riis
Jeg har ikke kunne se nogen klar forskel i performance.
Har inkluderet queries, hvor alle objekter med postfix “_test_mi“ har fået fjernet index hint:
resultater er i markdown. Sig til hvis jeg skal sende dem i et andet format.
Skal jeg gå videre med opgaven og lave update scripts til at fjerne index hints?
557058:622a62a3-9bf2-41ae-8c7b-ca3a891081a8:
Det ser fint ud. Statistikken viser det forventede resultat af testen.
Hej Peter Riis
Filip spurgte om jeg kunne dele info om testen, men alle gemte resultater findes i filen performance.md, så jeg har ikke noget ud over det.
Er det noget specifikt som du tænkte på?
557058:622a62a3-9bf2-41ae-8c7b-ca3a891081a8:
Hej Magnus-Matias Isbrand Høirup
Jeg vil gerne have at I lige laver en opsamling / resumé på det arbejde du har udført.
F.eks., at alle index hints er blevet fjernet, samt at testen viste at de forventede spatiale index blev benyttet, samt at performance ikke gik ned. Altså en pæn opsamling på issuet.
Hej Peter Riis
Hermed en opsummering.
557058:622a62a3-9bf2-41ae-8c7b-ca3a891081a8:
Perfekt! Tak.
557058:622a62a3-9bf2-41ae-8c7b-ca3a891081a8:
Jeg kan ikke selv teste denne, da jeg ikke hare adgang til databasen.
Tom Birch Hansen , har du mulighed for at tjekke om der er ryddet op i index hints? Se scripts på issuet.
557058:ed1eff09-a56d-46ea-ac1a-1cc75f509e96:
Peter Riis Når jeg kører scriptet ‘index hints.sql’ på jar_test databasen, kan jeg se at den finder een post:
dbo.jar_HentMatrikelEjere_sp
Er der andet jeg kan gøre for at checke efter hints?
557058:622a62a3-9bf2-41ae-8c7b-ca3a891081a8:
Tom Birch Hansen , vil du tjekke at “index hint” delen er udkommenteret? Og evt. vedhæftet definitionen på dbo.jar_HentMatrikelEjere_sp?
557058:ed1eff09-a56d-46ea-ac1a-1cc75f509e96:
Peter Riis Jeg kan se at det er udkommenteret i dbo.jar_hentmatrikelejere_sp, dvs der er ingen hints
557058:622a62a3-9bf2-41ae-8c7b-ca3a891081a8:
Tak, jeg lukker issue.
[Originally blocks: RSJAELLAND-96]
Der er 9 objekter i JAR db som benytter Index Hints. Se vedhæftet sql.
Dette er skadeligt for SQL Server performance, da vi altid tvinger SQL Server til at bruge en bestemt Execution Plan, selvom SQL Server kunne komme op med en bedre plan for eksekvering af SQL Statement.
https://www.brentozar.com/blitz/query-hints-optimizer/, https://www.brentozar.com/archive/2010/03/2-features-of-sql-server-you-should-avoid/, https://www.brentozar.com/archive/2013/10/index-hints-helpful-or-harmful/.
Index Hints bør kun anvendes til at teste indexes og aldrig i produktionen.
Som eksempel, så anvender v_gisflader_hint Index Hint på IX_e_gis_spatial, selvom der ingen Spatial analyse sker i viewet. Dvs. vi har et View som performer ekstremt langsomt. Performance kan testes med:
WITH (INDEX(IX_e_gis_spatial),nolock) --Med Index Hint
WITH (nolock) --WITH (INDEX(IX_e_gis_spatial),nolock) --Uden Index Hint
Et andet eksempel er på jar_ngis_HentMatrikelInfo_sp hvor Index Hint anvendes på IX_e_gis_matrikel_spatial.
Her kan WITH(INDEX(IX_e_gis_matrikel_spatial)) udkomenteres og der testes om SQL Server selv vil bruge indekset. Det er præcis hvad der sker:
Cowi skal derfor fjerne Index Hints fra alle 9 objekter, samt teste at performance er mindst lige så god som tidligere. Hvis man forventer, at Spatial Index anvendes, så undersøges det om disse indexes så også bruges, uden Index Hints.
Da Syd har SQL Server 2014, så skal dette testes med Compatibility Mode 2014.
Cowi beskriver hvad de har gjort og hvordan, samt performance målinger før og efter.
Såfremt fjernelse af Index Hints ikke har en negativ Impact på performance, så implementeres disse ændringer i en release.
Originally reported by , imported from: Oprydning i Index Hints i JAR db