Dozerを使用したPylonsでのSQLプロファイリング(SQLAlchemy)

画像

Pylonsフレームワークで書かれたアプリケーションが非常に遅い理由を知りたいですか? ほとんどの場合、彼はあなたのSQLクエリのためにそのようでなければなりません、そして何が起こるかを理解する最良の方法はそれぞれに費やされる時間です-Dozer(Pylons開発チームのBen Bangertによって作成された)をインストールし、小さなクラスTimerProxy(SQLALchemy開発チームのzzzeekによって作成されました。







まず、Dozerをインストールします(easy_installが何であるかを説明する価値はないと思いますか?):



 sudo easy_install -U http://www.bitbucket.org/bbangert/dozer/get/b748d3e1cc87.gz
      
      







config /ミドルウェアに追加します:



 #    middleware.py,    app if asbool(config['debug']): from dozer import Logview app = Logview(app, config)
      
      





development.iniに数行を追加します。



 logview.sqlalchemy = #faa logview.pylons.templating = #bfb
      
      







次に、同じiniファイルの[loggers]セクションを編集します。 この例では、ルートがINFOレベルに設定されているため、非常に多くのメッセージを表示できます。 DEBUGレベルを設定すると、すべてのリクエストで発生するすべてを確認できます



 # Logging configuration [loggers] keys = root, YOURPROJ [handlers] keys = console [formatters] keys = generic [logger_root] level = INFO handlers = console [logger_YOURPROJ] level = DEBUG handlers = qualname = YOURPROJ.lib [logger_sqlalchemy] level = INFO handlers = qualname = sqlalchemy.engine [handler_console] class = StreamHandler args = (sys.stderr,) level = NOTSET formatter = generic [formatter_generic] format = %(asctime)s,%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s datefmt = %H:%M:%S
      
      







lib / fileディレクトリに次の内容のquerytimer.pyを作成します。



sqlalchemy.interfacesからConnectionProxyをインポート

輸入時間



インポートログ

log = logging.getLogger(__ name__)



 class TimerProxy(ConnectionProxy): def cursor_execute(self, execute, cursor, statement, parameters, context, executemany): now = time.time() try: return execute(cursor, statement, parameters, context) finally: total = time.time() - now log.debug("Query: %s" % statement) log.debug("Total Time: %f" % total)
      
      







さて、最後のこと。 config / environment.pyファイルのsqlalchemyの初期化を修正します。



 engine = engine_from_config(config, 'sqlalchemy.', proxy=TimerProxy())
      
      







そして、ファイルの先頭にTimerProxyインポートを追加することを忘れないでください:



 from YOURPROJ.lib.querytimer import TimerProxy
      
      







以上です! pasterを再起動し、プロジェクトをブラウザーで開きます。 上部に狭いストリップがあり、クリックすると、ページを生成するために実行されたすべてのリクエストのリストが表示されます。



Timerzzの詳細については、zzzeekのブログをご覧ください



All Articles