Top.Mail.Ru
Tarantool » latest » Справочники » Справочник по встроенным модулям » Модуль box » Вложенный модуль box.info
 

Вложенный модуль box.info

Вложенный модуль box.info

Вложенный модуль box.info предоставляет доступ к информации о переменных экземпляра сервера.

  • cluster.uuid – это уникальный идентификатор набора реплик (UUID). У каждого экземпляра в наборе реплик будет одно и то же значение cluster.uuid. Данное значение также хранится в системном спейсе box.space._schema.
  • gc() возвращает состояние сборщика мусора в Tarantool’е, в том числе контрольные точки и их потребителей (пользователи); более подробную информацию см. ниже.
  • id соответствует идентификатору replication[n].id (см. ниже).
  • lsn соответствует регистрационному номеру replication[n].lsn (см. ниже).
  • listen возвращает реальный адрес, к которому был привязан экземпляр (см. ниже).
  • memory() возвращает статистику об использовании памяти (см. ниже).
  • pid – идентификатор процесса. Это значение также отображается с помощью модуля tarantool и по команде ps -A в Linux.
  • ro принимает значение true, если экземпляр находится в режиме только для чтения «read-only» (как read_only в box.cfg{}), или в статусе „orphan“ (одиночный).
  • signature представляет собой сумму всех значений lsn из векторных часов (vclock) всех экземпляров в наборе реплик.
  • sql().cache.size – это количество байтов в кэше подготовленных операторов SQL.
  • sql().cache.stmt_count – это количество операторов в кэше подготовленных операторов SQL.
  • status – это текущий статус экземпляра. Он может быть:
    • running – экземпляр запущен,
    • loading – экземпляр восстанавливается из xlog’ов или snapshot’ов или стартует с нуля (bootstrapping),
    • orphan – экземпляр (еще) не подключился к необходимому количеству мастеров (см. статус orphan),
    • hot_standby – экземпляр является резервным для другого экземпляра.
  • uptime – это количество секунд с момента запуска экземпляра. Данное значение также можно получить с помощью tarantool.uptime().
  • uuid соответствует идентификатору replication[n].uuid (см. ниже).
  • vclock – это таблица со значениями vclock всех экземпляров набора реплик, в которых произошли изменения данных.
  • version – это версия Tarantool’а. Данное значение также можно отобразить с помощью команды tarantool -V.
  • vinyl возвращает статистику времени работы для движка базы данных vinyl. Данная функция объявлена устаревшей, используйте box.stat.vinyl().
box.info()

Поскольку содержимое вложенного модуля box.info является динамическим, невозможно провести итерацию по ключам с помощью Lua-функции pairs(). Для этой цели модуль box.info() создает и возвращает Lua-таблицу со всеми ключами и значениями во вложенном модуле.

возвращается:ключи и значения во вложенном модуле
тип возвращаемого значения:
 таблица

Пример:

Данный пример приводится для набора со схемой мастер-реплика, который включает в себя один мастер-экземпляр и один реплика-экземпляр. Запрос был отправлен с реплики-экземпляра.

tarantool> box.info()
---
- version: 2.4.0-251-gc44ed3c08
  id: 1
  ro: false
  uuid: 1738767b-afa3-4987-b485-c333cf83415b
  package: Tarantool
  cluster:
    uuid: 40ee7f0f-7070-4650-8883-801e7014407c
  listen: '[::1]:57122'
  replication:
    1:
      id: 1
      uuid: 1738767b-afa3-4987-b485-c333cf83415b
      lsn: 16
  signature: 16
  status: running
  vinyl: []
  uptime: 21
  lsn: 16
  sql: []
  gc: []
  pid: 20293
  memory: []
  vclock: {1: 16}
...
box.info.memory()

Функция memory в box.info дает пользователю admin полное представление об экземпляре Tarantool’а.

Примечание

Чтобы получить представление о подсистеме vinyl’а, используйте box.stat.vinyl().

  • memory().cache – это количество байтов, используемых для кэширования данных пользователей. Движок базы данных memtx не нуждается в кэше, то есть на самом деле это количество байтов в кэше для кортежей движка базы данных vinyl.
  • memory().data – количество байтов, используемых для хранения данных пользователей (кортежи) в движке memtx и на уровне 0 движка vinyl, не принимая во внимание фрагментацию памяти.
  • memory().index – количество байтов, используемых для индексирования данных пользователей, включая экстенты для деревьев в memtx’е и vinyl’е, индекс страниц и фильтры Блума в vinyl’е.
  • memory().lua – количество байтов, используемых Lua-интерпретатором.
  • memory().net – количество байтов, используемых буферами для сетевого ввода-вывода.
  • memory().tx – количество байтов, используемых активными транзакциями. Для движка базы данных vinyl это общий размер всех размещаемых объектов (структура txv, структура vy_tx, структура vy_read_interval) и кортежей, прикрепленных к этим объектам.

Пример с минимальным распределением, когда используется только движок базы данных memtx:

tarantool> box.info.memory()
---
- cache: 0
  data: 6552
  tx: 0
  lua: 1315567
  net: 98304
  index: 1196032
...
box.info.gc()

Функция gc в box.info дает пользователю admin полное представление о факторах, которые влияют на сборщик мусора Tarantool’а. Сборщик мусора сопоставляет значения vclock (векторные часы) пользователей и контрольных точек, поэтому взглянув на box.info.gc(), можно понять, почему сборщик мусора не удалил старые WAL-файлы или что он может вскоре удалить.

  • gc().consumers – список пользователей, запросы которых могут затронуть сборку мусора.
  • gc().checkpoints – список сохраненных контрольных точек.
  • gc().checkpoints[n].references – список ссылок на контрольную точку.
  • gc().checkpoints[n].vclock – значение vclock контрольной точки.
  • gc().checkpoints[n].signature – сумма компонентов vclock контрольной точки.
  • gc().checkpoint_is_in_progress – true если идет создание контрольной точки, в противном случае false.
  • gc().vclock – vclock сборщика мусора.
  • gc().signature – сумма компонентов контрольной точки сборщика мусора.
box.info.listen

Возвращает реальный адрес, к которому был привязан экземпляр. Например,если box.cfg{listen} был установлен на порт 0, то box.info.listen покажет реальный порт. Адрес хранится как строка:

  • unix/:<path> для доменных сокетов UNIX
  • <ip>:<port> для IPv4
  • [ip]:<port> для IPv6

Если экземпляр ничего не прослушивает, то box.info.listen вернет nil.

Пример:

tarantool> box.cfg{listen=0}
---
...
tarantool> box.cfg.listen
---
- '0'
...
tarantool> box.info.listen
---
- 0.0.0.0:44149
...
box.info.replication

Раздел replication (репликация) во вложенном модуле box.info() содержит статистику по всем экземплярам в наборе реплик относительно текущего экземпляра (см. также «Мониторинг набора реплик»):

Далее n – это индексный номер одного элемента таблицы, например, replication[1], который содержит данные о экземпляре сервера номер 1, который может быть или не быть тем же самым, что и текущий экземпляр («текущий экземпляр» – это тот, что отвечает на box.info).

  • replication[n].id – это короткий числовой идентификатор экземпляра в наборе реплик. Данное значение хранится в системном спейсе box.space._cluster.
  • replication[n].uuid – это глобально-уникальный идентификатор экземпляра. Данное значение хранится в системном спейсе box.space._cluster.
  • replication[n].lsn – это номер в журнале (LSN) для последней записи в журнале упреждающей записи (WAL) экземпляра n.
  • replication[n].upstream возникает (т.е. не nil), если текущий экземпляр принимает или готов принимать данные от экземпляра n, что обычно означает replication[n].upstream.status = follow, replication[n].upstream.peer = url экземпляра n, который отдает данные, replication[n].lag и idle = скорость экземпляра, описанная позже. По-другому можно сказать, что replication[n].upstream возникает, когда replication[n].upstream.peer не принадлежит текущему экземпляру, не является доступным только для чтения и был указан в box.cfg{replication={...}}, поэтому он показан в box.cfg.replication.
  • replication[n].upstream.status – это репликационный статус экземпляра:
    • auth означает, что экземпляр проходит аутентификацию.
    • connecting означает, что происходит подключение.
    • disconnected означает, что экземпляр не подключен к набору реплик (по причине проблем в сети, а не ошибок репликации).
    • follow означает, что текущий экземпляр является репликой (только для чтения, или не только для чтения, но ведет себя как реплика для этого удаленного URI в конфигурации master-master) и получает или может получать данные от мастера экземпляра n (upstream).
    • stopped означает, что репликация остановилась по причине ошибки репликации (например, повторяющийся ключ).
    • sync означает, что мастер и реплика в данный момент синхронизируются для получения одинакового набора данных.
  • replication[n].upstream.idle – это время (в секундах) с момента получения последнего события. Это основной индикатор работоспособности репликации. Подробности в Monitoring a replica set.
  • replication[n].upstream.lag – это разница во времени между локальным временем на экземпляре n, зарегистрированным при получении события, и локальное время на другом мастере, зарегистрированное при записи события в журнал упреждающей записи на этом мастере. Более подробную информацию см. в разделе Мониторинг набора реплик.

  • replication[n].upstream.message содержит сообщение об ошибке в случае системного сбоя, в противном случае – nil.

  • replication[n].downstream появляется (т.е. не nil), когда имеются данные об экземпляре, который принимает данные от экземпляра n или намеревается это делать,что обычно означает replication[n].downstream.status = follow,

  • replication[n].downstream.vclock содержит векторные часы, которые представляют собой таблицу из пар „id, lsn“, например vclock: {1: 3054773, 4: 8938827, 3: 285902018} (Обратите внимание, что таблица может иметь несколько пар, хотя vclock - это единственное имя).

    Даже если экземпляр удален, его значения все равно появятся здесь; однако, его значения будут переопределены, если позже экземпляр присоединится с тем же UUID. Пары векторных часов будут появляться только если lsn > 0.

    replication[n].downstream.vclock может быть таким же, как и vclock текущего экземпляра (box.info.vclock), потому что все значения vclock в кластере известны. Мастер будет знать, что находится в копии vclock реплики, потому что, когда мастер делает изменение данных, он посылает информацию об изменении на реплику (включая векторные часы мастера), и реплика отвечает тем, что находится в ее таблице векторных часов.

    Также реплика отправляет всю свою таблицу векторных часов в ответ на сообщение контрольного сигнала мастера (heartbeat message), их примеры можно найти в разделе Бинарный протокол – репликация.

  • replication[n].downstream.idle – это время (в секундах) с момента последней отправки событий экземпляром n через downstream-репликацию.

  • replication[n].downstream.status – это статус для downstream-репликации:

    • stopped означает, что downstream-репликация остановлена,
    • follow означает, что downstream-репликация находится в процессе (экземпляр n готов принимать данные от мастера или уже делает это).
  • replication[n].downstream.message and replication[n].downstream.system_message не появятся, пока не возникнет проблем с соединением. Например, если экземпляр n даст сбой, то можно будет увидеть status = 'stopped', message = 'unexpected EOF when read from socket', и system_message = 'broken pipe'. См. также «сбой».

box.info.replication_anon()

Список всех анонимных реплик экземпляра.

Вывод аналогичен выводу box.info.replication, за исключением того, что анонимные реплики индексируются по их uuid, а не по идентификаторам серверов, так как идентификаторы серверов не имеют значения для анонимных реплик.

Обратите внимание, что при вызове box.info.replication_anon, возвращается только количество анонимных реплик текущего экземпляра. Чтобы увидеть полную статистику, нужно вызвать box.info.replication_anon(). Это делается для того, чтобы не перегружать вывод box.info избыточной информацией, так как анонимных реплик может быть много.

Пример:

tarantool> box.info.replication_anon
---
- count: 2
...

tarantool> box.info.replication_anon()
---
- 3a6a2cfb-7e47-42f6-8309-7a25c37feea1:
    id: 0
    uuid: 3a6a2cfb-7e47-42f6-8309-7a25c37feea1
    lsn: 0
    downstream:
      status: follow
      idle: 0.76203499999974
      vclock: {1: 1}
  f58e4cb0-e0a8-42a1-b439-591dd36c8e5e:
    id: 0
    uuid: f58e4cb0-e0a8-42a1-b439-591dd36c8e5e
    lsn: 0
    downstream:
      status: follow
      idle: 0.0041349999992235
      vclock: {1: 1}
...

Нужно отметить, что анонимные реплики скрывают свои lsn от других, поэтому lsn анонимной реплики всегда будет записан как ноль, даже если анонимная реплика выполняет некоторые локальные операции на спейсе. Для того, чтобы узнать lsn конкретной анонимной реплики, необходимо вызвать box.info.lsn на ней.