我目前无意中遇到了这个问题,我很想听听你的一些建议。
我有一个C ++程序,它使用预编译库对PostgreSQL数据库进行一些查询。现在的问题是我想找出程序源代码和中描述的所有例程所花费的总(合并)cpu时间,以及等待数据库相关活动所花费的时间
我在Linux中使用了time
命令,但它似乎没有衡量程序在数据库上花费的时间。
在我的情况下,我不可能重新编译提供给我的库,所以我认为gprof
之类的东西不会起作用。
有什么建议吗?
谢谢。
答案 0 :(得分:1)
在ctime中尝试时钟功能。
clock_t start, end;
double cpu_time_used
start = clock();
// Do stuff
end = clock();
cpu_time_used = ((double)(end - start)) / CLOCKS_PER_SEC;
答案 1 :(得分:1)
使用POSIX的times,它测量进程及其子进程的实际,用户和系统时间。
链接的Opengroup页面上有一个示例:“定时数据库查找”
答案 2 :(得分:0)
当然,无论如何你都会获得挂钟时间,但可能是你想要占用CPU时间。
当涉及子流程(或不相关的流程)时,这非常重要。但是,您可能希望尝试采用更全面的方法来进行基准测试。
测量应用程序的延迟非常容易(只需观看挂钟),但吞吐量通常更难。
要了解应用程序在负载下的行为方式,您需要以可重现的方式将其置于负载之下(在生产级硬件上)。
这通常意味着同时执行大量任务,因为现代硬件往往能够同时执行多项操作。此外,如果您的应用程序中的任何内容等待任何外部数据源(包括您自己机器的硬盘驱动器),即使在单个核心上也可以通过同时提供多个请求来获得更好的吞吐量。
您可能希望查看oprofile等工具,该工具专为分析而设计,而不是基准测试。
答案 3 :(得分:0)
您可以打开log_statement
和log_duration
并在log_min_duration_statement=0
中设置postgresql.conf
,运行您的程序,然后使用例如PQA分析Postgres日志。