PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Tôi làm cách nào để ghi nhật ký psycopg2 về thời gian thực hiện truy vấn?

Đủ dễ dàng để đặt dấu thời gian khi bắt đầu thực thi và tính toán thời lượng khi kết thúc. Bạn sẽ cần các lớp con đơn giản của LoggingConnection và LoggingCursor của riêng mình. Xem mã ví dụ của tôi.

Điều này dựa trên nguồn MinTimeLoggingConnection mà bạn có thể tìm thấy trong psycopg2/extras.py nguồn.

import time
import psycopg2
import psycopg2.extensions
from psycopg2.extras import LoggingConnection, LoggingCursor
import logging

logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)

# MyLoggingCursor simply sets self.timestamp at start of each query                                                                 
class MyLoggingCursor(LoggingCursor):
    def execute(self, query, vars=None):
        self.timestamp = time.time()
        return super(MyLoggingCursor, self).execute(query, vars)

    def callproc(self, procname, vars=None):
        self.timestamp = time.time()
        return super(MyLoggingCursor, self).callproc(procname, vars)

# MyLogging Connection:                                                                                                             
#   a) calls MyLoggingCursor rather than the default                                                                                
#   b) adds resulting execution (+ transport) time via filter()                                                                     
class MyLoggingConnection(LoggingConnection):
    def filter(self, msg, curs):
        return msg + "   %d ms" % int((time.time() - curs.timestamp) * 1000)

    def cursor(self, *args, **kwargs):
        kwargs.setdefault('cursor_factory', MyLoggingCursor)
        return LoggingConnection.cursor(self, *args, **kwargs)

db_settings = {
    ....
}

query_txt = "[query_text_from file]"

conn = psycopg2.connect(connection_factory=MyLoggingConnection, **db_settings)
conn.initialize(logger)

cur = conn.cursor()
cur.execute(query_text)

và bạn sẽ nhận được:

DEBUG: __main__:[query]     3 ms

trong filter() của bạn bạn có thể thay đổi định dạng hoặc chọn không hiển thị, nếu nhỏ hơn một số giá trị.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL 9.3:Bảng tổng hợp động

  2. Tham số cấu hình work_mem trong PostgreSQL trên Linux

  3. Fluent NHibernate và PostgreSQL, SchemaMetadataUpdater.QuoteTableAndColumns - System.NotSupportedException:Không hỗ trợ phương pháp đã chỉ định

  4. Tạo sql với truy vấn con dưới dạng một cột trong câu lệnh chọn bằng cách sử dụng SQLAlchemy

  5. Làm cách nào để tạo một hàm tạm thời trong PostgreSQL?