Все мы знаем, что ввод-вывод памяти быстрее, чем ввод-вывод диска. База данных использует механизм кеширования для повышения производительности. Похоже, что дело не в накладных расходах ЦП.
Я имею в виду, что обычно процессор достаточно быстр, чтобы не быть узким местом в производительности небольшой локальной базы данных, использующей, например, Berkeley DB. Относительно более быстрый процессор не улучшит производительность такой базы данных.
Мой вопрос в том, верно ли мое верхнее предположение.
Я провел несколько простых тестов, которые оказались против моего предположения и сбили меня с толку.
Например, я сделал тест для выполнения 100 000 операций записи / чтения darabase и поставил небольшой цикл FOR перед каждой операцией записи, чтобы добавить некоторые накладные расходы ЦП. Я ожидал, что цикл FOR не повлияет на общее время выполнения программы. Но результат был наоборот. Дополнительное время выполнения точно такое же, как и для отдельных циклов FOR.
Означает ли это, что когда ЦП записывает данные в память, он просто приостанавливается в ожидании выполнения операции, независимо от того, насколько быстрым сам ЦП?
PS: Извините за мое неточное английское выражение. Я старался изо всех сил ...
Да, операции с базой данных обычно должны быть записаны на диск, прежде чем они вернутся как успешные. Это очень хорошо, поскольку программа не должна продолжаться, пока не узнает, правильно ли была выполнена операция. Если бы вы распараллелили свою тестовую программу, вы, вероятно, обнаружили бы, что ваши циклы меньше влияют на время выполнения, поскольку циклы могут выполняться, пока другие потоки ожидают завершения своих операций ввода-вывода.
Кроме того, хотя современные ЦП, безусловно, являются наиболее непохожими кандидатами на то, чтобы стать узким местом в базе данных, в целом это неверно: в зависимости от вашего приложения и его запросов к БД они могут быть чрезвычайно обременительными для ЦП, оставляя дисковую подсистему бездействующей, а ЦП работает на 100%.