На данный момент я предполагаю, что вы действительно пытаетесь частично понять, что определяет реальные скорости передачи данных, а не только теоретические. Как правило, если вы не пишете драйверы устройств для ОС, как однажды сделала моя компания, или не пишете сам механизм базы данных, все эти детали сегодня немного обыденны. Эти фактические детали в основном маскируются, фильтруются, компенсируются и скрываются многими факторами оборудования и факторов ОС, поэтому обычно вы не можете наблюдать за тем, что происходит напрямую.
По-прежнему важно понимать, что вызывает, а не вызывает проблемы с производительностью.
Средняя "скорость чтения данных" для баз данных будет в основном зависеть от размера ввода-вывода, который вы перемещаете за один раз, и от того, является ли он непрерывным или нет. Он также зависит от самого диска, сообщая о его реальных аппаратных параметрах, которые часто только моделируются. (Например, действительно ли есть 600 секторов на дорожку? Поскольку внешняя дорожка диска намного больше, любой диск за последние 30 лет будет иметь гораздо больше секторов на внешней дорожке, чем на внутренней.) Вот несколько примеров производительности, если это были истинные параметры:
Чтение базы данных: обычно означает, что номера секторов будут считываться случайным образом по всему диску (предположительно, 1024 байта из 2 последовательных 512 секторов), и ни один из секторов не находится в памяти или любом другом кеше: в этом случае ваша средняя скорость передачи данных равна собирается быть:
10 мс = изменение положения поиска головы: (Обратите внимание, что это означает, что вы можете выполнить только 100 операций поиска за 1 секунду, и поэтому 100 КБ / с будут самыми БЫСТРЫМИ, которые вы можете когда-либо прочитать 1024 случайным образом.)
1? MS = командные накладные расходы = неизвестно: раньше это было значительным, до 8 мс. Сегодня она, вероятно, будет в большей степени зависеть от вашей ОС, эффективно обрабатывая ваши запросы. Таким образом, если ваша система также вытеснит много МБ на диск, ваша система будет значительно замедлена. Количество операций ввода-вывода и дисков сегодня, вероятно, меньше, чем у MS. Это можно легко проверить с помощью SSD, чтобы имитировать вращающуюся шину HD и служебные данные прошивки. Включенное здесь, как правило, время переключения считывающих головок, если вы уже на правильном пути или цилиндре. Это также включает в себя возврат перемещенных данных в ОС. Следите за тем, чтобы общее время прерывания процессора оставалось <1%, что может указывать на аппаратную проблему диска. Грубое предположение? <1 мс, что все еще может быть значительным.
3,3 мс = вращаться, пока сектор не окажется под головками: 9000 об / мин / 60 с = 6,67 мс. Вероятность быть ближайшим или самым дальним составляет 50%, поэтому задержка в 3,33 мс для каждого ввода / вывода. Примечание. Это означает, что случайное чтение, если головка уже установлена на правильной дорожке, все равно будет составлять 3,33 мс, а ваша максимальная скорость передачи данных никогда не может превышать 300 КБ / с при 1 кОм ввода-вывода.
0,022 мс = время чтения головки: 6,67 мс / 600 секторов * 2 = 1024 считывания ==> 0,022 мс. Это означает, что максимальная скорость передачи данных на этом диске составляет 1 / 0,022 MS = 45 000 * 1024 = 46 МБ / с. Для операций чтения / запроса базы данных это совершенно несущественно, в то время как при перемещении всей базы данных это будет наиболее значимым фактором.
Таким образом, в этом случае ваша скорость "чтения базы данных" будет ~ 14.355 мс = 70 кб / с. Обратите внимание, что если IO было 512 (без учета 0,022 мс), скорость составляет половину этого. Используя 2048 и ставка удваивается. Поэтому наиболее значимым параметром является размер смежных секторов до тех пор, пока вы не доберетесь до полного чтения дорожки (при условии, что все сектора диска являются смежными).