पोस्टग्रेज 9.1: लेनदेन के लिए लिया गया समय मापें (प्रतिबद्ध सहित)

मेरे पास निम्न संग्रहीत प्रक्रिया है, 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;

As seen above, I measure the execution time for this stored procedure using start and stop timestamps at the beginning and end of the stored procedure. However, as the actual transaction commit happens after the stored procedure ends, the time logged is off by 10-20 ms (See Execution time of a Prepared statement's executeQuery() method vs. corresponding Stored procedure execution time) typically required for committing a transaction. How can I log the time that includes time taken for committing the transaction as well? pgBench is probably not good enough for me, because I want these numbers when an actual live application (from middleware) calls this stored procedure.

0
मिडलवेयर लॉगिंग में नेटवर्क विलंबता भी शामिल होगी। इसे बाहर करने के लिए, लॉगिंग को डेटाबेस में ही करना होगा।
जोड़ा लेखक gjain, स्रोत
क्या आपने psql के लिए समय सक्षम करने और उससे एक क्वेरी भेजने का प्रयास किया है?
जोड़ा लेखक Igor Romanchenko, स्रोत
क्या आप मिडलवेयर में अवधि को लॉग नहीं कर सकते?
जोड़ा लेखक Daniel Vérité, स्रोत

2 उत्तर

PostgreSQL में ऐसा करने के लिए कोई सुविधा नहीं है। एक लेनदेन के समय के लिए भी ध्यान रखें कि आपके पास अधिक कमांड के लिए अतिरिक्त निष्क्रिय समय हो सकता है, इसलिए आपका सबसे अच्छा विकल्प वास्तव में यदि आप एक लेनदेन करने का विचार करना चाहते हैं तो psql में समय सक्षम करना और उसे उसी सर्वर पर चलाने के लिए है डीबी सर्वर, और यूनिक्स सॉकेट पर। आपके पास अभी भी आईपीसी ओवरहेड है लेकिन उस मामले में कोई नेटवर्क विलंबता नहीं है। आप अपने उत्पादन डीबी की प्रतिलिपि पर चल सकते हैं, या आप अपनी खुद की लिपियों को लिख सकते हैं, कहें, पर्ल जो लेनदेन चलाते हैं, इसे समय देते हैं, और इसे वापस रोल करते हैं।

आपका दूसरा विकल्प मिडलवेयर पर अवधि को सक्षम करना है जो एक अच्छा विचार भी हो सकता है लेकिन जैसा कि आप कहते हैं कि आपको नेटवर्क विलंबता भी मिलती है। आप अपनी अंतिम गणना में इसके लिए नेटवर्क विलंबता को माप सकते हैं और इसके लिए सही कर सकते हैं।

0
जोड़ा
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;
0
जोड़ा