2009-10-06 13 views
43

में किए गए प्रश्नों का इतिहास प्राप्त करना संभव है क्या पोस्टग्रेज़ में किए गए प्रश्नों का इतिहास प्राप्त करना संभव है? और क्या यह प्रत्येक प्रश्न के लिए लिया गया समय प्राप्त करना संभव है? मैं वर्तमान में जिस एप्लिकेशन पर काम कर रहा हूं उसमें धीमी क्वेरी की पहचान करने की कोशिश कर रहा हूं।क्या पोस्टग्रेज़

मैं Postgres 8.3.5

+3

मैंने टैग परिवर्तन को वापस ले लिया क्योंकि यह एक एसक्यूएल विशिष्ट प्रश्न नहीं है। –

+1

देखें http://stackoverflow.com/questions/722221/how-to-log-postgres-sql-queries –

उत्तर

52

डेटाबेस अपने आप में कोई इतिहास है का उपयोग कर रहा है, तो आप psql उपयोग कर रहे हैं आप "\ s" का उपयोग वहाँ अपने आदेश इतिहास को देखने के लिए कर सकते हैं।

आप postgresql.conf फ़ाइल में log_statement सेट करके लॉग फ़ाइलों में भविष्य के प्रश्न या अन्य प्रकार के संचालन प्राप्त कर सकते हैं। इसके बजाय आप शायद log_min_duration_statement है, जो कि यदि आप इसे 0 पर सेट करते हैं तो लॉग में सभी प्रश्नों और उनकी अवधि लॉग इन करेंगे। एक बार आपके ऐप्स लाइव होने पर यह सहायक हो सकता है, यदि आप इसे उच्च मान पर सेट करते हैं तो आपको केवल लंबे समय तक चलने वाले प्रश्न दिखाई देंगे जो ऑप्टिमाइज़ेशन के लिए सहायक हो सकते हैं (आप उन प्रश्नों पर एक्सप्लिन विश्लेषण चला सकते हैं जिन्हें आप समझते हैं कि वे क्यों धीमा हो)।

इस क्षेत्र में जानना एक और आसान बात यह है कि यदि आप psql चलाते हैं और इसे "\ टाइमिंग" कहते हैं, तो यह दिखाएगा कि उसके बाद प्रत्येक कथन कितना समय लगेगा। तो अगर आप एक एसक्यूएल फ़ाइल है कि इस तरह दिखता है:

\timing 
select 1; 

आप इसे सही झंडे के साथ चलाने के लिए और प्रत्येक कथन कितना समय ले लिया साथ interleaved देख सकते हैं। यहां बताया गया है और क्या परिणाम की तरह दिखता है:

$ psql -ef test.sql 
Timing is on. 
select 1; 
?column? 
---------- 
     1 
(1 row) 

Time: 1.196 ms 

यह आसान है क्योंकि आप डेटाबेस सुपर उपयोगकर्ता इसका इस्तेमाल करने, कॉन्फ़िग फ़ाइल को बदलने के विपरीत होने की जरूरत नहीं है, और यह अगर आप नए विकसित कर रहे हैं उपयोग करने के लिए आसान है कोड और इसका परीक्षण करना चाहते हैं।

2

आप धीमी क्वेरी की पहचान कर से विधि (postgresql.conf में या ALTER डेटाबेस सेट के साथ प्रति-डेटाबेस सेट) log_min_duration_statement सेटिंग का उपयोग करने के लिए है चाहते हैं।

जब आप डेटा लॉग करते हैं, तो आप grep या कुछ विशेष टूल्स का उपयोग कर सकते हैं - जैसे pgFouine या मेरा खुद का analyzer - जिसमें उचित दस्तावेज़ों की कमी है, लेकिन इसके बावजूद - काफी अच्छा चल रहा है।

0

pgBadger एक और विकल्प है - यह भी यहाँ सूचीबद्ध: https://github.com/dhamaniasad/awesome-postgres#utilities

अग्रिम में कुछ अतिरिक्त सेटअप की आवश्यकता होती है postgres में आवश्यक डेटा पर कब्जा करने हालांकि लॉग, आधिकारिक वेबसाइट देखें।

0
यूआई Navicat का उपयोग करने वालों के लिए FYI करें

:

आप इतिहास को संग्रहीत करने where के रूप में एक फ़ाइल का उपयोग करने की अपनी प्राथमिकताएँ सेट करना होगा।

यदि यह खाली है तो आपका Navicat खाली हो जाएगा।

enter image description here

पुनश्च: मैं के साथ या Navicat के सहयोग से कोई संबद्धता है या यह सहयोगी कंपनियों है। बस मदद करने के लिए देख रहे हैं।

संबंधित मुद्दे