argabayu— Backend & Systems Engineer

pgx-nag

Memperingatkan query PostgreSQL yang tidak memakai indeks, sebelum sampai produksi.
Query dicek
~800
Temuan
23

Alat yang membaca log PostgreSQL, menjalankan EXPLAIN pada query lambat, dan menandai pemindaian sekuensial pada tabel besar.

Mengapa ini ada

Sebagian besar insiden performa yang saya tangani berakar pada hal yang sama: query yang tidak memakai indeks, dan tidak ada yang menyadari sampai tabelnya besar. Alat ini memindahkan penemuan itu ke kiri.

go
// Ambil rencana tanpa menjalankan query-nya.
rows, err := db.Query(ctx, "EXPLAIN (FORMAT JSON) "+q)

Yang saya tolak

Saya mempertimbangkan membuat ini pengganti driver atau lapisan ORM. Keduanya terlalu mengganggu: alat harus bisa dipakai tanpa menyentuh kode aplikasi. Akhirnya ia hanya membaca log, jadi bisa dipasang atau dilepas kapan saja.

Hasil

Dua puluh tiga query ditemukan melakukan pemindaian sekuensial pada tabel di atas satu juta baris. Delapan belas di antaranya selesai dengan menambah satu indeks; sisanya butuh penulisan ulang query.