使用OpenSchema方法生成统计信息

在上周的技巧中,我向您展示了如何使用DBEngine(DAO)的ISAMStats方法返回有关查询执行的重要统计信息,例如:磁盘读写,缓存读写以及放置和释放的锁。 按照承诺,在本周的技巧中,我将演示如何使用连接对象的OpenSchema方法在ADO上下文中完成并行功能。

我们通过向其提供一个称为GUID的魔术数字(而不是表示特定模式的传统常量值)来向OpenSchema方法指示我们想要一组特定于提供商的信息。 随后,记录集将充满我们所需的信息。

与ISAMStats方法不同,我们可以一次重置所有统计信息。 重置统计信息后,我们可以执行查询以重新填充统计信息,然后检索它们。 为此,我们使用连接对象的OpenSchema方法,该方法返回一个单行Recordset对象,其中填充了各个字段中的统计信息。

我知道你们都在焦急地等待着,所以让我们开始学习本技巧的内容。 我已经将所有逻辑封装在一个名为GetADO_ISAMStats的子例程过程中,该例程具有两个参数。 在这种特定情况下,我将把存储查询的名称(qrySelect)和布尔值(True)传递给例程,该名称指示代码将尝试打开Recordset而不是执行查询。 我完全可以通过例程传递一个反映操作查询(更新,删除,追加,创建表)的SQL语句,然后传递值False来执行该SQL语句。

qrySelect是一个简单的Select查询,它从包含1,101,764条记录的表中返回值。 在两个字段上设置标准只是为了使事情变得有趣。

下面列出了子例程代码,对例程的调用以及生成的统计信息,以供您查看。 如果您愿意,请参阅上周的技巧作为参考。

Public Sub GetADO_ISAMStats(strQuery As String, Optional blnUseRecordset As Boolean)
'1st set a Reference to the 'Microsoft ActiveX Data Objects X.X Library'
Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset 
Set cnn = CurrentProject.Connection 
Const conDisk_Reads As Integer = 0
Const conDisk_Writes As Integer = 1
Const conReads_From_Cache As Integer = 2
Const conReads_From_Read_Ahead_Cache As Integer = 3
Const conLocks_Placed As Integer = 4
Const conLocks_Released As Integer = 5 
Dim lngDiskReads As Long, lngDiskWrites As Long, lngReadsFromCache As Long
Dim lngReadsFromReadAheadCache As Long, lngLocksPlaced As Long
Dim lngLocksReleased As Long 
DoCmd.Hourglass True 
'Reset the Statistics all at once
cnn.Properties("Jet OLEDB:Reset ISAM Stats") = 1 
If blnUseRecordset Then
  Set rst = cnn.Execute(strQuery)     'used for this Tip
Else
  cnn.Execute (strQuery)
End If 
Set rst = cnn.OpenSchema(Schema:=adSchemaProviderSpecific, SchemaID:="{8703b612-5d43-11d1-bdbf-00c04fb92675}") 
lngDiskReads = rst.Fields(conDisk_Reads)
lngDiskWrites = rst.Fields(conDisk_Writes)
lngReadsFromCache = rst.Fields(conReads_From_Cache)
lngReadsFromReadAheadCache = rst.Fields(conReads_From_Read_Ahead_Cache)
lngLocksPlaced = rst.Fields(conLocks_Placed)
lngLocksReleased = rst.Fields(conLocks_Released) 
Debug.Print "==========================================="
Debug.Print "Statistics for (" & strQuery & ") - [" & IIf(blnUseRecordset, "Recordset", "Query") & "]"
Debug.Print "[ADO Method] - Number of Records: " & Format$(DCount("*", "tblMain"), "#,#,#")
Debug.Print "==========================================="
Debug.Print "Disk Reads                     : " & Format$(lngDiskReads, "#,#,#")
Debug.Print "Disk Writes                    : " & Format$(lngDiskWrites, "#,#,#")
Debug.Print "Reads From Cache               : " & Format$(lngReadsFromCache, "#,#,#")
Debug.Print "Reads From Read-Ahead Cache    : " & Format$(lngReadsFromReadAheadCache, "#,#,#")
Debug.Print "Locks Placed                   : " & Format$(lngLocksPlaced, "#,#,#")
Debug.Print "Locks Released                 : " & Format$(lngLocksReleased, "#,#,#")
Debug.Print "===========================================" 
DoCmd.Hourglass False
End Sub
'Procedure Call
Call GetADO_ISAMStats("qrySelect", True)
输出:
===========================================
Statistics for (qrySelect) - [Recordset]
[ADO Method] - Number of Records: 1,101,764
===========================================
Disk Reads                     : 6,970
Disk Writes                    :    22
Reads From Cache               : 7,546
Reads From Read-Ahead Cache    :   968
Locks Placed                   :    31
Locks Released                 :    28
===========================================

From: https://bytes.com/topic/access/insights/749805-generate-statistics-openschema-method

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值