有一个简单应用,一个表大约17000条记录,每个记录大约有200多列,这个表总共40M左右的容量,有N个这样的表,每个表结构一样的,查询语句很简单,取出表中的90%数据,select colx,coly from table_x where time between start and end,其中time为索引,这个语句不走索引这个是正确的,当一个用户执行的时候大约只有2秒,当10个用户并行的时候(每个用户确定查不同的表,程序模拟)速度变成40多秒,后台数据库的读取速度为每次读8M字节左右,怎样能提高并行效率啊?
1 更改表文件的INIT 为40M,,减少碎片,使得同一个表的数据连续存放:
2 因为要返回大量数据,走索引随进访问速度变慢,所以强制走TABLE SCAN,而不是INDEX scan
最终看我公司的数据库I/o由10M/S提到70M/S,问题解决,依然返回数据给应用程序(局域网)
可经观察,仅仅这么一个简单的查询,oracle的I/O仍然没有提上去,依然是10M/S左右,现在问题是,不考虑程序更改,仅仅这个语句,如何能提高Oracle I/O,什么原因导致的如此慢,即使网络传输,局域网内的也不至于这么慢
尽量的一次多读取block,可以调整下db_file_multiblock_read_count为最适合你的系统的值。