上次提到了,
关于源表数据大批增加(减少)后,可以使用重建索引、重新获取统计信息等手段,
让使用绑定变量的SQL语句使用新的执行计划从而提高执行效率的方法
解决相同SQL语句在不同时间、不同状况、不同源表数据量、统计信息未改变的情况下
执行效率差异很大的问题。在串行任务中,这种手段效果很好。
但在并行任务中,效果就不是很理想了:
情况一:
A会话,向表a中写入大批数据后,做重建索引并收集统计信息,后续动作从a表中查询数据
但B会话同时在向a表中写入大批数据,这样就导致了A会话所收集的统计信息并不真实,
从而导致查询效率不一定理想。
情况二:
A会话写完数据后,重建索引的同时,B会话写完数据,也要重建索引,此时B会话会报错(不能
同时操作相同的DDL),即便通过容错手段不让B会话报错,那么,由于B会话写入数据所引起的
表信息改变,也不能被任何会话中的重新获取统计信息动作所获得。所以也会导致后续的
查询效率底下。请问,在这种并行操作中,应如何控制索引的重建等操作,且提高后需的查询性能呢?