我阅读proc/<pid>/io
以测量 SQL 查询的 IO 活动,其中<pid>
是数据库服务器的 PID。我在每个查询之前和之后读取值以计算差异并获取请求导致读取和/或写入的字节数。
据我所知,该字段READ_BYTES
计算实际的磁盘 IO,同时RCHAR
包括更多,例如 linux 页面缓存可以满足的读取(请参阅了解 /proc/[pid]/io 中的计数器以 进行澄清)。这导致了一个假设,即RCHAR
应该得出一个等于或大于 的值READ_BYTES
,但我的结果与这个假设相矛盾。
我可以想象为 Infobright ICE 获得的结果会产生一些小的块或页面开销(值为 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|
但我完全无法理解 MonetDB 的 IO 计数器(值为 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|
我对包含的假设有误RCHAR
吗READ_BYTES
?有没有办法欺骗 MonetDB 可以使用的内核计数器?这里发生了什么?
我可能会补充一点,我会在每次查询之前清除页面缓存并重新启动数据库服务器。我在 Ubuntu 11.10 上,运行内核 3.0.0-15-generic。