【问题标题】:Postgres 9.1: Measure time taken for a transaction (including commit)Postgres 9.1:测量事务(包括提交)所花费的时间
【发布时间】:2013-12-02 15:04:14
【问题描述】:

我有以下存储过程,insertMessageOne:

CREATE OR REPLACE FUNCTION insertMessageOne(sender_id INT, receiver_id INT, queue_id INT, context INT, priority INT, text varchar(2000))
RETURNS BOOLEAN 
AS $$
DECLARE
    start timestamp;
    stop timestamp;
BEGIN
    start = clock_timestamp();
    INSERT INTO message(sender_id, receiver_id, queue_id, context, priority, text) VALUES($1,$2,$3,$4,$5,$6);
    stop = clock_timestamp();
    RAISE NOTICE 'Timestamp: (%) senderId: (%) insertMessageOne: (%)', stop, sender_id, stop - start;
    RETURN TRUE;
EXCEPTION
    WHEN OTHERS THEN
        RAISE NOTICE 'EXCEPTION: INSERT SINGLE-Q MESSAGE FAILED';
        RETURN FALSE;
END;
$$ LANGUAGE plpgsql;

如上所示,我使用存储过程开始和结束时的开始和停止时间戳来测量此存储过程的执行时间。但是,由于实际的事务提交发生在存储过程结束后,因此记录的时间会减少 10-20 毫秒(参见Execution time of a Prepared statement's executeQuery() method vs. corresponding Stored procedure execution time),通常是提交事务所需的。如何记录包括提交事务所用时间的时间? pgBench 对我来说可能不够好,因为当实际的实时应用程序(来自中间件)调用这个存储过程时,我想要这些数字。

【问题讨论】:

  • 您是否尝试过为psql 启用计时并从中发送查询?
  • 不能在中间件中记录持续时间吗?
  • 中间件日志记录也会包括网络延迟。要排除它,必须在数据库本身中完成日志记录。

标签: postgresql stored-procedures logging transactions


【解决方案1】:

在 PostgreSQL 中没有工具可以做到这一点。对于事务时间,还请记住,您可能有额外的空闲时间等待更多命令,因此,如果您想了解事务如何执行,最好的选择是在 psql 中启用计时并在同一服务器上运行它db 服务器和 UNIX 套接字。在这种情况下,您仍然有 IPC 开销,但没有网络延迟。您可以在生产数据库的副本上运行,或者您可以在 Perl 中编写自己的脚本来运行事务、对其计时并回滚。

您的另一个选择是在中间件上启用持续时间,这也可能是个好主意,但正如您所说,也会给您带来网络延迟。不过,您可以测量网络延迟并在最终计算中对其进行校正。

【讨论】:

    【解决方案2】:
    select timeofday();
    

    交易就像::

    CREATE OR REPLACE FUNCTION function_name()
    
    RETURNS json AS
    
    $BODY$
    
    declare
    
    BEGIN
    
    select timeofday();
    
    /*code lies here*/
    
    select timeofday()
    
    return v_json;
    
    END
    
    $BODY$
    
      LANGUAGE plpgsql VOLATILE
    
      COST 100;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-26
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 2016-05-22
      • 1970-01-01
      • 1970-01-01
      • 2021-12-15
      相关资源
      最近更新 更多