• tc982
  • Registratie: Oktober 2003
  • Laatst online: 21:03
Ik zit met een vervelend probleem.

Een klant van ons heeft een Database in SQL2000 Standard Edition, en het uitvoeren van een Query duurt meer dan 36 seconden, doe je dezelfde query op een standalone pc, duurt deze maar 3tot5 seconden. De standalone Pc is een P4 / 1.2Ghz / 256Mb Ram, de server is een HP Proliant ML350 G4p Server ( Xeon Processor )

Er is een case open bij Microsoft, maar aangezien het een performantie probleem is kunnen ze enkel maar een best effort doen. En ik ben er met hen nog niet echt uit geraakt, en ze hebben toch nog geen enkel deftig antwoord geformuleerd, of nog maar gekeken naar deze server

Dus een beetje meer uitleg :

OS : Windows 2003 Small Bussiness Server met SP2 + Full Patched using MS Update
SQL : SQL 2000 Standard Edition ( onderdeel van de SBS ) met SP4 erop

Hardware : HP Proliant ML 350 G4p Server
  • Processor : Intel Xeon Processor @ 3.20 Ghz
  • Memory : 2GB ECC DDR2 PC3200 400Mhz
  • Disks : SCSI 10K 72Gb in RAID5
Wat is er ondertussen allemaal gebeurd :
  • Upgrade van Proliant Support Pack naar versie 8.00
  • Firmware Maintenance CD 8.00
  • Uninstall van AntiVirus (F-Secure)
  • Uninstall van MSDE SQL's die draaien ( SBSMonitoring & F-Secure SQL )
  • Uninstall van APC Software
  • Uninstall van SBS Monitoring
  • Post SP2 Patch geinstalleerd : An update to turn off default SNP features is available for Windows Server 2003-based and Small Business Server 2003-based computers
  • Herinstallatie van de SQL Server - Remove + Reboot + Install + Import Database from Backup
  • Database Maintenance Plan manueel uitvoeren
  • Defragmentatie van de Database
  • Stoppen van alle andere Databases die in SQL staat
  • Booten met alle niet kritieke services gestopt ( MSConfig ) - dus geen exchange die draait enz.
  • SQL Best Practice Analyzer gedraaid , niets speciaal
  • Memory op minimum 1Gb gezet
Al deze zaken hebben niets uitgehaald, het geheugen verbruik is van 1.8Gb naar 800Mb teruggebracht, maar er is geen enkele performantie verbetering te vinden.

De SQL Query :
code:
1
2
select * from V_SV_cpnr
    where seizoen = 81 and tss > 0 and winkelnr = 3 and categorie < 1001 order by seizoen, merkomschr


En hier de View die hij probeert aan te spreken :
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
CREATE VIEW dbo.V_SV_Cpnr
AS
SELECT     TOP 100 PERCENT dbo.FMartikels.CpNr, dbo.FMartikels.ArtikelKode, dbo.FMartikels.Omschrijving, dbo.FMartikels.Seizoen, dbo.FMartikels.Merk, 
                      dbo.FMartikels.Categorie, dbo.FMartikels.Groep, dbo.FMartikels.Kleur, dbo.FMartikels.Sexe, dbo.FMartikels.Kode, dbo.FMartikels.Winkel, 
                      dbo.FMartikels.Matenbalk, dbo.FMmerken.Description AS Merkomschr, dbo.FMgroups.Description AS Groepomschr, 
                      dbo.FMseasons.Description AS Seizoenomschr, dbo.FMmatenbalken.Description AS Matenbalkomschr, dbo.FMartikels.Verkoopprijs, 
                      dbo.FMartikels.Aankoopprijs AS OrgAankoopprijs, dbo.FMartikels.Aankoopprijs * dbo.FMseasons.Afschrijving / 100 AS Aankoopprijs, 
                      dbo.FMseasons.Afschrijving, dbo.FMmatenbalken.MT1, dbo.FMmatenbalken.MT2, dbo.FMmatenbalken.MT3, dbo.FMmatenbalken.MT4, 
                      dbo.FMmatenbalken.MT5, dbo.FMmatenbalken.MT6, dbo.FMmatenbalken.MT7, dbo.FMmatenbalken.MT8, dbo.FMmatenbalken.MT9, 
                      dbo.FMmatenbalken.MT10, dbo.FMmatenbalken.MT11, dbo.FMmatenbalken.MT12, dbo.FMmatenbalken.MT13, dbo.FMmatenbalken.MT14, 
                      dbo.FMmatenbalken.MT15, dbo.FMmatenbalken.MT16, dbo.FMmatenbalken.MT17, dbo.FMmatenbalken.MT18, dbo.FMmatenbalken.MT19, 
                      dbo.FMmatenbalken.MT20, dbo.FMmatenbalken.MT21, dbo.FMmatenbalken.MT22, dbo.FMmatenbalken.MT23, dbo.FMmatenbalken.MT24, 
                      dbo.FMmatenbalken.MT25, ISNULL(dbo.V_Lev_Cpnr_Sum.L1 - dbo.V_Verk_Cpnr_sum.V1, dbo.V_Lev_Cpnr_Sum.L1) AS S1, 
                      ISNULL(dbo.V_Lev_Cpnr_Sum.L2 - dbo.V_Verk_Cpnr_sum.V2, dbo.V_Lev_Cpnr_Sum.L2) AS S2, 
                      ISNULL(dbo.V_Lev_Cpnr_Sum.L3 - dbo.V_Verk_Cpnr_sum.V3, dbo.V_Lev_Cpnr_Sum.L3) AS S3, 
                      ISNULL(dbo.V_Lev_Cpnr_Sum.L4 - dbo.V_Verk_Cpnr_sum.V4, dbo.V_Lev_Cpnr_Sum.L4) AS S4, 
                      ISNULL(dbo.V_Lev_Cpnr_Sum.L5 - dbo.V_Verk_Cpnr_sum.V5, dbo.V_Lev_Cpnr_Sum.L5) AS S5, 
                      ISNULL(dbo.V_Lev_Cpnr_Sum.L6 - dbo.V_Verk_Cpnr_sum.V6, dbo.V_Lev_Cpnr_Sum.L6) AS S6, 
                      ISNULL(dbo.V_Lev_Cpnr_Sum.L7 - dbo.V_Verk_Cpnr_sum.V7, dbo.V_Lev_Cpnr_Sum.L7) AS S7, 
                      ISNULL(dbo.V_Lev_Cpnr_Sum.L8 - dbo.V_Verk_Cpnr_sum.V8, dbo.V_Lev_Cpnr_Sum.L8) AS S8, 
                      ISNULL(dbo.V_Lev_Cpnr_Sum.L9 - dbo.V_Verk_Cpnr_sum.V9, dbo.V_Lev_Cpnr_Sum.L9) AS S9, 
                      ISNULL(dbo.V_Lev_Cpnr_Sum.L10 - dbo.V_Verk_Cpnr_sum.V10, dbo.V_Lev_Cpnr_Sum.L10) AS S10, 
                      ISNULL(dbo.V_Lev_Cpnr_Sum.L11 - dbo.V_Verk_Cpnr_sum.V11, dbo.V_Lev_Cpnr_Sum.L11) AS S11, 
                      ISNULL(dbo.V_Lev_Cpnr_Sum.L12 - dbo.V_Verk_Cpnr_sum.V12, dbo.V_Lev_Cpnr_Sum.L12) AS S12, 
                      ISNULL(dbo.V_Lev_Cpnr_Sum.L13 - dbo.V_Verk_Cpnr_sum.V13, dbo.V_Lev_Cpnr_Sum.L13) AS S13, 
                      ISNULL(dbo.V_Lev_Cpnr_Sum.L14 - dbo.V_Verk_Cpnr_sum.V14, dbo.V_Lev_Cpnr_Sum.L14) AS S14, 
                      ISNULL(dbo.V_Lev_Cpnr_Sum.L15 - dbo.V_Verk_Cpnr_sum.V15, dbo.V_Lev_Cpnr_Sum.L15) AS S15, 
                      ISNULL(dbo.V_Lev_Cpnr_Sum.L16 - dbo.V_Verk_Cpnr_sum.V16, dbo.V_Lev_Cpnr_Sum.L16) AS S16, 
                      ISNULL(dbo.V_Lev_Cpnr_Sum.L17 - dbo.V_Verk_Cpnr_sum.V17, dbo.V_Lev_Cpnr_Sum.L17) AS S17, 
                      ISNULL(dbo.V_Lev_Cpnr_Sum.L18 - dbo.V_Verk_Cpnr_sum.V18, dbo.V_Lev_Cpnr_Sum.L18) AS S18, 
                      ISNULL(dbo.V_Lev_Cpnr_Sum.L19 - dbo.V_Verk_Cpnr_sum.V19, dbo.V_Lev_Cpnr_Sum.L19) AS S19, 
                      ISNULL(dbo.V_Lev_Cpnr_Sum.L20 - dbo.V_Verk_Cpnr_sum.V20, dbo.V_Lev_Cpnr_Sum.L20) AS S20, 
                      ISNULL(dbo.V_Lev_Cpnr_Sum.L21 - dbo.V_Verk_Cpnr_sum.V21, dbo.V_Lev_Cpnr_Sum.L21) AS S21, 
                      ISNULL(dbo.V_Lev_Cpnr_Sum.L22 - dbo.V_Verk_Cpnr_sum.V22, dbo.V_Lev_Cpnr_Sum.L22) AS S22, 
                      ISNULL(dbo.V_Lev_Cpnr_Sum.L23 - dbo.V_Verk_Cpnr_sum.V23, dbo.V_Lev_Cpnr_Sum.L23) AS S23, 
                      ISNULL(dbo.V_Lev_Cpnr_Sum.L24 - dbo.V_Verk_Cpnr_sum.V24, dbo.V_Lev_Cpnr_Sum.L24) AS S24, 
                      ISNULL(dbo.V_Lev_Cpnr_Sum.L25 - dbo.V_Verk_Cpnr_sum.V25, dbo.V_Lev_Cpnr_Sum.L25) AS S25, 
                      (dbo.V_Lev_Cpnr_Sum.L1 - ISNULL(dbo.V_Verk_Cpnr_sum.V1, 0)) * ((dbo.FMartikels.Aankoopprijs + dbo.FMartikels.Ap1) 
                      * dbo.FMseasons.Afschrijving / 100) + (dbo.V_Lev_Cpnr_Sum.L2 - ISNULL(dbo.V_Verk_Cpnr_sum.V2, 0)) 
                      * ((dbo.FMartikels.Aankoopprijs + dbo.FMartikels.Ap2) * dbo.FMseasons.Afschrijving / 100) 
                      + (dbo.V_Lev_Cpnr_Sum.L3 - ISNULL(dbo.V_Verk_Cpnr_sum.V3, 0)) * ((dbo.FMartikels.Aankoopprijs + dbo.FMartikels.Ap3) 
                      * dbo.FMseasons.Afschrijving / 100) + (dbo.V_Lev_Cpnr_Sum.L4 - ISNULL(dbo.V_Verk_Cpnr_sum.V4, 0)) 
                      * ((dbo.FMartikels.Aankoopprijs + dbo.FMartikels.Ap4) * dbo.FMseasons.Afschrijving / 100) 
                      + (dbo.V_Lev_Cpnr_Sum.L5 - ISNULL(dbo.V_Verk_Cpnr_sum.V5, 0)) * ((dbo.FMartikels.Aankoopprijs + dbo.FMartikels.Ap5) 
                      * dbo.FMseasons.Afschrijving / 100) + (dbo.V_Lev_Cpnr_Sum.L6 - ISNULL(dbo.V_Verk_Cpnr_sum.V6, 0)) 
                      * ((dbo.FMartikels.Aankoopprijs + dbo.FMartikels.Ap6) * dbo.FMseasons.Afschrijving / 100) 
                      + (dbo.V_Lev_Cpnr_Sum.L7 - ISNULL(dbo.V_Verk_Cpnr_sum.V7, 0)) * ((dbo.FMartikels.Aankoopprijs + dbo.FMartikels.Ap7) 
                      * dbo.FMseasons.Afschrijving / 100) + (dbo.V_Lev_Cpnr_Sum.L8 - ISNULL(dbo.V_Verk_Cpnr_sum.V8, 0)) 
                      * ((dbo.FMartikels.Aankoopprijs + dbo.FMartikels.AP8) * dbo.FMseasons.Afschrijving / 100) 
                      + (dbo.V_Lev_Cpnr_Sum.L9 - ISNULL(dbo.V_Verk_Cpnr_sum.V9, 0)) * ((dbo.FMartikels.Aankoopprijs + dbo.FMartikels.Ap9) 
                      * dbo.FMseasons.Afschrijving / 100) + (dbo.V_Lev_Cpnr_Sum.L10 - ISNULL(dbo.V_Verk_Cpnr_sum.V10, 0)) 
                      * ((dbo.FMartikels.Aankoopprijs + dbo.FMartikels.Ap10) * dbo.FMseasons.Afschrijving / 100) 
                      + (dbo.V_Lev_Cpnr_Sum.L11 - ISNULL(dbo.V_Verk_Cpnr_sum.V11, 0)) * ((dbo.FMartikels.Aankoopprijs + dbo.FMartikels.Ap11) 
                      * dbo.FMseasons.Afschrijving / 100) + (dbo.V_Lev_Cpnr_Sum.L12 - ISNULL(dbo.V_Verk_Cpnr_sum.V12, 0)) 
                      * ((dbo.FMartikels.Aankoopprijs + dbo.FMartikels.Ap12) * dbo.FMseasons.Afschrijving / 100) 
                      + (dbo.V_Lev_Cpnr_Sum.L13 - ISNULL(dbo.V_Verk_Cpnr_sum.V13, 0)) * ((dbo.FMartikels.Aankoopprijs + dbo.FMartikels.Ap13) 
                      * dbo.FMseasons.Afschrijving / 100) + (dbo.V_Lev_Cpnr_Sum.L14 - ISNULL(dbo.V_Verk_Cpnr_sum.V14, 0)) 
                      * ((dbo.FMartikels.Aankoopprijs + dbo.FMartikels.Ap14) * dbo.FMseasons.Afschrijving / 100) 
                      + (dbo.V_Lev_Cpnr_Sum.L15 - ISNULL(dbo.V_Verk_Cpnr_sum.V15, 0)) * ((dbo.FMartikels.Aankoopprijs + dbo.FMartikels.Ap15) 
                      * dbo.FMseasons.Afschrijving / 100) + (dbo.V_Lev_Cpnr_Sum.L16 - ISNULL(dbo.V_Verk_Cpnr_sum.V16, 0)) 
                      * ((dbo.FMartikels.Aankoopprijs + dbo.FMartikels.Ap16) * dbo.FMseasons.Afschrijving / 100) 
                      + (dbo.V_Lev_Cpnr_Sum.L17 - ISNULL(dbo.V_Verk_Cpnr_sum.V17, 0)) * ((dbo.FMartikels.Aankoopprijs + dbo.FMartikels.Ap17) 
                      * dbo.FMseasons.Afschrijving / 100) + (dbo.V_Lev_Cpnr_Sum.L18 - ISNULL(dbo.V_Verk_Cpnr_sum.V18, 0)) 
                      * ((dbo.FMartikels.Aankoopprijs + dbo.FMartikels.Ap18) * dbo.FMseasons.Afschrijving / 100) 
                      + (dbo.V_Lev_Cpnr_Sum.L19 - ISNULL(dbo.V_Verk_Cpnr_sum.V19, 0)) * ((dbo.FMartikels.Aankoopprijs + dbo.FMartikels.Ap19) 
                      * dbo.FMseasons.Afschrijving / 100) + (dbo.V_Lev_Cpnr_Sum.L20 - ISNULL(dbo.V_Verk_Cpnr_sum.V20, 0)) 
                      * ((dbo.FMartikels.Aankoopprijs + dbo.FMartikels.Ap20) * dbo.FMseasons.Afschrijving / 100) 
                      + (dbo.V_Lev_Cpnr_Sum.L21 - ISNULL(dbo.V_Verk_Cpnr_sum.V21, 0)) * ((dbo.FMartikels.Aankoopprijs + dbo.FMartikels.Ap21) 
                      * dbo.FMseasons.Afschrijving / 100) + (dbo.V_Lev_Cpnr_Sum.L22 - ISNULL(dbo.V_Verk_Cpnr_sum.V22, 0)) 
                      * ((dbo.FMartikels.Aankoopprijs + dbo.FMartikels.Ap22) * dbo.FMseasons.Afschrijving / 100) 
                      + (dbo.V_Lev_Cpnr_Sum.L23 - ISNULL(dbo.V_Verk_Cpnr_sum.V23, 0)) * ((dbo.FMartikels.Aankoopprijs + dbo.FMartikels.Ap23) 
                      * dbo.FMseasons.Afschrijving / 100) + (dbo.V_Lev_Cpnr_Sum.L24 - ISNULL(dbo.V_Verk_Cpnr_sum.V24, 0)) 
                      * ((dbo.FMartikels.Aankoopprijs + dbo.FMartikels.Ap24) * dbo.FMseasons.Afschrijving / 100) 
                      + (dbo.V_Lev_Cpnr_Sum.L25 - ISNULL(dbo.V_Verk_Cpnr_sum.V25, 0)) * ((dbo.FMartikels.Aankoopprijs + dbo.FMartikels.Ap25) 
                      * dbo.FMseasons.Afschrijving / 100) AS TWS, dbo.FMcategories.Description AS CatOmschr, dbo.FMmodels.Description AS ModelOmschr, 
                      dbo.FMspecifications.Description AS SpecOmschr, dbo.FMartikels.Kwaliteit, dbo.FMquality.Description AS KwalOmschr, 
                      dbo.FMcolors.Description AS KleurOmschr, dbo.FMsexe.Description AS SexeOmschr, dbo.FMshops.Name AS WinkelOmschr, 
                      dbo.FMcodes.Description AS KodeOmschr, dbo.FMartikels.Model, dbo.FMartikels.Specificatie, ISNULL(dbo.V_Verk_Cpnr_sum.V1, 0) AS V1, 
                      ISNULL(dbo.V_Verk_Cpnr_sum.V2, 0) AS V2, ISNULL(dbo.V_Verk_Cpnr_sum.V3, 0) AS V3, ISNULL(dbo.V_Verk_Cpnr_sum.V4, 0) AS V4, 
                      ISNULL(dbo.V_Verk_Cpnr_sum.V5, 0) AS V5, ISNULL(dbo.V_Verk_Cpnr_sum.V6, 0) AS V6, ISNULL(dbo.V_Verk_Cpnr_sum.V7, 0) AS V7, 
                      ISNULL(dbo.V_Verk_Cpnr_sum.V8, 0) AS V8, ISNULL(dbo.V_Verk_Cpnr_sum.V9, 0) AS V9, ISNULL(dbo.V_Verk_Cpnr_sum.V10, 0) AS V10, 
                      ISNULL(dbo.V_Verk_Cpnr_sum.V11, 0) AS V11, ISNULL(dbo.V_Verk_Cpnr_sum.V12, 0) AS V12, ISNULL(dbo.V_Verk_Cpnr_sum.V13, 0) AS V13, 
                      ISNULL(dbo.V_Verk_Cpnr_sum.V14, 0) AS V14, ISNULL(dbo.V_Verk_Cpnr_sum.V15, 0) AS V15, ISNULL(dbo.V_Verk_Cpnr_sum.V16, 0) AS V16, 
                      ISNULL(dbo.V_Verk_Cpnr_sum.V17, 0) AS V17, ISNULL(dbo.V_Verk_Cpnr_sum.V18, 0) AS V18, ISNULL(dbo.V_Verk_Cpnr_sum.V19, 0) AS V19, 
                      ISNULL(dbo.V_Verk_Cpnr_sum.V20, 0) AS V20, ISNULL(dbo.V_Verk_Cpnr_sum.V21, 0) AS V21, ISNULL(dbo.V_Verk_Cpnr_sum.V22, 0) AS V22, 
                      ISNULL(dbo.V_Verk_Cpnr_sum.V23, 0) AS V23, ISNULL(dbo.V_Verk_Cpnr_sum.V24, 0) AS V24, ISNULL(dbo.V_Verk_Cpnr_sum.V25, 0) AS V25, 
                      ISNULL(dbo.V_Verk_Cpnr_sum.V1, 0) + ISNULL(dbo.V_Verk_Cpnr_sum.V2, 0) + ISNULL(dbo.V_Verk_Cpnr_sum.V3, 0) 
                      + ISNULL(dbo.V_Verk_Cpnr_sum.V4, 0) + ISNULL(dbo.V_Verk_Cpnr_sum.V5, 0) + ISNULL(dbo.V_Verk_Cpnr_sum.V6, 0) 
                      + ISNULL(dbo.V_Verk_Cpnr_sum.V7, 0) + ISNULL(dbo.V_Verk_Cpnr_sum.V8, 0) + ISNULL(dbo.V_Verk_Cpnr_sum.V9, 0) 
                      + ISNULL(dbo.V_Verk_Cpnr_sum.V10, 0) + ISNULL(dbo.V_Verk_Cpnr_sum.V11, 0) + ISNULL(dbo.V_Verk_Cpnr_sum.V12, 0) 
                      + ISNULL(dbo.V_Verk_Cpnr_sum.V13, 0) + ISNULL(dbo.V_Verk_Cpnr_sum.V14, 0) + ISNULL(dbo.V_Verk_Cpnr_sum.V15, 0) 
                      + ISNULL(dbo.V_Verk_Cpnr_sum.V16, 0) + ISNULL(dbo.V_Verk_Cpnr_sum.V17, 0) + ISNULL(dbo.V_Verk_Cpnr_sum.V18, 0) 
                      + ISNULL(dbo.V_Verk_Cpnr_sum.V19, 0) + ISNULL(dbo.V_Verk_Cpnr_sum.V20, 0) + ISNULL(dbo.V_Verk_Cpnr_sum.V21, 0) 
                      + ISNULL(dbo.V_Verk_Cpnr_sum.V22, 0) + ISNULL(dbo.V_Verk_Cpnr_sum.V23, 0) + ISNULL(dbo.V_Verk_Cpnr_sum.V24, 0) 
                      + ISNULL(dbo.V_Verk_Cpnr_sum.V25, 0) AS TSV, ISNULL(dbo.V_Verk_Cpnr_sum.V1, 0) * (dbo.FMartikels.Verkoopprijs + dbo.FMartikels.Vp1) 
                      + ISNULL(dbo.V_Verk_Cpnr_sum.V2, 0) * (dbo.FMartikels.Verkoopprijs + dbo.FMartikels.Vp2) + ISNULL(dbo.V_Verk_Cpnr_sum.V3, 0) 
                      * (dbo.FMartikels.Verkoopprijs + dbo.FMartikels.Vp3) + ISNULL(dbo.V_Verk_Cpnr_sum.V4, 0) * (dbo.FMartikels.Verkoopprijs + dbo.FMartikels.Vp4) 
                      + ISNULL(dbo.V_Verk_Cpnr_sum.V5, 0) * (dbo.FMartikels.Verkoopprijs + dbo.FMartikels.Vp5) + ISNULL(dbo.V_Verk_Cpnr_sum.V6, 0) 
                      * (dbo.FMartikels.Verkoopprijs + dbo.FMartikels.Vp6) + ISNULL(dbo.V_Verk_Cpnr_sum.V7, 0) * (dbo.FMartikels.Verkoopprijs + dbo.FMartikels.Vp7) 
                      + ISNULL(dbo.V_Verk_Cpnr_sum.V8, 0) * (dbo.FMartikels.Verkoopprijs + dbo.FMartikels.Vp8) + ISNULL(dbo.V_Verk_Cpnr_sum.V9, 0) 
                      * (dbo.FMartikels.Verkoopprijs + dbo.FMartikels.Vp9) + ISNULL(dbo.V_Verk_Cpnr_sum.V10, 0) * (dbo.FMartikels.Verkoopprijs + dbo.FMartikels.Vp10) 
                      + ISNULL(dbo.V_Verk_Cpnr_sum.V11, 0) * (dbo.FMartikels.Verkoopprijs + dbo.FMartikels.Vp11) + ISNULL(dbo.V_Verk_Cpnr_sum.V12, 0) 
                      * (dbo.FMartikels.Verkoopprijs + dbo.FMartikels.Vp12) + ISNULL(dbo.V_Verk_Cpnr_sum.V13, 0) * (dbo.FMartikels.Verkoopprijs + dbo.FMartikels.Vp13) 
                      + ISNULL(dbo.V_Verk_Cpnr_sum.V14, 0) * (dbo.FMartikels.Verkoopprijs + dbo.FMartikels.Vp14) + ISNULL(dbo.V_Verk_Cpnr_sum.V15, 0) 
                      * (dbo.FMartikels.Verkoopprijs + dbo.FMartikels.Vp15) + ISNULL(dbo.V_Verk_Cpnr_sum.V16, 0) * (dbo.FMartikels.Verkoopprijs + dbo.FMartikels.Vp16) 
                      + ISNULL(dbo.V_Verk_Cpnr_sum.V17, 0) * (dbo.FMartikels.Verkoopprijs + dbo.FMartikels.Vp17) + ISNULL(dbo.V_Verk_Cpnr_sum.V18, 0) 
                      * (dbo.FMartikels.Verkoopprijs + dbo.FMartikels.Vp18) + ISNULL(dbo.V_Verk_Cpnr_sum.V19, 0) * (dbo.FMartikels.Verkoopprijs + dbo.FMartikels.Vp19) 
                      + ISNULL(dbo.V_Verk_Cpnr_sum.V20, 0) * (dbo.FMartikels.Verkoopprijs + dbo.FMartikels.Vp20) + ISNULL(dbo.V_Verk_Cpnr_sum.V21, 0) 
                      * (dbo.FMartikels.Verkoopprijs + dbo.FMartikels.Vp21) + ISNULL(dbo.V_Verk_Cpnr_sum.V22, 0) * (dbo.FMartikels.Verkoopprijs + dbo.FMartikels.Vp22) 
                      + ISNULL(dbo.V_Verk_Cpnr_sum.V23, 0) * (dbo.FMartikels.Verkoopprijs + dbo.FMartikels.Vp23) + ISNULL(dbo.V_Verk_Cpnr_sum.V24, 0) 
                      * (dbo.FMartikels.Verkoopprijs + dbo.FMartikels.Vp24) + ISNULL(dbo.V_Verk_Cpnr_sum.V25, 0) * (dbo.FMartikels.Verkoopprijs + dbo.FMartikels.Vp25) 
                      AS TWV, dbo.V_Lev_Cpnr_Sum.LeveringWinkel AS WinkelNr, dbo.V_Lev_Cpnr_Sum.L1 - ISNULL(dbo.V_Verk_Cpnr_sum.V1, 0) 
                      + dbo.V_Lev_Cpnr_Sum.L2 - ISNULL(dbo.V_Verk_Cpnr_sum.V2, 0) + dbo.V_Lev_Cpnr_Sum.L3 - ISNULL(dbo.V_Verk_Cpnr_sum.V3, 0) 
                      + dbo.V_Lev_Cpnr_Sum.L4 - ISNULL(dbo.V_Verk_Cpnr_sum.V4, 0) + dbo.V_Lev_Cpnr_Sum.L5 - ISNULL(dbo.V_Verk_Cpnr_sum.V5, 0) 
                      + dbo.V_Lev_Cpnr_Sum.L6 - ISNULL(dbo.V_Verk_Cpnr_sum.V6, 0) + dbo.V_Lev_Cpnr_Sum.L7 - ISNULL(dbo.V_Verk_Cpnr_sum.V7, 0) 
                      + dbo.V_Lev_Cpnr_Sum.L8 - ISNULL(dbo.V_Verk_Cpnr_sum.V8, 0) + dbo.V_Lev_Cpnr_Sum.L9 - ISNULL(dbo.V_Verk_Cpnr_sum.V9, 0) 
                      + dbo.V_Lev_Cpnr_Sum.L10 - ISNULL(dbo.V_Verk_Cpnr_sum.V10, 0) + dbo.V_Lev_Cpnr_Sum.L11 - ISNULL(dbo.V_Verk_Cpnr_sum.V11, 0) 
                      + dbo.V_Lev_Cpnr_Sum.L12 - ISNULL(dbo.V_Verk_Cpnr_sum.V12, 0) + dbo.V_Lev_Cpnr_Sum.L13 - ISNULL(dbo.V_Verk_Cpnr_sum.V13, 0) 
                      + dbo.V_Lev_Cpnr_Sum.L14 - ISNULL(dbo.V_Verk_Cpnr_sum.V14, 0) + dbo.V_Lev_Cpnr_Sum.L15 - ISNULL(dbo.V_Verk_Cpnr_sum.V15, 0) 
                      + dbo.V_Lev_Cpnr_Sum.L16 - ISNULL(dbo.V_Verk_Cpnr_sum.V16, 0) + dbo.V_Lev_Cpnr_Sum.L17 - ISNULL(dbo.V_Verk_Cpnr_sum.V17, 0) 
                      + dbo.V_Lev_Cpnr_Sum.L18 - ISNULL(dbo.V_Verk_Cpnr_sum.V18, 0) + dbo.V_Lev_Cpnr_Sum.L19 - ISNULL(dbo.V_Verk_Cpnr_sum.V19, 0) 
                      + dbo.V_Lev_Cpnr_Sum.L20 - ISNULL(dbo.V_Verk_Cpnr_sum.V20, 0) + dbo.V_Lev_Cpnr_Sum.L21 - ISNULL(dbo.V_Verk_Cpnr_sum.V21, 0) 
                      + dbo.V_Lev_Cpnr_Sum.L22 - ISNULL(dbo.V_Verk_Cpnr_sum.V22, 0) + dbo.V_Lev_Cpnr_Sum.L23 - ISNULL(dbo.V_Verk_Cpnr_sum.V23, 0) 
                      + dbo.V_Lev_Cpnr_Sum.L24 - ISNULL(dbo.V_Verk_Cpnr_sum.V24, 0) + dbo.V_Lev_Cpnr_Sum.L25 - ISNULL(dbo.V_Verk_Cpnr_sum.V25, 0) AS TSS, 
                      dbo.FMartikels.LevModelOmschr, ISNULL(dbo.FMseasons.ZWkode, N'X') AS ZWkode, dbo.FMartikels.InterneRef
FROM         dbo.FMcategories INNER JOIN
                      dbo.FMseasons INNER JOIN
                      dbo.FMartikels INNER JOIN
                      dbo.V_Lev_Cpnr_Sum ON dbo.FMartikels.CpNr = dbo.V_Lev_Cpnr_Sum.CpNr INNER JOIN
                      dbo.FMmerken ON dbo.FMartikels.Merk = dbo.FMmerken.ID INNER JOIN
                      dbo.FMgroups ON dbo.FMartikels.Groep = dbo.FMgroups.ID ON dbo.FMseasons.ID = dbo.FMartikels.Seizoen INNER JOIN
                      dbo.FMmatenbalken ON dbo.FMartikels.Matenbalk = dbo.FMmatenbalken.ID ON dbo.FMcategories.ID = dbo.FMartikels.Categorie INNER JOIN
                      dbo.FMmodels ON dbo.FMartikels.Model = dbo.FMmodels.ID INNER JOIN
                      dbo.FMspecifications ON dbo.FMartikels.Specificatie = dbo.FMspecifications.ID INNER JOIN
                      dbo.FMquality ON dbo.FMartikels.Kwaliteit = dbo.FMquality.ID INNER JOIN
                      dbo.FMcolors ON dbo.FMartikels.Kleur = dbo.FMcolors.ID INNER JOIN
                      dbo.FMsexe ON dbo.FMartikels.Sexe = dbo.FMsexe.ID INNER JOIN
                      dbo.FMshops ON dbo.FMartikels.Winkel = dbo.FMshops.ID INNER JOIN
                      dbo.FMcodes ON dbo.FMartikels.Kode = dbo.FMcodes.ID LEFT OUTER JOIN
                      dbo.V_Verk_Cpnr_sum ON dbo.FMartikels.CpNr = dbo.V_Verk_Cpnr_sum.CpNr AND 
                      dbo.V_Lev_Cpnr_Sum.LeveringWinkel = dbo.V_Verk_Cpnr_sum.VerkoopWinkel
ORDER BY dbo.FMartikels.Merk, dbo.FMartikels.Groep


Hebben jullie nog suggesties? Ik kan wel niets wijzigen aan de Query's zelf, ben geen programmeur. Maar de programmeur in kwestie heeft er zich vanaf gemaakt door te stellen dat als hij het test op een andere machine ( ik stond ernaast ) effectief pakken sneller is.

Ik ben nu echt aan het einde van mijn beperkt SQL kennis.

Computers make very fast, very accurate mistakes.


  • StarWing
  • Registratie: Januari 2003
  • Laatst online: 14:32

StarWing

Huh ?!?

heb de mogelijkheid om de query te doen op een Raid1 set, of bij wijze van test op een single disk ?

Page intentionally left blank.


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Hoe groot is het log (.ldf) bestand?

Heb je de test op de standalone pc uitgevoerd met een kopie van de database van de server?

Wat zegt het executieplan (in QA, options, show query execution plan)? Zie je verschillen tussen beide machines?

[ Voor 30% gewijzigd door P_de_B op 03-07-2008 11:14 ]

Oops! Google Chrome could not find www.rijks%20museum.nl


  • JJvG
  • Registratie: Juli 2003
  • Laatst online: 02-12-2025
Bij performance problemen moet je eigenlijk eerst alle onderdelen van de keten inventariseren en daarna kunnen monitoren. In dit geval dus van je server: disk-i/o, geheugengebruik en van je dataset: hoe groot is die, hoe staan de indexen? wat is je execution plan van de query?

Als ik globaal naar je query kijk dank denk ik dat je datamodel ook nog enige review nodig heeft, omdat er niet echt beschrijvende namen zijn gebruikt voor de kolomnamen in de views (V_Lev_Cpnr_Sum, V_Verk_Cpnr_sum). Verder: om een view in een view te gebruiken, kan natuurlijk ook voor problemen zorgen.

SELECT TOP 100 PERCENT is niet nuttig wat daarmee haal je gewoon alles op. Kun je dus vervangen door SELECT. Het casten van alle NULL-values (met ISNULL()) is trouwens ook een behoorlijke aanslag op je query-performance, denk ik. Je kolom TWS en TWV zijn echt killing wat dat betreft.

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
JJvG schreef op donderdag 03 juli 2008 @ 11:40:
Bij performance problemen moet je eigenlijk eerst alle onderdelen van de keten inventariseren en daarna kunnen monitoren. In dit geval dus van je server: disk-i/o, geheugengebruik en van je dataset: hoe groot is die, hoe staan de indexen? wat is je execution plan van de query?

Als ik globaal naar je query kijk dank denk ik dat je datamodel ook nog enige review nodig heeft, omdat er niet echt beschrijvende namen zijn gebruikt voor de kolomnamen in de views (V_Lev_Cpnr_Sum, V_Verk_Cpnr_sum). Verder: om een view in een view te gebruiken, kan natuurlijk ook voor problemen zorgen.

SELECT TOP 100 PERCENT is niet nuttig wat daarmee haal je gewoon alles op. Kun je dus vervangen door SELECT. Het casten van alle NULL-values (met ISNULL()) is trouwens ook een behoorlijke aanslag op je query-performance, denk ik. Je kolom TWS en TWV zijn echt killing wat dat betreft.
Met ISNULL cast je niet, hij haalt een andere waarde op als de eerste waarde NULL is. De select top 100 percent is nodig omdat er een ORDER BY in de view staat. Dit kan alleen als je een select top 100 percent doet. Het is gebruikelijker om de ORDER BY te doen in de query waarin je de view aanroept, maar als je in de view een volgorde wilt afdwingen moet je het zo doen.

Ik ben het wel met je eens dat de query niet uitblinkt in duidelijkheid, en dat het wellicht beter zou kunnen, maar dat verklaart niet waarom de query op een mindere pc een stuk snelller draait.

Oops! Google Chrome could not find www.rijks%20museum.nl


  • tc982
  • Registratie: Oktober 2003
  • Laatst online: 21:03
StarWing schreef op donderdag 03 juli 2008 @ 11:11:
heb de mogelijkheid om de query te doen op een Raid1 set, of bij wijze van test op een single disk ?
Spijtig genoeg niet. Ik heb de test natuurlijk kunnen doen op een standalone pc.
P_de_B schreef op donderdag 03 juli 2008 @ 11:14:
Hoe groot is het log (.ldf) bestand?

Heb je de test op de standalone pc uitgevoerd met een kopie van de database van de server?

Wat zegt het executieplan (in QA, options, show query execution plan)? Zie je verschillen tussen beide machines?
De log file is 1Mb, de testen zijn gebeurd met een identieke kopie van de server database, we hebben dan ook deze kopie database een gebackupped en gerestored in de orginele, heeft geen verschil. In de execution plan zie ik geen directe verschillen.
JJvG schreef op donderdag 03 juli 2008 @ 11:40:
Bij performance problemen moet je eigenlijk eerst alle onderdelen van de keten inventariseren en daarna kunnen monitoren. In dit geval dus van je server: disk-i/o, geheugengebruik en van je dataset: hoe groot is die, hoe staan de indexen? wat is je execution plan van de query?

Als ik globaal naar je query kijk dank denk ik dat je datamodel ook nog enige review nodig heeft, omdat er niet echt beschrijvende namen zijn gebruikt voor de kolomnamen in de views (V_Lev_Cpnr_Sum, V_Verk_Cpnr_sum). Verder: om een view in een view te gebruiken, kan natuurlijk ook voor problemen zorgen.
Ik begrijp dat de SQL queries niet deftig zijn, maar daar kan ik echt niets aan aanpassen, het is een programma voor een kassa systeem, en deze is geschreven door een andere persoon. En hij vond dat dit ons probleem is |:(

disk i/o is laag, ik heb alles gestopt gehad met de msconfig en opstarten met enkel de SQL services ( zelfs manueel gestart ), het geheugen verbruik is nu nog maar 800Mb van de 2Gb die er is. ik weet wel niet hoe ik hier het excecution plan kan neergooien, is toch redelijk veel.

Computers make very fast, very accurate mistakes.


  • tc982
  • Registratie: Oktober 2003
  • Laatst online: 21:03
Niemand nog een idee?

Computers make very fast, very accurate mistakes.


  • Rolfie
  • Registratie: Oktober 2003
  • Laatst online: 21:56
staat je database in Full recovery of Simple mode?
Check een voor de zekerheid of er geen verschil zit in de Service Packs of nog beter op de hotfixes of extra SQl pachtes die je geinstalleerd hebt staan.
Ik heb het probleem ook eens een keer gehad dat de ene SQL query op machine 1 in 2a3 seconde draaide, en op de andere machine 30a60 seconden er over deed. Het verschil zat hem toen in een SQL patch.

  • tc982
  • Registratie: Oktober 2003
  • Laatst online: 21:03
Rolfie schreef op zondag 06 juli 2008 @ 09:01:
staat je database in Full recovery of Simple mode?
Check een voor de zekerheid of er geen verschil zit in de Service Packs of nog beter op de hotfixes of extra SQl pachtes die je geinstalleerd hebt staan.
Ik heb het probleem ook eens een keer gehad dat de ene SQL query op machine 1 in 2a3 seconde draaide, en op de andere machine 30a60 seconden er over deed. Het verschil zat hem toen in een SQL patch.
Van het patch niveau ben ik zeker, ze hebben allebei SP4 en kan dus niet hoger gaan. MS Update geeft in ieder geval geen extra updates weer.

op de gewone pc was het ook een SQL 2000 ( zelfde cd ) en SP4

Computers make very fast, very accurate mistakes.


  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)

Ik ben geen MSSQL kenner, maar je geeft aan een backup en restore gedaan te hebben - dat is toch nog net iets anders dan een echte 100% copie denk ik.

Als je de LDF en MDF file(s) van de slecht performende database nu eens gewoon 'attached' op een test systeem, is de performantie dan net zo slecht? :)

  • tc982
  • Registratie: Oktober 2003
  • Laatst online: 21:03
elevator schreef op zondag 06 juli 2008 @ 13:36:
Ik ben geen MSSQL kenner, maar je geeft aan een backup en restore gedaan te hebben - dat is toch nog net iets anders dan een echte 100% copie denk ik.

Als je de LDF en MDF file(s) van de slecht performende database nu eens gewoon 'attached' op een test systeem, is de performantie dan net zo slecht? :)
ik heb beide geprobeerd, we zijn begonnen met een directe copy, dan eens een backup gerestored naar deze sql en getest, en dan deze copy terug op de server gezet en getest en getest.

Computers make very fast, very accurate mistakes.


  • SKiLLa
  • Registratie: Februari 2002
  • Niet online

SKiLLa

Byte or nibble a bit ?

Weet je zeker dat je RAID5 niet "degraded" is op de server ? En heeft de server het niet druk met andere taken (CPU load) ? Of heb je misschien AV software op de server draaien die in de weg zit ?

'Political Correctness is fascism pretending to be good manners.' - George Carlin


  • tc982
  • Registratie: Oktober 2003
  • Laatst online: 21:03
SKiLLa schreef op zondag 06 juli 2008 @ 14:09:
Weet je zeker dat je RAID5 niet "degraded" is op de server ? En heeft de server het niet druk met andere taken (CPU load) ? Of heb je misschien AV software op de server draaien die in de weg zit ?
De RAID5 controller is niet degraded. Battery Cache is nog steeds in orde. CPU Load is gemiddeld 2% ! Als ik de Query uitvoer is deze 50%. Er is geen AV meer geinstalleerd, deze is van de server gehaald ( for time being )

Computers make very fast, very accurate mistakes.


  • tc982
  • Registratie: Oktober 2003
  • Laatst online: 21:03
Juist een test gedaan : Overall Write Speed 33982 KB/Sec op een Proliant ML350 G4 van een andere klant : 36205 KB/Sec. is nu toch geen groot verschil.

Computers make very fast, very accurate mistakes.


  • SKiLLa
  • Registratie: Februari 2002
  • Niet online

SKiLLa

Byte or nibble a bit ?

Hebbie de betreffende database al eens ge-shrinked op de server ? Staat tracing aan op server-niveau ofzo ? Geen index-changes de laatste tijd ? Eventlog al bekeken op rare dingen ? En de query is zo traag vanuit de EM toch ? Maakt het nog (veel) uit of je de query draait vanuit de EM op de server of vanaf een client ?

'Political Correctness is fascism pretending to be good manners.' - George Carlin


  • tc982
  • Registratie: Oktober 2003
  • Laatst online: 21:03
SKiLLa schreef op zondag 06 juli 2008 @ 16:19:
Hebbie de betreffende database al eens ge-shrinked op de server ? Staat tracing aan op server-niveau ofzo ? Geen index-changes de laatste tijd ? Eventlog al bekeken op rare dingen ? En de query is zo traag vanuit de EM toch ? Maakt het nog (veel) uit of je de query draait vanuit de EM op de server of vanaf een client ?
Shrink staat in de TS, dus ja. tracing? geen idee...

Geen index changes de laatste tijd, is ineens gekomen. Op een client krijg je een timeout omdat het programma van de kassa in vb6 is geschreven met een timeout van 30seconden

Computers make very fast, very accurate mistakes.

Pagina: 1