Назад | Перейти на главную страницу

что означает заблокированный% в монгостате?

При запуске mongostat для просмотра нашей базы данных mongo я часто вижу, как заблокированное число% подскакивает, иногда до 80%. Вот несколько примеров строк:

insert  query update delete getmore command flushes mapped  vsize    res faults locked % idx miss %     qr|qw   ar|aw  netIn netOut  conn       time 
 0     10      7      0       0      17       0  2.27g     5g  1.63g      0      0.1          0       0|0     0|0    22k     7k    83   15:46:10 
 0     21      7      1       0      23       0  2.27g     5g  1.73g      0      0.1          0       0|0     0|1    11k   424k    83   15:46:11 
 0     28     10      3       0      28       0  2.27g     5g  1.73g      0     26.9          0       0|0     0|0    33k   196k    83   15:46:12 
 0     17      6      3       0      13       0  2.27g     5g  1.72g      0     18.2          0       0|0     0|0    11k    10k    83   15:46:13 
 0     18      5      1       0      11       0  2.27g     5g  1.73g      0      0.1          0       0|0     0|0    23k   362k    83   15:46:14 

В справке по монгостату написано, что это

заблокировано - процент времени в глобальной блокировке записи

Насколько я понимаю, запись блокирует всю базу данных. Если у меня есть две базы данных на одном сервере mongo (A и B), будет ли запись в блоке A записывать на B? Означает ли половина времени использования одной базы данных 25% (например, при использовании половины одного ядра в двухъядерном корпусе) или 50%?

Да, MongoDB использует глобальную блокировку записи (на уровне сервера), поэтому "% блокировки", сообщаемый mongostat, представляет собой общее количество времени, которое сервер провел в глобальной блокировке записи в течение последнего периода выборки (одна секунда) - для всех операций по всем dbs.

По мере того как вы выполняете больше операций записи, таких как обновления, вставки, удаления и удаления, это значение будет увеличиваться.

Цифры в приведенном выше примере не вызывают беспокойства для автономного сервера.

Однако регулярные показания 80% предполагают, что вы можете захотеть сбалансировать свои чтения и записи на большем количестве серверов или разделить свою коллекцию (-и), хотя я бы посмотрел на сегментирование, чтобы облегчить проблемы с хранением, прежде чем проблемы с производительностью.

В общем, ключи к оптимизации включают правильное и полное индексирование, ограничение результатов, использование профилировщика и объяснение () для выявления узких мест, а также обеспечение правильного использования драйвера (экспериментирование с размером пакета курсора может привести к значительным улучшениям).

Высокий процент блокировки записи - не единственный показатель производительности. Вы должны объединить это число с вашей очередью записи, которая указывает количество вставок / обновлений / upserts и операций удаления, которые поставлены в очередь (всего) для получения блокировки. Если оба числа остаются стабильно высокими, возникает проблема, которую следует немедленно решать. В таком случае начните с извлечения самых медленных запросов, проанализируйте их и попытайтесь настроить. Если дальнейшая настройка невозможна, обратитесь к ресурсам, выделенным на сервере.