truncate完全阻塞insert语句?

[复制链接]
查看11 | 回复2 | 2011-2-18 11:43:33 | 显示全部楼层 |阅读模式
有一range时间分区表TRADELOG,某日执行truncate分区清理时,发现有insert语句被阻塞。
清理语句如下:
ALTER TABLE TRADELOG TRUNCATE PARTITION P17 REUSE STORAGE
插入语句如下:
insert into tradelog values ....
等待事件表现为 cursor: pin S wait on X
-----------------------------------------
从ASH分析,众多insert的session被session b阻塞,等待事件为 cursor: pin S wait on X,session b又被session c阻塞,等待事件为library cache lock。session c为truncate语句。
猜测可能的原因,各位技术大拿指教:
truncate分区为DDL语句,执行时会把涉及该表所有内存中的现有SQL完全刷新出内存。而且truncate分区在解析时需要排他的mutex锁,也需要对表加排他的DDL锁,所以session b的insert语句被迫阻塞,引发library cache lock类等待事件。由于insert语句执行非常频繁,每秒80次,所以其他insert语句执行时被迫等session b先施放mutex上的排他x锁,所以造成了大量的cursor pin s wait on x锁。
现在的疑问是:
如果truncate执行非常长,是否insert语句一直阻塞呢?(此场景持续了30秒)
回复

使用道具 举报

千问 | 2011-2-18 11:43:33 | 显示全部楼层
不太懂的飘过。
回复

使用道具 举报

千问 | 2011-2-18 11:43:33 | 显示全部楼层
学习了
等高人回答
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行