Я прочитал proc/<pid>/io
для измерения IO-активности SQL-запросов, где <pid>
— это PID сервера базы данных. Я читаю значения до и после каждого запроса, чтобы вычислить разницу и получить количество байтов, которые запрос вызвал для чтения и/или записи.
Насколько я знаю, поле READ_BYTES
подсчитывает фактический дисковый ввод-вывод, а RCHAR
включает в себя больше, например чтение, которое может быть выполнено кешем страниц linux (см. Понимание счетчиков в /proc/[pid]/io для уточнения). Это приводит к предположению, что RCHAR
должно иметь значение, равное или большее, чем READ_BYTES
, но мои результаты противоречат этому предположению.
Я мог бы представить себе некоторые незначительные накладные расходы на блок или страницу для результатов, которые я получаю для Infobright ICE (значения указаны в МБ):
Query RCHAR READ_BYTES
tpch_q01.sql| 34.44180| 34.89453|
tpch_q02.sql| 2.89191| 3.64453|
tpch_q03.sql| 32.58994| 33.19531|
tpch_q04.sql| 17.78325| 18.27344|
Но я совершенно не понимаю IO-счетчики для MonetDB (значения МБ):
Query RCHAR READ_BYTES
tpch_q01.sql| 0.07501| 220.58203|
tpch_q02.sql| 1.37840| 18.16016|
tpch_q03.sql| 0.08272| 162.38281|
tpch_q04.sql| 0.06604| 83.25391|
Я ошибаюсь в предположении, что RCHAR
включает READ_BYTES
? Есть ли способ обмануть счетчики ядер, которые могла бы использовать MonetDB? Что здесь происходит?
Я мог бы добавить, что я очищаю кэш страниц и перезапускаю сервер базы данных перед каждым запросом. У меня Ubuntu 11.10 с ядром 3.0.0-15-generic.