Оценивайте производительность Firebase Realtime Database с помощью инструмента профилирования баз данных, встроенного в Firebase CLI. Профайлер регистрирует все действия в базе данных за определенный период времени, а затем создает подробный отчет. Подробный отчет позволяет устранять неполадки с производительностью базы данных, выявлять проблемные области и сокращать количество неиндексированных запросов.
Создайте профиль
Прежде чем начать профилирование Firebase Realtime Database, убедитесь, что вы используете последнюю версию Firebase CLI и инициализировали ее для базы данных и проекта, которые хотите профилировать. Обратите внимание, что для профилирования вы должны быть редактором или владельцем этого проекта.
Запустите профилирование базы данных с помощью следующей команды:
Профилировщик будет показывать сообщения о статусе, пока он записывает операции из базы данных и создает профиль.firebase database:profile
Нажмите Ввод, чтобы завершить создание профиля и посмотреть результаты.
Как интерпретировать результаты
Инструмент профилирования агрегирует собранные данные об операциях в базе данных и показывает результаты в трех основных категориях: скорость, пропускная способность и неиндексированные запросы.
Скорость
В отчете о скорости указывается время ответа сервера (в миллисекундах) для каждого типа операции. Однако скорость, указанная в отчете о скорости, может не отражать реальную скорость, которую видят конечные пользователи. Различные факторы, в том числе состояние сети, могут увеличить задержку на стороне клиента.
В отчете о скорости представлены следующие свойства:
- Путь. Путь в базе данных, по которому выполнялись операции. Если дочерних узлов больше 25, инструмент профилирования сворачивает их в родительский путь и добавляет маркер
$wildcard. В отчете может быть указан корневой каталог базы данных, обозначенный косой чертой/. - Количество. Количество операций, выполненных по указанному пути.
- Средняя скорость выполнения. Среднее время, которое требуется серверу для выполнения бизнес-логики, необходимой для обработки определенного типа операции по этому пути. Временной интервал, измеряемый здесь, начинается после интервала, измеряемого показателем "Среднее время ожидания", описанным ниже.
- Среднее время ожидания. Среднее время, в течение которого запросы находятся в очереди перед выполнением. Такая задержка характерна для всех запросов, инициированных клиентом. Общая задержка запроса на стороне сервера примерно равна сумме времени ожидания и скорости выполнения этого запроса.
- Доступ запрещен. Количество операций по указанному пути, которые были заблокированы правилами Firebase Database в вашей базе данных.
| Отчет о скорости по типу операции | |
|---|---|
| Чтение данных о скорости выполнения | Время ответа сервера на запросы клиентов о чтении данных из базы данных. Время выполнения чтения обычно зависит от объема считываемых данных, но даже некоторые небольшие операции чтения могут задерживаться из-за предварительной выборки кэша. |
| Скорость выполнения записи | Время ответа сервера на запросы клиента о записи данных в базу данных. Время выполнения записи зависит от объема записываемых данных. |
| Скорость выполнения подключения | Время ответа сервера на запросы, отправленные клиентам базы данных. Задержка запросов на подключение в основном связана с серверным учетом в памяти, относящимся к управлению подключениями. |
| Скорость выполнения трансляции | Время, которое требуется серверу для передачи данных клиентам, ожидающим обновления в реальном времени по указанному пути. Свойство Count в отчете о скорости трансляции показывает количество трансляций, а не количество клиентов, получивших информацию. Например, если 10 клиентов прослушивали определенный путь и сервер передал обновление всем 10 клиентам, количество трансляций отражает только одну трансляцию, несмотря на то, что данные получили 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 КБ для первоначального рукопожатия и около 40 Б для заголовков записей TLS в каждом исходящем сообщении. Для большинства приложений это небольшая часть счета. Однако эта доля может быть и выше, если в вашем случае требуется много SSL-рукопожатий. Например, устройства, которые не поддерживают билеты сеансов TLS, могут требовать большого количества подтверждений SSL-подключения.
Подробнее о том, как рассчитывается стоимость подписки…