วัดประสิทธิภาพของ Firebase Realtime Database ด้วยเครื่องมือโปรไฟล์ฐานข้อมูล ที่สร้างขึ้นใน Firebase CLI เครื่องมือ Profiler จะบันทึกกิจกรรมทั้งหมดในฐานข้อมูลในช่วงระยะเวลาหนึ่งๆ จากนั้นจะสร้างรายงานแบบละเอียด ใช้รายงานแบบละเอียดเพื่อแก้ปัญหาเกี่ยวกับ ประสิทธิภาพของฐานข้อมูล ระบุพื้นที่ที่มีปัญหา และลดการค้นหาที่ไม่ได้จัดทำดัชนี
สร้างโปรไฟล์
ก่อนเริ่มการสร้างโปรไฟล์ Firebase Realtime Database ให้ตรวจสอบว่าคุณใช้ Firebase CLI เวอร์ชันล่าสุด และได้เริ่มต้นใช้งานสำหรับฐานข้อมูลและโปรเจ็กต์ที่ต้องการสร้างโปรไฟล์แล้ว โปรดทราบ ว่าคุณต้องเป็นผู้แก้ไขหรือเจ้าของโปรเจ็กต์นั้นจึงจะทำโปรไฟล์ได้
เริ่มการสร้างโปรไฟล์ฐานข้อมูลด้วยคำสั่งต่อไปนี้
Profiler จะแสดงข้อความสถานะขณะบันทึกการดำเนินการจาก ฐานข้อมูลและสร้างโปรไฟล์firebase database:profile
กด Enter เพื่อสร้างโปรไฟล์ให้เสร็จสมบูรณ์และแสดงผลลัพธ์
ตีความผลลัพธ์
เครื่องมือ Profiler จะรวบรวมข้อมูลที่เก็บรวบรวมไว้เกี่ยวกับการดำเนินการของฐานข้อมูล และแสดงผลลัพธ์ใน 3 หมวดหมู่หลัก ได้แก่ ความเร็ว แบนด์วิดท์ และคําค้นหาที่ไม่ได้ทําดัชนี
ความเร็ว
รายงานความเร็วจะวัดเวลาในการตอบกลับของเซิร์ฟเวอร์ (เป็นมิลลิวินาที) สำหรับการดำเนินการแต่ละประเภท อย่างไรก็ตาม ความเร็วที่วัดในรายงานความเร็วอาจไม่ แสดงถึงความเร็วที่ผู้ใช้ปลายทางได้รับจริง ปัจจัยต่างๆ รวมถึง สภาพเครือข่าย อาจทำให้เกิดเวลาในการตอบสนองที่ฝั่งไคลเอ็นต์
รายงานความเร็วประกอบด้วยพร็อพเพอร์ตี้ต่อไปนี้
- เส้นทาง: เส้นทางในฐานข้อมูลที่เกิดการดำเนินการ หากมีโหนดย่อยมากกว่า 25 รายการ เครื่องมือโปรไฟล์จะยุบโหนดเหล่านี้เป็นเส้นทางหลักและเพิ่มเครื่องหมาย
$wildcard
คุณอาจเห็นรูทไดเรกทอรีของฐานข้อมูลในรายงาน ซึ่งแสดงด้วยเครื่องหมายทับ/
- จำนวน: จำนวนการดำเนินการที่เกิดขึ้นในเส้นทางที่ระบุ
- ความเร็วในการดำเนินการโดยเฉลี่ย: เวลาโดยเฉลี่ยที่เซิร์ฟเวอร์ใช้ในการดำเนินการ ตรรกะทางธุรกิจที่จำเป็นในการจัดการการดำเนินการประเภทหนึ่งๆ ในเส้นทางนั้น ช่วงเวลาที่วัดที่นี่จะเริ่มหลังจากช่วงเวลาที่วัดโดย "เวลาที่รอดำเนินการโดยเฉลี่ย" ตามที่อธิบายไว้ด้านล่าง
- เวลาที่รอดำเนินการโดยเฉลี่ย: เวลาโดยเฉลี่ยที่คำขอใช้ในการรอคิว ก่อนที่จะ ได้รับการดำเนินการ ความล่าช้านี้เป็นเรื่องปกติสำหรับคำขอทั้งหมดที่ไคลเอ็นต์เป็นผู้เริ่มต้น เวลาในการตอบสนองของคำขอฝั่งเซิร์ฟเวอร์ทั้งหมดโดยประมาณคือผลรวมของ เวลาที่รอดำเนินการและความเร็วในการดำเนินการของคำขอนั้น
- ปฏิเสธสิทธิ์: จำนวนการดำเนินการที่เส้นทางที่ระบุซึ่งถูกบล็อกโดยกฎของฐานข้อมูล Firebase ในฐานข้อมูล
รายงานความเร็วตามประเภทการดำเนินการ | |
---|---|
ความเร็วในการอ่านการดำเนินการ | เวลาในการตอบกลับของเซิร์ฟเวอร์สำหรับคำขอของไคลเอ็นต์ในการอ่านข้อมูลจาก ฐานข้อมูล โดยทั่วไปเวลาในการอ่านจะปรับขนาดตามปริมาณข้อมูล ที่อ่าน แต่แม้แต่การอ่านขนาดเล็กบางรายการก็อาจล่าช้าเนื่องจากการ ดึงข้อมูลล่วงหน้าของแคช |
ความเร็วในการดำเนินการเขียน | เวลาในการตอบกลับของเซิร์ฟเวอร์สำหรับคำขอของไคลเอ็นต์ในการเขียนข้อมูลลงใน ฐานข้อมูล เขียนสเกลเวลาการดำเนินการพร้อมปริมาณข้อมูลที่เขียน |
ความเร็วในการดำเนินการของ Connect | เวลาในการตอบกลับของเซิร์ฟเวอร์สำหรับคำขอในการสร้างไคลเอ็นต์ฐานข้อมูล เวลาในการตอบสนองสำหรับคำขอการเชื่อมต่อส่วนใหญ่เกิดจากการบันทึกฝั่งเซิร์ฟเวอร์ในหน่วยความจำ ที่เกี่ยวข้องกับการจัดการการเชื่อมต่อ |
ความเร็วในการดำเนินการออกอากาศ | ระยะเวลาที่เซิร์ฟเวอร์ใช้ในการกระจายข้อมูลไปยังไคลเอ็นต์ ที่กำลังฟังเส้นทางที่กำหนดเพื่อรับการอัปเดตแบบเรียลไทม์ พร็อพเพอร์ตี้จำนวนใน รายงานความเร็วในการออกอากาศจะรวบรวมจำนวนการออกอากาศที่เกิดขึ้น ไม่ใช่ จำนวนไคลเอ็นต์ที่ได้รับข้อมูล เช่น หากไคลเอ็นต์ 10 ราย กำลังฟังที่เส้นทางหนึ่งๆ และเซิร์ฟเวอร์ออกอากาศการอัปเดตไปยังไคลเอ็นต์ทั้ง 10 ราย จำนวนการออกอากาศจะแสดงการออกอากาศเพียง 1 ครั้ง แม้ว่าไคลเอ็นต์ 10 ราย จะได้รับข้อมูลก็ตาม พร็อพเพอร์ตี้ Permission Denied จะไม่รวมอยู่ใน รายงานความเร็วในการออกอากาศ |
แบนด์วิดท์
รายงานแบนด์วิดท์ให้ข้อมูลเชิงลึกเกี่ยวกับปริมาณข้อมูลที่ฐานข้อมูลใช้ ในการดำเนินการขาเข้าและขาออก อย่างไรก็ตาม คุณไม่ควรใช้รายงานแบนด์วิดท์เพื่อประมาณการเรียกเก็บเงิน เนื่องจากรายงานนี้ไม่ได้รวมแบนด์วิดท์ที่ใช้สำหรับการดำเนินการอื่นๆ เช่น การสร้างโปรไฟล์ฐานข้อมูล รายงานแบนด์วิดท์จะประมาณขนาดเพย์โหลดของข้อมูลที่ใช้โดยการดำเนินการอ่าน เขียน และออกอากาศไปยังและจากฐานข้อมูลของคุณโดยประมาณ ซึ่งเป็นเครื่องมือที่วัดประสิทธิภาพ ไม่ใช่เครื่องมือที่คาดการณ์การเรียกเก็บเงิน
รายงานแบนด์วิดท์ประกอบด้วยพร็อพเพอร์ตี้ต่อไปนี้
เส้นทาง: เส้นทางในฐานข้อมูลที่เกิดการดำเนินการ หากมีโหนดลูกมากกว่า 25 รายการ เครื่องมือโปรไฟล์จะยุบโหนดเหล่านี้เป็นเส้นทางหลัก
ทั้งหมด: ไบต์ขาออกหรือขาเข้าทั้งหมดที่ใช้ในการดำเนินการทั้งหมด ในเส้นทางที่ระบุ
จำนวน: จำนวนการดำเนินการที่เกิดขึ้นในเส้นทางที่ระบุ
ค่าเฉลี่ย: จำนวนไบต์ที่ดาวน์โหลดหรืออัปโหลดโดยเฉลี่ยในการดำเนินการที่เส้นทางที่ระบุ (ไบต์/เขียนหรือไบต์/อ่าน)
รายงานแบนด์วิดท์ | |
---|---|
ไบต์ที่ดาวน์โหลด | ข้อมูลที่ใช้ผ่านการอ่านและการออกอากาศที่ส่งผ่าน SDK ของไคลเอ็นต์และ REST API |
ไบต์ที่อัปโหลด | ข้อมูลที่ใช้ผ่านคำขอเขียนที่เข้ามายังเซิร์ฟเวอร์ฐานข้อมูล การลบจะปรากฏเป็นการเขียนที่มี 0 ไบต์ในส่วนขาเข้า |
คำค้นหาที่ไม่ได้จัดทำดัชนี
การค้นหาที่ไม่ได้จัดทำดัชนีอาจมีค่าใช้จ่ายสูง เนื่องจากไคลเอ็นต์จะดาวน์โหลดข้อมูลทั้งหมดที่ ตำแหน่งหนึ่งๆ แล้วทำการค้นหาในข้อมูลนั้น ซึ่งจะใช้แบนด์วิดท์มากกว่าที่จำเป็น แก้ไขคำค้นหาที่ไม่ได้จัดทำดัชนีให้ได้มากที่สุดเพื่อเพิ่มประสิทธิภาพของฐานข้อมูล
รายงานการค้นหาที่ไม่ได้จัดทำดัชนีจะแสดงพร็อพเพอร์ตี้ต่อไปนี้
- เส้นทาง: เส้นทางในฐานข้อมูลที่เกิดการค้นหาที่ไม่ได้จัดทำดัชนี
- ดัชนี: กฎที่คุณควรเพิ่มเพื่อแก้ไขคำค้นหาที่ไม่ได้จัดทำดัชนี ดูข้อมูลเพิ่มเติมเกี่ยวกับการจัดทำดัชนีได้ในจัดทำดัชนีข้อมูล
- จำนวน: จำนวนคำค้นหาที่ไม่ได้จัดทำดัชนีซึ่งเกิดขึ้นในเส้นทางที่ระบุ
การทำโปรไฟล์ขั้นสูง
หากต้องการดูการดำเนินการทั้งหมดที่ฐานข้อมูลจัดการ ให้ใช้แฟล็ก --raw
เมื่อสร้างโปรไฟล์ฐานข้อมูล ดังนี้
firebase database:profile --raw
เอาต์พุตดิบยังมีข้อมูลไคลเอ็นต์สำหรับการดำเนินการแต่ละอย่าง เช่น สตริง userAgent
และที่อยู่ IP ดูข้อมูลเพิ่มเติมเกี่ยวกับการดำเนินการต่างๆ
ที่สร้างโปรไฟล์ใน Firebase Realtime Database ในFirebase Realtime Database ประเภทการดำเนินการ
เครื่องมือโปรไฟล์: ไม่ใช่เครื่องมือสำหรับการเรียกเก็บเงิน
อย่าใช้เครื่องมือโปรไฟล์เพื่อประมาณค่าใช้จ่ายแบนด์วิดท์ เครื่องมือโปรไฟล์มีไว้เพื่อให้คุณเห็นภาพรวมของประสิทธิภาพฐานข้อมูล เพื่อช่วยคุณตรวจสอบการดำเนินการและแก้ปัญหา ไม่ใช่เพื่อประมาณการเรียกเก็บเงิน โดยจะไม่นับรวมการเข้าชมเครือข่าย แต่จะบันทึกเฉพาะค่าประมาณของ ข้อมูลแอปพลิเคชันที่ส่งในการตอบกลับ
ต่อไปนี้คือตัวอย่างการเข้าชมเครือข่ายที่พบบ่อยซึ่ง Firebase เรียกเก็บเงิน และไม่ได้รวมอยู่ในโปรไฟล์ฐานข้อมูลของคุณ
- ค่าใช้จ่ายของโปรโตคอล: จำเป็นต้องมีการรับส่งข้อมูลเพิ่มเติมระหว่างเซิร์ฟเวอร์และไคลเอ็นต์ เพื่อสร้างและรักษาเซสชัน การรับส่งข้อมูลนี้อาจรวมถึงค่าใช้จ่ายของโปรโตคอลแบบเรียลไทม์ของ Firebase Realtime Database, ค่าใช้จ่ายของ WebSocket และค่าใช้จ่ายของส่วนหัว HTTP ทั้งนี้ขึ้นอยู่กับโปรโตคอลพื้นฐาน ทุกครั้งที่มีการสร้างการเชื่อมต่อ ค่าใช้จ่ายนี้รวมกับค่าใช้จ่ายในการเข้ารหัส SSL จะส่งผลต่อค่าใช้จ่ายในการเชื่อมต่อ แม้ว่าโดยปกติแล้วการเชื่อมต่อนี้จะไม่ใช้แบนด์วิดท์มากนัก แต่ก็อาจใช้แบนด์วิดท์จำนวนมากได้หากเพย์โหลดมีขนาดเล็กมาก หรือหากคุณเชื่อมต่อบ่อยครั้งและใช้เวลาสั้นๆ
- ค่าใช้จ่ายในการเข้ารหัส SSL: มีค่าใช้จ่ายที่เกี่ยวข้องกับค่าใช้จ่ายในการเข้ารหัส SSL ที่จำเป็นสำหรับการเชื่อมต่อที่ปลอดภัย โดยเฉลี่ยแล้ว ต้นทุนนี้ จะอยู่ที่ประมาณ 3.5 KB สำหรับการแฮนด์เชคครั้งแรก และประมาณ 40 ไบต์สำหรับ ส่วนหัวของระเบียน TLS ในแต่ละข้อความขาออก สำหรับแอปส่วนใหญ่ ค่าธรรมเนียมนี้จะเป็น เปอร์เซ็นต์เล็กๆ ของใบเรียกเก็บเงิน อย่างไรก็ตาม เปอร์เซ็นต์นี้อาจเพิ่มขึ้นมากหาก กรณีเฉพาะของคุณต้องใช้การแฮนด์เชค SSL จำนวนมาก เช่น อุปกรณ์ ที่ไม่รองรับตั๋วเซสชัน TLS อาจต้องใช้การแฮนด์เชคการเชื่อมต่อ SSL จำนวนมาก
อ่านเพิ่มเติมเกี่ยวกับการทำความเข้าใจและการประมาณค่าใช้จ่าย