Czytam proc/<pid>/io
, aby zmierzyć aktywność IO zapytań SQL, gdzie <pid>
jest identyfikatorem PID serwera bazy danych. Odczytuję wartości przed i po każdym zapytaniu, aby obliczyć różnicę i uzyskać liczbę bajtów, przez które żądanie zostało przeczytane i/lub zapisane.Czy RCHAR obejmuje READ_BYTES (proc/<pid>/io)?
O ile wiem dziedzinie READ_BYTES
liczby rzeczywiste disk-IO, podczas RCHAR
zawiera więcej, jak czytamy, które mogą być zaspokojone przez cache widoku Linux (patrz Understanding the counters in /proc/[pid]/io dla wyjaśnienia). To prowadzi do założenia, że RCHAR
powinien wymyślić wartość równą lub większą niż READ_BYTES
, ale moje wyniki są sprzeczne z tym założeniem.
mogę sobie wyobrazić jakiś niewielki blok lub strona obciążenie dla wyników dostaję za Infobright WKP (wartości MB):
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|
Ale zupełnie nie rozumiem IO-liczniki dla MonetDB (wartości MB) :
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|
mylę przy założeniu, że RCHAR
obejmuje READ_BYTES
? Czy istnieje sposób na oszukanie liczników jądra, z których może korzystać MonetDB? Co tu się dzieje?
Mogę dodać, że wyczyszczę pamięć podręczną strony i zrestartuj serwer bazy danych przed każdym zapytaniem. Jestem na Ubuntu 11.10, z jądrem 3.0.0-15-generic.
Dziękuję. Rzeczywiście, [Dokumenty MonetDB Architecture] (http://www.monetdb.org/Documentation/Manuals/MonetDB/Architecture) mówią, że używają plików mapowanych w pamięci. – lupz