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

Чем больше потоков, тем меньше IOPS?

Я только начал пробовать AWS. У меня есть микро-экземпляр Postgres на RDS, и я запускаю краулер на c4.large. Когда у меня всего один паук (один поток), я получаю около 10 операций ввода-вывода в секунду при записи. но если были развернуты два паука (2 потока), я получил всего 7 операций ввода-вывода в секунду при записи. Если я правильно понимаю, так как я выделил 20 ГБ, максимальное количество операций ввода-вывода в секунду должно составлять в целом 60IOPS. Ниже я прикрепил мониторинг.

Когда был развернут только один паук:

Когда рядом был размещен второй паук:

Обратите внимание на снижение среднего числа операций ввода-вывода в секунду с 10 до 7 операций ввода-вывода в секунду при записи.

Любая помощь будет высоко ценится.

Какой тип серверной части ввода-вывода вы используете? Он механический или флэш-накопитель?

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

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

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