Mon entreprise estime que nous alimentons certains rapports. On m'a présenté le problème de l'expiration du délai par l'un des gestionnaires qui utilise le rapport. Après une enquête, j'ai trouvé qu'il fallait 5 minutes pour retourner 93 000 enregistrements de la procédure stockée, et 3 minutes pour retourner 68 000 enregistrements faisant une déclaration de sélection à partir de la vue avec 1 clause ajoutée (pour la spécification de l'année). Après avoir exécuté la sélection avec le plan d'exécution activé, je suis passé de 3 minutes à 16 secondes sur les 68 000 enregistrements en ajoutant un index qui manquait. Est encore trop lent pour que je sois d'accord avec cela car cela ne devrait pas prendre plus d'une seconde ou 2.Lenteur des résultats de la requête de vue
Le plan d'exécution a un coût de 84% dans mon analyse d'index en cluster. J'ai trouvé une autre question ici demandant comment ils peuvent réduire cela et essayé la solution mais cela n'a eu aucun effet pour moi. Je ne suis pas un DBA mais un développeur asp.net donc je ne connais pas les petits détails de l'indexation et de l'optimisation.
La requête ne fait pas un select * que d'autres ont suggéré de ne pas faire comme on le voit ci-dessous:
SELECT
[Customer_Type]
,[Customer]
,[Unit_Number]
,[Cert_Number]
,[Effective_Date]
,[Expiration_Date]
,[Coverage]
,[CoveragePercentThefts]
,[Amount]
,[Facility_Name]
,[Facility_Policy_Number]
,[Accounting_Period]
,[Entry_Date]
,[Entry_Month]
,[Entry_Year]
,[FTD]
,[Month_FTD]
,[Year_FTD]
,[Entry_By]
,[Net_payment]
,[transaction_code]
,[Facility_Address]
,[Facility_City]
,[Facility_State]
,[Full_Name]
,[CalculatedNet]
,[PctTenantsInsured]
FROM
[Policy_Tracking].[dbo].[vw_Facility_Detail_Report_V4]
WHERE
Year_FTD = '2016'
Est-ce que l'esprit de quelqu'un me aider obtenir cela à un meilleur nombre? J'apprécie l'aide.
EDIT:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [dbo].[vw_Facility_Detail_Report_V4]
AS
SELECT
dbo.Customer_Types.Customer_Type,
CASE
WHEN Customer_Types.Customer_Type = 'I'
THEN CUSTOMERS.First_Name + ' ' + CUSTOMERS.Last_Name
WHEN Customer_Types.Customer_Type = 'O'
AND CUSTOMERS.Organization_Name > ''
THEN CUSTOMERS.Organization_Name
ELSE CUSTOMERS.First_Name + ' ' + CUSTOMERS.Last_Name
END AS Customer,
dbo.POLICYS.Unit_Number, dbo.POLICYS.Cert_Number,
dbo.POLICYS.Effective_Date, dbo.POLICYS.Expiration_Date,
dbo.Coverages.Coverage, dbo.CoveragePercentThefts.Description AS CoveragePercentThefts,
dbo.PAYMENTS_Transactions.Amount, dbo.FACILITYS.Facility_Name,
dbo.FACILITYS.Facility_Policy_Number,
dbo.PAYMENTS_Transactions.Accounting_Period,
dbo.PAYMENTS_Transactions.Mod_Date AS Entry_Date,
MONTH(dbo.PAYMENTS_Transactions.Mod_Date) AS Entry_Month,
YEAR(dbo.PAYMENTS_Transactions.Mod_Date) AS Entry_Year,
dbo.PAYMENTS_Transactions.Transaction_Date AS FTD,
MONTH(dbo.PAYMENTS_Transactions.Transaction_Date) AS Month_FTD,
YEAR(dbo.PAYMENTS_Transactions.Transaction_Date) AS Year_FTD,
dbo.PAYMENTS_Transactions.Mod_ID AS Entry_By,
dbo.siteLink_Statement.dcNetPayment AS Net_payment,
dbo.PAYMENTS_Transactions.Payment_Tran_Code_ID AS transaction_code,
dbo.FACILITYS.Address AS Facility_Address,
dbo.FACILITYS.City AS Facility_City, dbo.FACILITYS.State AS Facility_State,
dbo.CUSTOMERS.Full_Name,
dbo.PAYMENTS_Transactions.Amount - dbo.FACILITYS.Commission_Rate * .01 * dbo.PAYMENTS_Transactions.Amount AS CalculatedNet,
dbo.siteLink_Statement.dcPctTenantsInsured AS PctTenantsInsured
FROM
dbo.Customer_Types
RIGHT OUTER JOIN
dbo.CUSTOMERS ON dbo.Customer_Types.ID = dbo.CUSTOMERS.Customer_Type_ID
RIGHT OUTER JOIN
dbo.Policy_Facility_Customer
INNER JOIN
dbo.POLICYS ON dbo.Policy_Facility_Customer.Cert_Number = dbo.POLICYS.Cert_Number
INNER JOIN
dbo.FACILITYS ON dbo.POLICYS.Facility_Policy_Number = dbo.FACILITYS.Facility_Policy_Number
AND dbo.Policy_Facility_Customer.Facility_ID = dbo.FACILITYS.ID
LEFT OUTER JOIN
dbo.Coverages ON dbo.POLICYS.Coverage_ID = dbo.Coverages.ID
LEFT OUTER JOIN
dbo.CoveragePercentThefts ON dbo.POLICYS.Coverage_Percent_Theft_ID = dbo.CoveragePercentThefts.ID
ON dbo.CUSTOMERS.ID = dbo.Policy_Facility_Customer.Customer_ID
RIGHT OUTER JOIN
dbo.PAYMENTS_Transactions ON dbo.POLICYS.Cert_Number = dbo.PAYMENTS_Transactions.Cert_Number
LEFT OUTER JOIN
dbo.siteLink_Statement ON dbo.FACILITYS.Facility_Policy_Number = dbo.siteLink_Statement.SSFNumber
AND MONTH(dbo.PAYMENTS_Transactions.Accounting_Period) = MONTH(DATEADD(m, - 1, dbo.siteLink_Statement.zCreationDate))
AND YEAR(dbo.PAYMENTS_Transactions.Accounting_Period) = YEAR(DATEADD(m, - 1, dbo.siteLink_Statement.zCreationDate))
GO
EXEC sys.sp_addextendedproperty @name=N'MS_DiagramPane1', @value=N'[0E232FF0-B466-11cf-A24F-00AA00A3EFFF, 1.00]
Begin DesignProperties =
Begin PaneConfigurations =
Begin PaneConfiguration = 0
NumPanes = 4
Configuration = "(H (1[40] 4[20] 2[20] 3))"
End
Begin PaneConfiguration = 1
NumPanes = 3
Configuration = "(H (1[34] 4[49] 3))"
End
Begin PaneConfiguration = 2
NumPanes = 3
Configuration = "(H (1[50] 2[25] 3))"
End
Begin PaneConfiguration = 3
NumPanes = 3
Configuration = "(H (4 [30] 2 [40] 3))"
End
Begin PaneConfiguration = 4
NumPanes = 2
Configuration = "(H (1[56] 3))"
End
Begin PaneConfiguration = 5
NumPanes = 2
Configuration = "(H (2 [66] 3))"
End
Begin PaneConfiguration = 6
NumPanes = 2
Configuration = "(H (4 [50] 3))"
End
Begin PaneConfiguration = 7
NumPanes = 1
Configuration = "(V (3))"
End
Begin PaneConfiguration = 8
NumPanes = 3
Configuration = "(H (1[15] 4[76] 2))"
End
Begin PaneConfiguration = 9
NumPanes = 2
Configuration = "(H (1[28] 4))"
End
Begin PaneConfiguration = 10
NumPanes = 2
Configuration = "(H (1[66] 2))"
End
Begin PaneConfiguration = 11
NumPanes = 2
Configuration = "(H (4 [60] 2))"
End
Begin PaneConfiguration = 12
NumPanes = 1
Configuration = "(H (1))"
End
Begin PaneConfiguration = 13
NumPanes = 1
Configuration = "(V (4))"
End
Begin PaneConfiguration = 14
NumPanes = 1
Configuration = "(V (2))"
End
ActivePaneConfig = 0
End
Begin DiagramPane =
Begin Origin =
Top = -100
Left = 0
End
Begin Tables =
Begin Table = "Customer_Types"
Begin Extent =
Top = 20
Left = 680
Bottom = 128
Right = 836
End
DisplayFlags = 280
TopColumn = 0
End
Begin Table = "CUSTOMERS"
Begin Extent =
Top = 20
Left = 446
Bottom = 128
Right = 620
End
DisplayFlags = 280
TopColumn = 6
End
Begin Table = "Policy_Facility_Customer"
Begin Extent =
Top = 22
Left = 40
Bottom = 130
Right = 191
End
DisplayFlags = 280
TopColumn = 0
End
Begin Table = "POLICYS"
Begin Extent =
Top = 38
Left = 387
Bottom = 146
Right = 606
End
DisplayFlags = 280
TopColumn = 0
End
Begin Table = "FACILITYS"
Begin Extent =
Top = 188
Left = 164
Bottom = 296
Right = 353
End
DisplayFlags = 280
TopColumn = 0
End
Begin Table = "Coverages"
Begin Extent =
Top = 155
Left = 639
Bottom = 263
Right = 790
End
DisplayFlags = 280
TopColumn = 0
End
Begin Table = "CoveragePercentThefts"
Begin Extent =
Top = 330
Left = 38
Bottom = 438
Right = 240
' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'VIEW',@level1name=N'vw_Facility_Detail_Report_V4'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_DiagramPane2', @value=N' End
DisplayFlags = 280
TopColumn = 0
End
Begin Table = "PAYMENTS_Transactions"
Begin Extent =
Top = 432
Left = 484
Bottom = 540
Right = 682
End
DisplayFlags = 280
TopColumn = 0
End
Begin Table = "siteLink_Statement"
Begin Extent =
Top = 240
Left = 1076
Bottom = 369
Right = 1276
End
DisplayFlags = 280
TopColumn = 0
End
End
End
Begin SQLPane =
End
Begin DataPane =
Begin ParameterDefaults = ""
End
Begin ColumnWidths = 20
Width = 284
Width = 1500
Width = 1500
Width = 1500
Width = 1500
Width = 1500
Width = 1500
Width = 1500
Width = 1500
Width = 1500
Width = 1500
Width = 1500
Width = 1500
Width = 1500
Width = 1500
Width = 1500
Width = 1500
Width = 1500
Width = 1500
Width = 1500
End
End
Begin CriteriaPane =
Begin ColumnWidths = 11
Column = 19890
Alias = 1410
Table = 1500
Output = 720
Append = 1400
NewValue = 1170
SortType = 1350
SortOrder = 1410
GroupBy = 1350
Filter = 1350
Or = 1350
Or = 1350
Or = 1350
End
End
End
' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'VIEW',@level1name=N'vw_Facility_Detail_Report_V4'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_DiagramPaneCount', @value=2 , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'VIEW',@level1name=N'vw_Facility_Detail_Report_V4'
GO
Cette vue est assez simple. Le problème de performance réel est sans aucun doute dans 'vw_Facility_Detail_Report_V4'. –
@GordonLinoff merci pour votre réponse rapide. Quoi ou où suggérez-vous que je regarde dans la vue? – ggiaquin16
La publication de la définition de vw_Facility_Detail_Report_V4 serait utile, tout comme le plan d'exécution. – ZeroUltimax