有对一张分区表执行select,查一直卡那儿不出来,后来我跟踪了这条语句,跟踪文件里显示如下:
WAIT #1: nam='gc cr multi block request' ela= 20 file#=33 block#=3517900 class#=1 obj#=75173 tim=1298211505902950
WAIT #1: nam='gc cr multi block request' ela= 648 file#=33 block#=3517900 class#=1 obj#=75173 tim=1298211505903645
WAIT #1: nam='gc cr multi block request' ela= 567 file#=33 block#=3517900 class#=1 obj#=75173 tim=1298211505904324
WAIT #1: nam='i/o slave wait' ela= 571 msg ptr=1 p2=56 p3=2147483647 obj#=75173 tim=1298211505905215
WAIT #1: nam='db file scattered read' ela= 759 file#=33 block#=3517885 blocks=16 obj#=75173 tim=1298211505905399
WAIT #1: nam='gc cr multi block request' ela= 20 file#=33 block#=3517916 class#=1 obj#=75173 tim=1298211505906166
WAIT #1: nam='gc cr multi block request' ela= 1300 file#=33 block#=3517916 class#=1 obj#=75173 tim=1298211505907514
WAIT #1: nam='i/o slave wait' ela= 600 msg ptr=1 p2=56 p3=2147483647 obj#=75173 tim=1298211505908529
WAIT #1: nam='db file scattered read' ela= 810 file#=33 block#=3517901 blocks=16 obj#=75173 tim=1298211505908735
全是这个。这什么原因。

解决方案 »

  1.   

    你的环境是rac, 这个事件表示你的分区表某一个块已经被更新,在其他节点要查询这个块前像数据.
    SQL语句并没有卡主,只是慢.建议对同一个分区的操作放在一个实例上,减少减少实例间 gc cr 请求.如果用了并行查询,同一个查询的slave server放在一个实例上,通过参数控制不要让他漂移.