[Django] QuerySet を利用して発行された生の SQL を確認する方法
2018-04-09 23:42
  • 正直なところここは個人サイトだし、アクセス数も少ないから少々サービスが停止しようと気にならないし、
    デバッグツールやらを利用してミリ秒単位のパフォーマンスチューニングしたりする必要もないから、
    プログラムの実行速度などはあまり意識してきませんでした。

    業務として Django を扱ったこともないので、それこそなんとなく QuerySet を利用して、
    いけてないコード書いてるなぁーとか思いながらもいい加減に実装をしていたわけです。笑

    と言いつつも、やっぱりパフォーマンスは気になるし、無駄なクエリが発行されていないかとかも
    気になるわけです。

    というわけで前置きが長くなりましたが、 QuerySet で発行されたクエリを見れるようにしたときの記録です。

    django-debug-toolbar をインストールする

    色々調べてみた感じだと、 django-debug-toolbar を利用するのがベストだと思いました。発行されたクエリだけではなく、リクエストの内容や settings.py の中身なども見られるようになっています。

    settings.pyDEBUG=True となっているときのみ動作するようになっています。

    インストールする

    pip を利用してサクッとインストールします。


    $ pip install django-debug-toolbar

    デバッグツールを有効にする

    続いて、こちらの手順に従ってデバッグツールを有効にします。

    INSTALLED_APPS に追加する

    INSTALLED_APPS = [
        # ...
        'django.contrib.staticfiles',
        # ...
        'debug_toolbar',
    ]
    

    プロジェクトの urls.py にルーティングを追加する
    if settings.DEBUG:
        import debug_toolbar
        urlpatterns = [
            url(r'^__debug__/', include(debug_toolbar.urls)),
        ] + urlpatterns
    

    MIDDLEWARE に追加する

    MIDDLEWARE = [
        # ...
        'debug_toolbar.middleware.DebugToolbarMiddleware',
        # ...
    ]
    

    settings.py に INTERNAL_IPS を追加する
    INTERNAL_IPS = ('127.0.0.1',)
    

    ローカル環境にアクセスする

    サーバーを再起動してページにアクセスると、
    以下のようにページの右側にデバッグメニューが表示されていると思います。

    django-debug-toolbar


    SQL リンクをクリックすると、実際に発行されたクエリを確認できます。
    SELECT された結果と EXPLAIN した結果を Sel, Expl ボタンからそれぞれ確認できます。
    ちなみに当サイト、外部キー連携をそれなりに使っているのですが、副問合せが多発していることがわかって絶望しました。
    また、インデックスも全然足りていない事実も発覚しました。笑
    まだ 100 記事程度しかないのでパフォーマンスにはほとんど影響ないんですが、増えてきたらじわじわ遅くなっていきそうです。

    django-debug-toolbar クエリの確認


    人気ブログランキングへ ブログランキング・にほんブログ村へ
    ↑応援よろしくお願いします!m(_ _)m

  • 2018-04-08 13:24
  • Python
  • DjangoPythonQuerySetクエリ出力SQLデバッグ
  • 新しい記事へ
    フリーランスとして働き始めて2ヶ月で気づいたこと

    古い記事へ
    フリーランスとして働き始めて2ヶ月で気づいたこと(初日編)

profile picture

自己紹介的な何か

@wkmettyでついったーやってます。時々。 6年間勤めたゲーム会社を2018年2月に退職しフリーランスのプログラマに。 WordPress コントリビューター。 お仕事募集中です。