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