Измерьте производительность вашей Firebase Realtime Database с помощью инструмента профилирования базы данных, встроенного в Firebase CLI . Инструмент профилирования регистрирует все действия в базе данных за заданный период времени, а затем генерирует подробный отчёт. Используйте подробный отчёт для диагностики проблем с производительностью базы данных, выявления проблемных областей и сокращения количества неиндексированных запросов.
Создайте профиль
Прежде чем начать профилирование Firebase Realtime Database , убедитесь, что вы используете последнюю версию Firebase CLI и инициализировали её для базы данных и проекта, которые вы хотите профилировать. Обратите внимание, что для профилирования вы должны быть редактором или владельцем этого проекта.
Начните профилирование вашей базы данных с помощью следующей команды:
Профилировщик отображает сообщение о состоянии по мере того, как он записывает операции из вашей базы данных и создает профиль.firebase database:profile
Нажмите Enter , чтобы завершить профиль и отобразить результаты.
Интерпретируйте ваши результаты
Инструмент профилирования объединяет собранные данные об операциях вашей базы данных и отображает результаты по трем основным категориям: скорость , пропускная способность и неиндексированные запросы .
Скорость
Отчёт о скорости измеряет время отклика сервера (в миллисекундах) для каждого типа операции. Однако скорость, измеренная в отчёте о скорости, может не отражать реальную скорость, которую видят конечные пользователи. Различные факторы, включая состояние сети, могут увеличивать задержку на стороне клиента.
Отчет о скорости включает в себя следующие свойства:
- Путь: Путь в базе данных, где были выполнены операции. Если дочерних узлов больше 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 Realtime Database, накладные расходы WebSocket и накладные расходы HTTP-заголовков. При каждом установлении соединения эти накладные расходы в сочетании с накладными расходами на SSL-шифрование увеличивают стоимость соединения. Хотя обычно это незначительная часть пропускной способности, она может быть существенной, если объём ваших данных невелик или вы часто используете короткие соединения.
- Накладные расходы на SSL-шифрование: накладные расходы на SSL-шифрование, необходимые для обеспечения безопасности соединений, связаны с определенными расходами. В среднем эти расходы составляют около 3,5 КБ для начального согласования и около 40 КБ для заголовков записей TLS в каждом исходящем сообщении. Для большинства приложений это небольшая доля вашего счета. Однако эта доля может стать значительной, если в вашем конкретном случае требуется много SSL-согласований. Например, устройства, не поддерживающие билеты сеанса TLS, могут потребовать большого количества SSL-согласований.
Узнайте больше о том, как понимать и оценивать ваш счет .