【发布时间】:2012-08-07 03:35:29
【问题描述】:
我正在使用 PIN 工具来跟踪运行 sql 查询时读取和写入的内存量。然而,奇怪的事情发生了。我从运行中获得的 pinatrace.out 中用于读/写的内存地址
./pin -t pinatrace.so -- /usr/local/pgsql/bin/psql postgres < tmp.sql
... 不会与我从 postgresql 打印的内存地址重叠。
我在 postgresql 源代码中添加了几行来打印出一些虚拟指针的地址。它确实按我的预期打印出日志中的内存地址,但是在包含将 pin 附加到 psql 时已访问的所有内存地址的“pinatrace.out”中找不到这些地址。
但是,当我将相同的虚拟指针打印地址行复制到一个简单的 test.c 文件中并运行时
./pin -t pinatrace.so -- ./test
...屏幕输出的地址可以在 pinatrace.out 中找到。
这两个测试都是由 postgres 运行的,因为我将 PIN 的所有者更改为 postgres。
我真的很困惑。有人可以指出发生了什么吗? postgres 分配内存的方式是否不同,或者我可能会错误地运行 pin?任何想法都会有所帮助!
如果您希望我进一步澄清问题,请告诉我。
【问题讨论】:
标签: postgresql memory