> ## Documentation Index
> Fetch the complete documentation index at: https://www.helius.dev/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Как использовать getRecentPerformanceSamples

> Изучите сценарии использования getRecentPerformanceSamples, примеры кода, параметры запроса, структуру ответа и рекомендации.

Метод RPC [`getRecentPerformanceSamples`](https://www.helius.dev/docs/api-reference/rpc/http/getrecentperformancesamples) предоставляет снимок последних показателей производительности сети Solana. Он возвращает список выборок, которые формируются примерно каждые 60 секунд и содержат сведения о количестве транзакций и слотов, обработанных за эти периоды. Эти данные особенно полезны для мониторинга пропускной способности и состояния сети. Подробнее о таких показателях производительности Solana, как TPS и время слота, читайте в [руководстве по использованию Solana в корпоративной среде](https://www.helius.dev/blog/solana-for-enterprise).

## Распространенные сценарии использования

* **Мониторинг состояния сети:** Отслеживайте скорость обработки транзакций и создания слотов, чтобы оценивать общее состояние сети и выявлять возможную перегрузку или замедление работы.
* **Анализ производительности:** Анализируйте исторические данные о производительности, чтобы понимать поведение сети в различных условиях.
* **Панели мониторинга:** Отображайте ключевые показатели эффективности (KPI), такие как количество транзакций в секунду (TPS) и слотов в минуту, на панелях мониторинга.
* **Планирование ресурсов:** Отслеживайте тенденции изменения нагрузки на сеть, чтобы принимать обоснованные решения о масштабировании приложений или инфраструктуры.

## Параметры запроса

1. **`limit`** (`usize`, необязательный):
   * Количество последних выборок производительности, которые требуется вернуть.
   * Максимальное значение: `720` (соответствует примерно 12 часам данных, поскольку выборки формируются каждые 60 секунд).
   * Если параметр не указан, RPC-узел вернет количество выборок по умолчанию (точное значение зависит от провайдера RPC).

## Структура ответа

Поле `result` ответа JSON-RPC представляет собой массив объектов выборок производительности, возвращаемых в обратном хронологическом порядке (сначала самая последняя выборка). Каждый объект имеет следующую структуру:

* **`slot`** (`u64`): Номер слота, в котором была зарегистрирована эта выборка производительности.
* **`numTransactions`** (`u64`): Общее количество транзакций (включая голосующие и неголосующие транзакции), обработанных в течение периода `samplePeriodSecs`, предшествующего этому слоту `slot`.
* **`numSlots`** (`u64`): Количество слотов, обработанных в течение периода `samplePeriodSecs`, предшествующего этому слоту `slot`.
* **`samplePeriodSecs`** (`u16`): Продолжительность периода формирования этой выборки в секундах (обычно `60`).
* **`numNonVoteTransactions`** (`u64`): Количество обработанных в течение периода `samplePeriodSecs` транзакций, которые не являлись транзакциями консенсусного голосования.

## Примеры

### 1. Получение последних 5 выборок производительности

В этом примере запрашиваются пять последних выборок производительности сети.

<CodeGroup>
  ```bash cURL theme={"system"}
  # Replace <api-key> with your Helius API key
  curl https://mainnet.helius-rpc.com/?api-key=<api-key> -X POST -H "Content-Type: application/json" -d \
    '{
      "jsonrpc": "2.0",
      "id": 1,
      "method": "getRecentPerformanceSamples",
      "params": [5]
    }'
  ```

  ```javascript JavaScript (using @solana/web3.js) theme={"system"}
  // Replace <api-key> with your Helius API key
  const { Connection } = require('@solana/web3.js');

  async function fetchRecentPerformance() {
    const connection = new Connection('https://mainnet.helius-rpc.com/?api-key=<api-key>');
    try {
      const samples = await connection.getRecentPerformanceSamples(5);
      if (samples && samples.length > 0) {
        console.log(`Fetched ${samples.length} performance samples:`);
        samples.forEach((sample, index) => {
          console.log(`--- Sample ${index + 1} ---`);
          console.log(`  Slot: ${sample.slot}`);
          console.log(`  Number of Slots in Period: ${sample.numSlots}`);
          console.log(`  Total Transactions: ${sample.numTransactions}`);
          console.log(`  Non-Vote Transactions: ${sample.numNonVoteTransactions}`);
          console.log(`  Sample Period (seconds): ${sample.samplePeriodSecs}`);
          const tps = sample.numTransactions / sample.samplePeriodSecs;
          const nonVoteTps = sample.numNonVoteTransactions / sample.samplePeriodSecs;
          console.log(`  Average TPS (Total): ${tps.toFixed(2)}`);
          console.log(`  Average TPS (Non-Vote): ${nonVoteTps.toFixed(2)}`);
        });
      } else {
        console.log('No performance samples returned.');
      }
    } catch (error) {
      console.error('Error fetching recent performance samples:', error);
    }
  }

  fetchRecentPerformance();
  ```
</CodeGroup>

### 2. Получение количества выборок производительности по умолчанию

В этом примере параметр `limit` не указывается, поэтому у RPC-узла запрашивается количество выборок по умолчанию.

<CodeGroup>
  ```bash cURL theme={"system"}
  # Replace <api-key> with your Helius API key
  curl https://mainnet.helius-rpc.com/?api-key=<api-key> -X POST -H "Content-Type: application/json" -d \
    '{
      "jsonrpc": "2.0",
      "id": 1,
      "method": "getRecentPerformanceSamples"
    }'
  ```

  ```javascript JavaScript (using @solana/web3.js) theme={"system"}
  // Replace <api-key> with your Helius API key
  const { Connection } = require('@solana/web3.js');

  async function fetchDefaultPerformanceSamples() {
    const connection = new Connection('https://mainnet.helius-rpc.com/?api-key=<api-key>');
    try {
      const samples = await connection.getRecentPerformanceSamples(); // No limit parameter
      if (samples && samples.length > 0) {
        console.log(`Fetched ${samples.length} (default) performance samples:`);
        // Process or log samples as needed - e.g., the first one
        const sample = samples[0];
        console.log(`--- Most Recent Sample ---`);
        console.log(`  Slot: ${sample.slot}`);
        console.log(`  Total Transactions: ${sample.numTransactions}`);
        console.log(`  Non-Vote Transactions: ${sample.numNonVoteTransactions}`);
        console.log(`  Slots in Period: ${sample.numSlots}`);
        console.log(`  Sample Period (seconds): ${sample.samplePeriodSecs}`);
      } else {
        console.log('No performance samples returned.');
      }
    } catch (error) {
      console.error('Error fetching default performance samples:', error);
    }
  }

  fetchDefaultPerformanceSamples();
  ```
</CodeGroup>

## Рекомендации разработчикам

* **Интервал выборки:** Выборки обычно формируются каждые 60 секунд, но это приблизительное значение. Поле `samplePeriodSecs` в ответе указывает фактическую продолжительность каждой выборки.
* **Ограничение исторических данных:** Максимальное значение `limit`, равное 720 выборкам, охватывает примерно 12 часов исторических данных. Для долгосрочного анализа производительности необходимо использовать внешнее журналирование и агрегирование данных.
* **Голосующие и неголосующие транзакции:** `numTransactions` включает все транзакции, а `numNonVoteTransactions` учитывает только транзакции, не являющиеся частью процесса консенсусного голосования. Последний показатель часто лучше отражает активность пользователей в сети.
* **Различия между узлами:** Точные данные на разных RPC-узлах могут немного различаться в зависимости от состояния их синхронизации и локального представления сети на момент формирования выборки.

Используя `getRecentPerformanceSamples`, разработчики и наблюдатели сети могут получать ценную информацию о рабочем состоянии и пропускной способности сети Solana.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.