Membuat Profil Database

Ukur performa Firebase Realtime Database Anda dengan alat profiler database yang ada di dalam Firebase CLI. Alat profiler mencatat semua aktivitas di database Anda selama periode waktu tertentu ke dalam log, kemudian menghasilkan laporan terperinci. Gunakan laporan terperinci untuk memecahkan masalah performa database, menemukan area masalah, dan mengurangi kueri yang tidak terindeks.

Membuat profil

  1. Sebelum mulai membuat profil Firebase Realtime Database, pastikan Anda menggunakan Firebase CLI versi terbaru dan telah melakukan inisialisasi untuk database serta project yang ingin Anda buat profilnya. Perhatikan bahwa Anda harus menjadi editor atau pemilik project itu untuk membuat profil.

  2. Mulailah membuat profil database dengan perintah berikut:

    firebase database:profile
    Profiler menampilkan pesan status saat mencatat operasi dari database Anda dan membuat profilnya.

  3. Tekan Enter untuk menyelesaikan profil dan menampilkan hasilnya.

Menafsirkan hasil

Alat profiler menggabungkan data yang dikumpulkan terkait operasi database Anda, dan menampilkan hasilnya dalam tiga kategori utama: kecepatan, bandwidth, dan kueri yang tidak terindeks.

Kecepatan

Laporan Kecepatan mengukur waktu respons server (dalam milidetik) untuk setiap jenis operasi. Namun, kecepatan yang diukur di Laporan Kecepatan mungkin tidak benar-benar mencerminkan kecepatan yang dirasakan pengguna akhir. Berbagai faktor, termasuk kondisi jaringan, dapat menambah latensi di sisi klien.

Laporan Kecepatan meliputi properti berikut:

  • Jalur: Jalur di database tempat terjadinya operasi. Jika ada lebih dari 25 node turunan, alat profiler akan memindahkannya ke jalur induk dan menambahkan penanda $wildcard. Anda dapat melihat direktori utama database dalam laporan, yang ditunjukkan dengan garis miring /.
  • Jumlah: Jumlah operasi yang terjadi di jalur yang ditetapkan.
  • Kecepatan Eksekusi Rata-Rata: Waktu rata-rata yang diperlukan server untuk menjalankan logika bisnis yang diperlukan untuk menangani jenis operasi tertentu di jalur tersebut. Interval waktu yang diukur di sini dimulai setelah kecepatan diukur dengan "Waktu Tunggu Rata-Rata" yang dijelaskan di bawah ini.
  • Waktu Tunggu Rata-Rata: Permintaan waktu rata-rata yang dihabiskan untuk antre sebelum dieksekusi. Penundaan ini biasa terjadi pada semua permintaan yang dimulai oleh klien. Total latensi permintaan sisi-server merupakan jumlah kasar dari waktu tunggu permintaan dan kecepatan eksekusi.
  • Izin Ditolak: Jumlah operasi di jalur tertentu yang diblokir oleh Aturan Firebase Database di database Anda.
Laporan Kecepatan berdasarkan Jenis Operasi
Kecepatan Eksekusi Pembacaan Waktu respons server terhadap permintaan klien untuk membaca data dari database. Pada umumnya, waktu eksekusi pembacaan diskalakan dengan jumlah data yang sedang dibaca, tetapi bahkan beberapa pembacaan kecil juga dapat tertunda oleh pengambilan data cache.
Kecepatan Eksekusi Penulisan Waktu respons server terhadap permintaan klien untuk menulis data ke database. Waktu eksekusi penulisan diskalakan dengan jumlah data yang sedang ditulis.
Kecepatan Eksekusi Koneksi Waktu respons server terhadap permintaan untuk membangun koneksi ke klien database. Latensi untuk permintaan koneksi didominasi oleh catatan pembukuan sisi server dalam memori yang terkait dengan pengelolaan koneksi.
Kecepatan Eksekusi Siaran

Jumlah waktu yang dibutuhkan server untuk mendistribusikan data ke klien yang mendeteksi lokasi yang ditetapkan untuk update realtime.

Properti Jumlah di Laporan Kecepatan Siaran menggabungkan jumlah siaran yang terjadi, bukan jumlah klien yang menerima informasi tersebut. Misalnya, jika 10 klien mendeteksi di lokasi yang ditetapkan, dan server menyiarkan update ke 10 klien tersebut, jumlah siaran yang terjadi hanya 1 siaran, meskipun ada 10 klien yang menerima data tersebut.

Properti Izin Ditolak tidak disertakan di laporan Kecepatan Siaran.

Bandwidth

Laporan Bandwidth memberikan informasi tentang jumlah data yang digunakan database di seluruh operasi yang masuk dan keluar. Namun, jangan gunakan Laporan Bandwidth untuk memperkirakan penagihan, karena laporan tersebut tidak meliputi bandwidth yang digunakan untuk operasi lain, misalnya pembuatan profil database. Laporan Bandwidth memperkirakan secara kasar ukuran payload data yang digunakan oleh operasi baca, tulis, dan siaran ke dan dari database Anda. Ini adalah fitur untuk mengukur performa, bukan untuk memperkirakan penagihan.

Laporan Bandwidth mencakup properti berikut:

  • Jalur: Jalur di database tempat terjadinya operasi. Jika ada lebih dari 25 node turunan, alat profiler akan memindahkannya ke jalur induk.

  • Total: Total byte keluar atau masuk yang digunakan di semua operasi di jalur yang ditetapkan.

  • Jumlah: Jumlah operasi yang terjadi di jalur yang ditetapkan.

  • Rata-rata: Jumlah rata-rata byte yang didownload atau diupload di seluruh operasi pada lokasi yang ditetapkan (byte/tulis atau byte/baca).

Laporan Bandwidth
Byte yang Didownload Data yang digunakan melalui operasi baca dan siaran yang dikirim melalui REST API dan SDK klien.
Byte yang Diupload Data yang digunakan melalui permintaan tulis yang masuk ke server database. Penghapusan akan muncul sebagai penulisan dengan ukuran 0 byte di dalam operasi masuk.

Kueri yang Tidak Terindeks

Permintaan yang tidak terindeks bisa jadi mahal, karena klien mendownload semua data di lokasi dan kemudian menjalankan kueri. Operasi ini menggunakan bandwidth lebih banyak daripada yang dibutuhkan. Selesaikan sebanyak mungkin kueri yang tidak terindeks untuk mengoptimalkan performa database Anda.

Laporan Kueri yang Tidak Terindeks menampilkan properti berikut:

  • Lokasi: Lokasi di database tempat terjadinya kueri yang tidak terindeks.
  • Indeks: Aturan yang harus Anda tambahkan untuk menyelesaikan kueri yang tidak terindeks. Pelajari lebih lanjut pengindeksan dalam Mengindeks data.
  • Jumlah: Jumlah kueri tidak terindeks yang terjadi di lokasi yang ditetapkan.

Pembuatan profil lanjutan

Untuk melihat semua operasi yang ditangani database Anda, gunakan flag --raw ketika membuat profil database, seperti berikut:

firebase database:profile --raw

Output mentah juga mencakup informasi klien untuk setiap operasi, seperti string userAgent dan alamat IP. Pelajari lebih lanjut berbagai operasi yang diprofilkan di Firebase Realtime Database di Jenis Operasi Firebase Realtime Database.

Fitur profiler: Bukan fitur penagihan

Jangan gunakan alat profiler untuk memperkirakan biaya bandwidth. Fitur profiler bertujuan untuk memberi Anda gambaran keseluruhan mengenai performa database, untuk membantu Anda memantau operasi dan memecahkan masalah, bukan untuk memperkirakan tagihan. Fitur ini tidak memperhitungkan traffic jaringan, hanya mencatat perkiraan data aplikasi yang dikirim sebagai respons.

Berikut adalah beberapa contoh umum traffic jaringan yang ditagih oleh Firebase, yang tidak tercakup dalam profil database Anda:

  • Overhead protokol: Diperlukan beberapa traffic tambahan antara server dan klien untuk membangun dan memelihara sesi. Bergantung pada protokol yang mendasarinya, traffic ini mungkin mencakup: overhead protokol realtime Firebase Realtime Database, overhead WebSocket, dan overhead header HTTP. Setiap kali koneksi dibuat, overhead ini, yang digabungkan dengan overhead enkripsi SSL, menimbulkan biaya koneksi. Meskipun biasanya bukan bandwidth dalam jumlah besar, biaya ini bisa menjadi signifikan jika payload Anda kecil atau Anda sering membuat koneksi pendek.
  • Overhead enkripsi SSL: Ada biaya yang terkait dengan overhead enkripsi SSL yang diperlukan untuk koneksi yang aman. Rata-rata, biaya yang dikenakan adalah sekitar 3,5 KB untuk handshake awal dan sekitar 40 B untuk header record TLS pada setiap pesan keluar. Untuk sebagian besar aplikasi, biaya ini merupakan persentase kecil dari tagihan. Namun, persentase biaya ini bisa meningkat jika kasus tertentu Anda memerlukan banyak handshake SSL. Misalnya, perangkat yang tidak mendukung tiket sesi TLS mungkin memerlukan handshake koneksi SSL dalam jumlah besar.

Baca lebih lanjut cara memahami dan memperkirakan tagihan.