Django Silk: Cara Debug & Profiling Query Django Biar Gak Lemot
Django Silk: Cara Debug & Profiling Query Django Biar Gak Lemot
Django Silk: Cara Debug & Profiling Query Django Biar Gak Lemot
Kalau lu develop backend pakai Django, ada satu fase yang pasti bakal kejadian:
“Kok endpoint ini makin lama makin lambat ya?”
Awalnya API masih ngebut.
User dikit → aman.
Data dikit → aman.
Tapi pas data mulai banyak…
- query N+1 muncul
- response time naik
- CPU naik
- endpoint random jadi 2–3 detik
- pagination mulai berat
Nah, di titik itu biasanya kita butuh tool profiling.
Dan salah satu tool paling enak buat Django menurut gw adalah:
Apa Itu Django Silk?
Django Silk adalah profiling tool buat Django yang bisa bantu lu:
- lihat query SQL
- cek endpoint paling lambat
- profiling function
- lihat duplicate query
- cek request/response
- profiling time per request
- inspect headers/body
- cek bottleneck aplikasi
Kurang lebih mirip mini APM buat local development.
Install Django Silk
Install dulu:
pip install django-silk
Tambahin ke INSTALLED_APPS:
INSTALLED_APPS = [ ... "silk", ]
Tambahin middleware:
MIDDLEWARE = [ ... "silk.middleware.SilkyMiddleware", ]
Tambahin URL:
urlpatterns = [ ... path("silk/", include("silk.urls", namespace="silk")), ]
Migration:
python manage.py migrate
Run server:
python manage.py runserver
Buka:
Done 🔥
Yang Bisa Dilihat di Django Silk
Begitu buka dashboard-nya, lu bakal lihat:
- daftar request
- response time
- jumlah query
- duplicate query
- profiling detail
- body request
- headers
- SQL query lengkap
Dan ini super membantu buat nemuin bottleneck.
Contoh Kasus Query N+1
Misalnya lu punya model:
class Author(models.Model): name = models.CharField(max_length=255)
class Book(models.Model): author = models.ForeignKey( Author, on_delete=models.CASCADE )
title = models.CharField(max\_length=255)
Terus lu bikin endpoint:
books = Book.objects.all()
for book in books: print(book.author.name)
Kelihatannya normal.
Padahal…
- 1 query buat books
- N query buat author
Kalau ada 100 books?
Jadi 101 query 😭
Nah Silk bakal langsung nunjukin duplicate query itu.
Solusi: select_related
Optimasi gampangnya:
books = Book.objects.select_related("author")
Sekarang cuma jadi:
SELECT ... FROM book JOIN author ...
1 query doang 🔥
Dan Silk bakal nunjukin response time turun drastis.
Cek Endpoint Paling Lambat
Silk juga enak buat ngecek endpoint mana yang paling berat.
Biasanya pattern-nya:
EndpointProblem/api/hometerlalu banyak query/api/profileserializer nested kebanyakan/api/feedpagination berat/api/searchquery LIKE liar/api/dashboardaggregasi kebanyakan
Lu bisa lihat:
- total query
- waktu SQL
- waktu rendering
- total response time
Jadi gampang pinpoint masalah.
Profiling Function
Silk juga support profiling function.
Contoh:
from silk.profiling.profiler import silk_profile
@silk_profile(name="generate report") def generate_report(): ...
Nanti function itu muncul di dashboard profiling.
Enak banget buat:
- cron job
- ETL
- export CSV
- aggregation
- background processing
Silk vs Django Debug Toolbar
Orang sering compare Silk sama Django Debug Toolbar.
Menurut gw:
ToolCocok BuatDjango Debug Toolbarfrontend template debuggingDjango SilkAPI & performance profiling
Kalau backend-heavy project, Silk biasanya lebih kepake.
Hati-Hati Pakai di Production
Silk nyimpen request + query ke database.
Kalau dipasang di production tanpa limit:
- DB bisa bengkak
- storage naik
- request makin berat
Biasanya solusi:
SILKY_MAX_RECORDED_REQUESTS = 100
Atau aktifin cuma di development:
if DEBUG: INSTALLED_APPS += ["silk"]
Tips Biar Django Tetep Ngebut
Selain pakai Silk, biasanya gw juga:
- pakai
select_related - pakai
prefetch_related - hindari serializer nested terlalu dalam
- cache query berat
- pagination wajib
- hindari
.all()tanpa limit - cek indexing PostgreSQL
- jangan looping query di serializer
Karena mayoritas performance issue Django itu sebenarnya:
bukan framework-nya lambat, tapi query-nya 😭
Penutup
Django Silk menurut gw salah satu tool wajib kalau lu develop backend Django serius.
Terutama pas:
- traffic mulai naik
- endpoint makin banyak
- query makin kompleks
- latency mulai aneh
Kadang optimasi kecil kayak:
select_related- cache
- indexing
bisa nurunin response time dari:
- 2 detik → 200ms
Dan Silk bikin proses nyari bottleneck jadi jauh lebih gampang.
Happy profiling 🔥