处理ORACLE单个sql执行出现多个session的心得:
问题描述:
某项目按session 数购买的ORACLE数据库,当执行一个查询表的SQL时,后台出现有多个sessions,尝试了几次别的表的查询,发现没有分片的表没有出现多个session的情况,这时,可以判定出,由于数据库对分片表进行了并发执行,所以在后台有多个session执行同一个SQL,这属于正常现场。查看执行出现多个sessions的表的脚本,发现该表进行了范围分区,同时建立一个全局的索引。查看索引的状态信息:select status from user_indexes where index_name = 'IDX_NAME'; 发现索引状态为不可用。重建索引后,不出现多个session(查询数据范围为一个分片内)。经过询问,原来该表的分片会经常变动(通过分片语句进行删除、新增表的分片),而这种情况下,全局索引为实效,需要重建索引。但没有进行索引的重建,导致该表的分片在查询SQL语句中无效, 估数据会对查询进行并发查询所有的分片(即有多个sessions)。
心得:
1、对于分片表,查询数据范围跨多个片,会执行并发执行,这也是分片能提高性能的一个重要原因。
2、查看索引是否可用。一方面可以通过sql执行计划查看,另外也可以查询字典表user_indexes。
3、对于分片表,需要注意索引的类型,若分片不会变动的话,可以考虑使用全局索引(效率较高),若分片正常变化,则尽量使用本地索引『create index idx_name on tabname(index_cols) local 』,以简化对索引的重建所带来的消耗与管理成本。
本文来自CSDN博客,http://blog.csdn.net/bocodb/archive/2008/03/13/2177215.aspx