3

我试图弄清楚遗留应用程序对我们的 mysql 数据库(复数)做了什么,因为我需要完全重构/替换它的一部分而不关心它是如何做到的。我只对结果感兴趣。

目前我正在使用DBI::ProfileDBI::ProfileDumper通过添加$ENV{DBI_PROFILE} = "!Statement/DBI::ProfileDumper";. 在命令行上运行时,这向我显示了一堆查询dbiprof dbi.prof,但这似乎有点奇怪。

可能是我读错了报告。

#####[ 3 ]###########################################################
  Count         : 4
  Total Time    : 0.018930 seconds
  Longest Time  : 0.018881 seconds
  Shortest Time : 0.000005 seconds
  Average Time  : 0.004732 seconds
  Key 1         :

INSERT INTO orders (foo, bar) VALUES (1, 2)

为什么显示4Count?它在orders表中创建两行,而不是 4 行。此外,它显示了它正在执行的第一个插入的值。对于其他一些人,它保留?在查询字符串中。

也许分析是错误的方法。我一直在考虑用猴子修补 DBI 来记录查询,但我不知道该去哪里。可能我可以添加一个日志记录函数到prepare, 和 toexecute来获取查询字符串以及参数。

我可以使用类似的东西吗?肯定有人想这样做吗?或者也许是另一种方法?

我愿意接受任何建议。

4

3 回答 3

3

您想在第 2 级使用跟踪: https ://metacpan.org/pod/DBI#TRACING

于 2013-10-31T10:27:49.503 回答
2

DBI::Log是一个非常简单的解决方案。我最喜欢的一点是您可以在命令行上调用它,例如:

perl -MDBI::Log script.pl

..它会直接输出到 STDERR,不需要对您的代码进行任何修改。

于 2018-08-08T18:01:54.840 回答
1

您将获得更有意义的跟踪,使用 DBIx::Log4perl 或稍微更现代的 DBIx::LogAny 也更灵活。

于 2013-11-01T09:53:52.477 回答