我一直在使用以下命令在 HP-UX(Itanium)上的 Sybase ASE 15.7(SP139)上运行系统监视器(sysmon):
sp_sysmon "00:10:00"
go
观察到插入次数在一天中的任何时间都非常高,无法找到它的来源和详细信息,例如表名、数据库名、程序名等。下面是清晨 sysmon 的示例输出,当时有空载:
Transaction Profile
-------------------
Transaction Summary per sec per xact count % of total
------------------------- ------------ ------------ ---------- ----------
Committed Xacts 10.7 n/a 6390 n/a
Transaction Detail per sec per xact count % of total
------------------------- ------------ ------------ ---------- ----------
Inserts
Fully Logged
APL Heap Table 58665.7 5508.5 35199448 100.0 %
APL Clustered Table 0.0 0.0 7 0.0 %
Data Only Lock Table 13.2 1.2 7918 0.0 %
Fast Bulk Insert 0.0 0.0 0 0.0 %
Fast Log Bulk Insert 0.0 0.0 0 0.0 %
Minimally Logged
APL Heap Table 0.0 0.0 0 0.0 %
APL Clustered Table 0.0 0.0 0 0.0 %
Data Only Lock Table 0.0 0.0 0 0.0 %
------------------------- ------------ ------------ ---------- ----------
Total Rows Inserted 58679.0 5509.8 35207373 100.0 %
看起来 tempdb 中正在发生插入,但是这么多插入有点麻烦,感谢专家的建议。
我找到了一种间接的方法来解决我的问题中发布的问题,因为我找不到任何可以监视数据库级别发生的所有插入的工具或脚本,我分析了每天 24 小时运行并正在使用的过程(查询)生产数据库的最大资源。为了模拟,我在测试环境中手动执行了该过程及其所有参数,并使 sysmon 在后台运行的时间与执行过程所需的时间相同。我设法在测试环境中收集了接近相同数量的插入。
为了证明这是唯一每秒钟执行如此多插入次数的程序,我还在有问题的程序之前和之后运行 sysmon 并捕获了插入次数,它是数百而不是数千。
Sysmon 在过程执行期间:
Sysmon 程序执行前/后(未运行时):
这样,我设法找到了每秒执行 60k 插入的过程。另外要补充的是,这些插入是因为表的不正确连接(包含大量记录)和插入数量以工作表的形式出现,如下所示:
我希望以上内容能帮助其他人,以防他们遇到我遇到的类似问题。