ทำโปรไฟล์ฐานข้อมูลของคุณ

วัดประสิทธิภาพของ Firebase Realtime Database ด้วยเครื่องมือโปรไฟล์ฐานข้อมูล ที่สร้างขึ้นใน Firebase CLI เครื่องมือโปรไฟล์จะบันทึกกิจกรรมทั้งหมดในฐานข้อมูลในช่วงเวลาที่กำหนด จากนั้นสร้างรายงานโดยละเอียด ใช้รายงานโดยละเอียดเพื่อแก้ปัญหาเกี่ยวกับประสิทธิภาพของฐานข้อมูล ระบุพื้นที่ที่มีปัญหา และลดการค้นหาที่ไม่ได้ทำดัชนี

สร้างโปรไฟล์

  1. ก่อนที่จะเริ่มทำโปรไฟล์ Firebase Realtime Database ให้ตรวจสอบว่าคุณใช้ Firebase CLI เวอร์ชันล่าสุดและได้เริ่มต้นใช้งาน CLI สำหรับฐานข้อมูลและโปรเจ็กต์ที่ต้องการทำโปรไฟล์แล้ว โปรดทราบว่าคุณต้องเป็นผู้แก้ไขหรือเจ้าของโปรเจ็กต์ดังกล่าวจึงจะทำโปรไฟล์ได้

  2. เริ่มทำโปรไฟล์ฐานข้อมูลด้วยคำสั่งต่อไปนี้

    firebase database:profile
    โปรไฟล์จะแสดงข้อความสถานะขณะบันทึกการดำเนินการจากฐานข้อมูลและสร้างโปรไฟล์

  3. กด Enter เพื่อทำโปรไฟล์ให้เสร็จสมบูรณ์และแสดงผลลัพธ์

ตีความผลลัพธ์

เครื่องมือโปรไฟล์จะรวบรวมข้อมูลที่เก็บรวบรวมเกี่ยวกับการดำเนินการของฐานข้อมูล และแสดงผลลัพธ์ใน 3 หมวดหมู่หลัก ได้แก่ ความเร็ว แบนด์วิดท์ และ การค้นหาที่ไม่ได้ทำดัชนี

ความเร็ว

รายงานความเร็วจะวัดเวลาในการตอบสนองของเซิร์ฟเวอร์ (เป็นมิลลิวินาที) สำหรับการดำเนินการแต่ละประเภท อย่างไรก็ตาม ความเร็วที่วัดได้ในรายงานความเร็วอาจไม่ได้สะท้อนถึงความเร็วที่ผู้ใช้ปลายทางได้รับจริง ปัจจัยต่างๆ รวมถึงสภาพเครือข่ายอาจเพิ่มเวลาในการตอบสนองที่ฝั่งไคลเอ็นต์

รายงานความเร็วมีพร็อพเพอร์ตี้ต่อไปนี้

  • เส้นทาง: เส้นทางในฐานข้อมูลที่เกิดการดำเนินการ หากมีโหนดย่อยมากกว่า 25 รายการ เครื่องมือโปรไฟล์จะยุบโหนดเหล่านี้เป็นเส้นทางหลักและเพิ่มเครื่องหมาย $wildcard คุณอาจเห็นไดเรกทอรีรากของฐานข้อมูล ในรายงาน ซึ่งแสดงด้วยเครื่องหมายทับ /
  • จำนวน: จำนวนการดำเนินการที่เกิดขึ้นในเส้นทางที่กำหนด
  • ความเร็วในการดำเนินการโดยเฉลี่ย: เวลาเฉลี่ยที่เซิร์ฟเวอร์ใช้ในการดำเนินการตามตรรกะทางธุรกิจที่จำเป็นในการจัดการการดำเนินการประเภทหนึ่งๆ ในเส้นทางนั้น ช่วงเวลาที่วัดได้ที่นี่จะเริ่มขึ้นหลังจากช่วงเวลาที่วัดได้จาก "เวลาที่รอดำเนินการโดยเฉลี่ย" ที่อธิบายไว้ด้านล่าง
  • เวลาที่รอดำเนินการโดยเฉลี่ย: เวลาเฉลี่ยที่คำขอใช้ในการเข้าคิวรอการดำเนินการ ความล่าช้านี้เป็นเรื่องปกติสำหรับคำขอทั้งหมดที่ไคลเอ็นต์เป็นผู้เริ่มต้น เวลาในการตอบสนองทั้งหมดของคำขอฝั่งเซิร์ฟเวอร์จะเท่ากับเวลาที่รอดำเนินการและความเร็วในการดำเนินการของคำขอนั้นโดยประมาณ
  • สิทธิ์ถูกปฏิเสธ: จำนวนการดำเนินการใน เส้นทางที่กำหนดซึ่งถูก กฎฐานข้อมูล Firebase ในฐานข้อมูลบล็อกไว้
รายงานความเร็วตามประเภทการดำเนินการ
ความเร็วในการดำเนินการอ่าน เวลาในการตอบสนองของเซิร์ฟเวอร์สำหรับคำขอของไคลเอ็นต์ในการอ่านข้อมูลจากฐานข้อมูล โดยทั่วไป เวลาในการดำเนินการอ่านจะแปรผันตามปริมาณข้อมูลที่อ่าน แต่แม้แต่การอ่านข้อมูลจำนวนเล็กน้อยก็อาจล่าช้าเนื่องจากการดึงข้อมูลล่วงหน้าของแคช
ความเร็วในการดำเนินการเขียน เวลาในการตอบสนองของเซิร์ฟเวอร์สำหรับคำขอของไคลเอ็นต์ในการเขียนข้อมูลลงในฐานข้อมูล เวลาในการดำเนินการเขียนจะแปรผันตามปริมาณข้อมูลที่เขียน
ความเร็วในการดำเนินการเชื่อมต่อ เวลาในการตอบสนองของเซิร์ฟเวอร์สำหรับคำขอในการสร้างการเชื่อมต่อกับไคลเอ็นต์ฐานข้อมูล เวลาในการตอบสนองสำหรับคำขอการเชื่อมต่อส่วนใหญ่เกิดจากการจัดการข้อมูลฝั่งเซิร์ฟเวอร์ในหน่วยความจำที่เกี่ยวข้องกับการจัดการการเชื่อมต่อ
ความเร็วในการดำเนินการออกอากาศ

เวลาที่เซิร์ฟเวอร์ใช้ในการเผยแพร่ข้อมูลไปยังไคลเอ็นต์ที่ฟังเส้นทางที่กำหนดเพื่อรับการอัปเดตแบบเรียลไทม์

พร็อพเพอร์ตี้จำนวน ในรายงานความเร็วในการออกอากาศจะรวมจำนวนการออกอากาศที่เกิดขึ้น ไม่ใช่จำนวนไคลเอ็นต์ที่ได้รับข้อมูล ตัวอย่างเช่น หากไคลเอ็นต์ 10 รายกำลังฟังเส้นทางที่กำหนด และเซิร์ฟเวอร์ออกอากาศการอัปเดตไปยังไคลเอ็นต์ทั้ง 10 ราย จำนวนการออกอากาศจะแสดงการออกอากาศเพียง 1 ครั้ง แม้ว่าไคลเอ็นต์ 10 รายจะได้รับข้อมูลก็ตาม

พร็อพเพอร์ตี้สิทธิ์ถูกปฏิเสธ จะไม่รวมอยู่ในรายงานความเร็วในการออกอากาศ

แบนด์วิดท์

รายงานแบนด์วิดท์จะให้ข้อมูลเชิงลึกเกี่ยวกับปริมาณข้อมูลที่ฐานข้อมูลใช้ในการดำเนินการขาเข้าและขาออก อย่างไรก็ตาม คุณไม่ควรใช้รายงานแบนด์วิดท์เพื่อประมาณค่าใช้จ่ายในการเรียกเก็บเงิน เนื่องจากรายงานนี้ไม่ได้รวมแบนด์วิดท์ที่ใช้สำหรับการดำเนินการอื่นๆ เช่น การทำโปรไฟล์ฐานข้อมูล รายงานแบนด์วิดท์จะประมาณขนาดเพย์โหลดของข้อมูลที่การดำเนินการอ่าน เขียน และออกอากาศใช้จากและไปยังฐานข้อมูล รายงานนี้เป็นเครื่องมือที่วัดประสิทธิภาพ ไม่ใช่เครื่องมือที่คาดการณ์การเรียกเก็บเงิน

รายงานแบนด์วิดท์มีพร็อพเพอร์ตี้ต่อไปนี้

  • เส้นทาง: เส้นทางในฐานข้อมูลที่เกิดการดำเนินการ หากมีโหนดย่อยมากกว่า 25 รายการ เครื่องมือโปรไฟล์จะยุบโหนดเหล่านี้เป็นเส้นทางหลัก

  • ทั้งหมด: จำนวนไบต์ขาออกหรือขาเข้าทั้งหมดที่ใช้ในการดำเนินการทั้งหมดในเส้นทางที่กำหนด

  • จำนวน: จำนวนการดำเนินการที่เกิดขึ้นในเส้นทางที่กำหนด

  • เฉลี่ย: จำนวนไบต์ที่ดาวน์โหลดหรืออัปโหลดโดยเฉลี่ยในการดำเนินการในเส้นทางที่กำหนด (ไบต์/เขียนหรือไบต์/อ่าน)

รายงานแบนด์วิดท์
ไบต์ที่ดาวน์โหลด ข้อมูลที่ใช้ผ่านการดำเนินการอ่านและออกอากาศที่ส่งออกผ่าน SDK ของไคลเอ็นต์และ REST API
ไบต์ที่อัปโหลด ข้อมูลที่ใช้ผ่านคำขอเขียนที่เข้ามายังเซิร์ฟเวอร์ฐานข้อมูล การลบจะแสดงเป็นการเขียนที่มี 0 ไบต์ในส่วนขาเข้า

การค้นหาที่ไม่ได้ทำดัชนี

การค้นหาที่ไม่ได้ทำดัชนีอาจมีค่าใช้จ่ายสูง เนื่องจากไคลเอ็นต์จะดาวน์โหลดข้อมูลทั้งหมดในตำแหน่งหนึ่งๆ แล้วทำการค้นหาข้อมูลนั้น ซึ่งจะใช้แบนด์วิดท์มากกว่าที่จำเป็น แก้ไขการค้นหาที่ไม่ได้ทำดัชนีให้ได้มากที่สุดเพื่อเพิ่มประสิทธิภาพของฐานข้อมูล

รายงานการค้นหาที่ไม่ได้ทำดัชนีจะแสดงพร็อพเพอร์ตี้ต่อไปนี้

  • เส้นทาง: เส้นทางในฐานข้อมูลที่เกิดการค้นหาที่ไม่ได้ทำดัชนี
  • ดัชนี: กฎที่คุณควรเพิ่มเพื่อแก้ไขการค้นหาที่ไม่ได้ทำดัชนี ดูข้อมูลเพิ่มเติมเกี่ยวกับการทำดัชนีได้ที่ทำดัชนีข้อมูล
  • จำนวน: จำนวนการค้นหาที่ไม่ได้ทำดัชนีที่เกิดขึ้นในเส้นทางที่กำหนด

การทำโปรไฟล์ขั้นสูง

หากต้องการดูการดำเนินการทั้งหมดที่ฐานข้อมูลกำลังจัดการ ให้ใช้แฟล็ก --raw เมื่อทำโปรไฟล์ฐานข้อมูล ดังนี้

firebase database:profile --raw

เอาต์พุตดิบยังรวมถึงข้อมูลไคลเอ็นต์สำหรับการดำเนินการแต่ละรายการ เช่น สตริง userAgent และที่อยู่ IP ดูข้อมูลเพิ่มเติมเกี่ยวกับการดำเนินการต่างๆ ที่ทำโปรไฟล์ในFirebase Realtime Databaseได้ที่Firebase Realtime Databaseประเภทการดำเนินการ

เครื่องมือโปรไฟล์: ไม่ใช่เครื่องมือสำหรับการเรียกเก็บเงิน

อย่าใช้เครื่องมือโปรไฟล์เพื่อประมาณค่าใช้จ่ายแบนด์วิดท์ เครื่องมือโปรไฟล์มีไว้เพื่อให้คุณเห็นภาพรวมของประสิทธิภาพของฐานข้อมูล เพื่อช่วยคุณตรวจสอบการดำเนินการและแก้ปัญหา ไม่ใช่เพื่อประมาณค่าใช้จ่ายในการเรียกเก็บเงิน เครื่องมือนี้ไม่ได้คำนึงถึงการจราจรของข้อมูลในเครือข่าย แต่จะบันทึกเฉพาะค่าประมาณของข้อมูลแอปพลิเคชันที่ส่งในการตอบสนอง

ต่อไปนี้เป็นตัวอย่างทั่วไปของการจราจรของข้อมูลในเครือข่ายที่ Firebase เรียกเก็บเงินซึ่งไม่รวมอยู่ในโปรไฟล์ฐานข้อมูล

  • ค่าใช้จ่ายโปรโตคอล: การรับส่งข้อมูลเพิ่มเติมระหว่างเซิร์ฟเวอร์และไคลเอ็นต์เป็นสิ่งจำเป็นในการสร้างและรักษาเซสชัน การรับส่งข้อมูลนี้อาจรวมถึงค่าใช้จ่ายโปรโตคอลแบบเรียลไทม์ของฐานข้อมูลเรียลไทม์ของ Firebase, ค่าใช้จ่าย WebSocket และค่าใช้จ่ายส่วนหัว HTTP ทั้งนี้ขึ้นอยู่กับโปรโตคอลพื้นฐาน ทุกครั้งที่สร้างการเชื่อมต่อ ค่าใช้จ่ายนี้รวมกับค่าใช้จ่ายการเข้ารหัส SSL จะทำให้เกิดค่าใช้จ่ายในการเชื่อมต่อ แม้ว่าโดยทั่วไปแล้วค่าใช้จ่ายนี้จะไม่ใช่แบนด์วิดท์จำนวนมาก แต่ก็อาจมีจำนวนมากหากเพย์โหลดมีขนาดเล็กมากหรือคุณทำการเชื่อมต่อสั้นๆ บ่อยครั้ง
  • ค่าใช้จ่ายการเข้ารหัส SSL: มีค่าใช้จ่ายที่เกี่ยวข้องกับค่าใช้จ่ายการเข้ารหัส SSL ที่จำเป็นสำหรับการเชื่อมต่อที่ปลอดภัย โดยเฉลี่ยแล้ว ค่าใช้จ่ายนี้จะอยู่ที่ประมาณ 3.5 KB สำหรับการเริ่มต้นการเชื่อมต่อ และประมาณ 40 ไบต์สำหรับส่วนหัวของบันทึก TLS ในข้อความขาออกแต่ละรายการ สำหรับแอปส่วนใหญ่ ค่าใช้จ่ายนี้คิดเป็นเปอร์เซ็นต์เล็กน้อยของค่าใช้จ่ายในการเรียกเก็บเงิน อย่างไรก็ตาม ค่าใช้จ่ายนี้อาจคิดเป็นเปอร์เซ็นต์มากหากกรณีเฉพาะของคุณต้องมีการเริ่มต้นการเชื่อมต่อ SSL จำนวนมาก ตัวอย่างเช่น อุปกรณ์ที่ไม่รองรับตั๋วเซสชัน TLS อาจต้องมีการเริ่มต้นการเชื่อมต่อ SSL จำนวนมาก

อ่านเพิ่มเติมเกี่ยวกับการทำความเข้าใจและการประมาณค่าใช้จ่ายในการเรียกเก็บเงิน