说句大废话,那就是“合理的平衡各种资源的使用,内存,cpu,io 等等”。这也是很有道理的,但是实际就不好做了,如何平衡呢?
具体点的么,通过比较,应该是响应时间做为主要的评判因素了。但是可能由于一些不确定的因素,可能会出现:这次跑的快,不等于下次也跑的快了。
那就要根据表的数据量的变化,确定一个比较合理的执行计划了,主要还是要降低逻辑读为调优的目标,其实物理读意义不大,一个sql语句第一次执行物理读肯定是很大的,到了第2次物理读也许就很小了。
某高人说:
在数据库整体上来讲,是要降低 物理读
而对于单条 sql 来讲,是以逻辑读的降低为标准的
道理很简单,对于单条sql来说,如果反复运行,物理读决定于 data buffer 的大小 ,第一次运行 和 第二次运行也是不一样的。
但比较稳定的是 逻辑读。 如果以物理读为标准,那难道物理读为0的sql就是好sql 了?如果sql的逻辑读都良好,那数据库整体的物理读降下来也是很自然的事情
高人又说:
临时段是不会生产redo 的
buffer gets 就可以理解为 对 buffer cache 中 buffer 的访问 buffer*次 ,也可以看做访问的 buffer数量,当然可能存在着一个buffer被访问多次的情况
至于 buffer gets,如果访问的块不在内存中自然就产生物理读,可物理读并不影响buffer gets ,因为对数据的访问最终是在内存中完成的,虽然额外地有物理读。
db block gets 仅仅表示 类似dml这类操作去访问数据块,dml 操作数据最终也是在访问buffer的过程中完成的啊,而 consistent gets 表示类似 select这样的查询去访问buffer。 更严格来说,是叫 current mode and query mode .这是oracle的读一致性的特点决定的