Почему моя настройка mongodb не достигает лимита EBS IOPS?

Почему моя настройка mongodb не достигает лимита EBS IOPS?

У меня есть приложение, которое постоянно перекачивает данные в MongoDB. Экземпляр MongoDB работает с 2 репликами, каждая с томом gp2 EBS объемом 3 ТБ.

Как вы можете видеть на следующем графике

irate(node_disk_reads_completed_total{}[1m])
irate(node_disk_writes_completed_total{}[1m])

График чтения и записи на диск

Скорость чтения низкая и стабильная, что нормально, а вот скорость записи, похоже, недостаточная.

Даже в пиковые периоды мы никогда не достигаем теоретических 3IOPS/ГБ * 3000 ГБ = 9k IOPS. Само приложение тратит большую часть времени на закачку все большего количества данных в БД, поэтому с точки зрения приложения БД является явным узким местом.

Так почему же он не может работать быстрее? И почему это такая волна? Я бы ожидал, что запись в WAL будет обеспечивать постоянный источник активности записи, а такие вещи, как периодическая fsync на диск, на самом деле не будут вызывать такие экстремальные паттерны подъема и спада.

Может ли быть, что синхронизация между репликами вызывает паузы в пропускной способности? Но я использую беспокойство по записи по умолчанию, которое должно быть w: 1, j: trueи не требовать ожидания реплик.

Что-то еще, что я мог упустить?

Связанный контент