代码之家  ›  专栏  ›  技术社区  ›  Display name

SQL Server:如何以编程方式检索性能指标;特别是逻辑阅读

  •  0
  • Display name  · 技术社区  · 7 年前

    我有一个非常复杂的存储过程,它根据十个参数动态创建SQL。除此之外,它还使用了一些视图,这些视图本身非常复杂。可以想象,在某些情况下,生成的SQL语句会生成相当多的逻辑读取(在最坏的情况下是万亿次)。我有几个策略,我正在努力。

    测试线束: 我创建了一个诊断存储过程,它使用各种参数设置运行存储过程,并将结果存储到一个表中。这会记录用于生成它的输出和参数集。

    我想以编程的方式获取性能指标。我不想每次都要运行测试,然后把它们写下来。我有20个奇怪的参数集,而且还在增长。我也在比较存储过程的不同版本。

    我想我想要的是: “Set statistics IO ON”(设置统计信息IO开启)提供了我需要的信息,但信息会显示在“messages”(消息)选项卡中。

    这是为测试我的存储过程而创建的查询示例。此代码示例生成60多次(每个测试过程中每个参数集生成一次)。这个特定的迭代测试参数集编号为11的“原始”存储过程。

    DECLARE @LSBA_table table (ViewStatementBalanceAllUid uniqueidentifier, AccountResponsiblePartyUid uniqueidentifier, FinancialCenterUid uniqueidentifier, FinancialCenterName varchar(255), Balance money, CycleTrigger BIT, LastStatementDate Date, AccountResponsiblePartyFullName varchar(255), LastName varchar(255), ExternalID varchar(25), PayerCreditBalance Money, StatementsByFinancialCenter bit, SendStatement bit);
    INSERT INTO @LSBA_table EXEC LoadStatementBalanceAll_ORIGINAL  @nameRangeSearch = 'A-Bzzz',  @onDemand = 0, @daysBack=30, @financialCenterUid='7FAEF75C-914F-491F-8FE2-0A747FD84088;8709E580-13BC-4E4B-9325-D8F3AB1B2868', @minBalance=25.00
    INSERT INTO CUS_LSBA_RESULTS (StoredProcName, ParameterId,ViewStatementBalanceAllUid,AccountResponsiblePartyUid,FinancialCenterUid,FinancialCenterName,Balance,CycleTrigger,LastStatementDate,AccountResponsiblePartyFullName,LastName,ExternalID,PayerCreditBalance,StatementsByFinancialCenter,SendStatement) (SELECT 'LoadStatementBalanceAll_ORIGINAL', 11, * FROM @LSBA_table)
    
    1 回复  |  直到 7 年前