sqltap幫助您快速瞭解:
- 執行sql査詢的次數
- sql査詢需要多少時間
- 應用程序從何處發出sql査詢
完整檔案
http://sqltap.unhreveable.com
動機
當您在高抽象級別工作時,程式碼效率低下並導致效能問題的情况更為常見。SQLAlchemy的ORM非常優秀,如果您知道應該去哪裡查找,它可以讓您靈活地修復這些效率低下的問題!sqltap是一個連結到SQLAlchemy的庫,用於收集發送到資料庫的所有査詢的度量。sqltap可以幫助您找到在應用程序中生成慢査詢或冗餘査詢的位置,這樣您就可以用最少的努力修復它們。
快速啟動示例
import sqltap
profiler = sqltap.start()
session.query(Knights).filter_by(who_say = 'Ni').all()
statistics = profiler.collect()
sqltap.report(statistics, "report.html")
WSGI集成
您可以輕鬆地將SQLTap集成到任何WSGI應用程序中。這將在/\u sqltap\u創建一個最新的報告頁,您可以在其中動態啟用/禁用分析,以便可以在生產環境中有選擇地運行它。集成非常簡單:
import sqltap.wsgi
wsgi_app = sqltap.wsgi.SQLTapMiddleware(wsgi_app)
例如,要與燒瓶應用程序集成:
import sqltap.wsgi
app.wsgi_app = sqltap.wsgi.SQLTapMiddleware(app.wsgi_app)
文字報告
有時我們想在遠程服務器上分析sqlalchemy。在這些服務器上查看HTML格式的SQLTap報表非常方便。或者,SQLTap以可讀的管道提供文字分析報告。
import sqltap
profiler = sqltap.start()
session.query(Knights).filter_by(who_say = 'Ni').all()
statistics = profiler.collect()
sqltap.report(statistics, "report.txt", report_format="text")
高級示例
import sqltap
def context_fn(*args):
""" Associate the request path, unique id with each query statistic """
return (framework.current_request().path,
framework.current_request().id)
# start the profiler immediately
profiler = sqltap.start(user_context_fn=context_fn)
def generate_reports():
""" call this at any time to generate query reports reports """
all_stats = []
per_request_stats = collections.defaultdict(list)
per_page_stats = collections.defaultdict(list)
qstats = profiler.collect()
for qs in qstats:
all_stats.append(qs)
page = qstats.user_context[0]
per_page_stats[page].append(qs)
request_id = qstats.user_context[1]
per_request_stats[request_id].append(qs)
# report with all queries
sqltap.report(all_stats, "report_all.html")
# a report per page
for page, stats in per_page_stats.items():
sqltap.report(stats, "report_page_%s.html" % page)
# a report per request
for request_id, stats in per_request_stats.items():
sqltap.report(stats, "report_request_%s.html" % request_id)
測試
運行sqltap測試:
python setup.py test
許可證
阿帕奇