一、产生原因:
表产生大量碎片,是因为在delete引起的。delete 删除表并没有回收高水位线
查询表碎片化程度的查语句:
–查找碎片化程度较高的表
SELECT * FROM (
SELECT
TABLE_NAME,
(BLOCKS8192/1024/1024) AS HWH_MB, --已占用大小(高水位线)
(NUM_ROWSAVG_ROW_LEN/1024/1024) AS USED_MB , --实际大小
ROUND((NUM_ROWSAVG_ROW_LEN/1024/1024)/(BLOCKS8192/1024/1024),3) AS USED_RATE --实际使用率
FROM USER_TABLES WHERE BLOCKS >0
)
WHERE USED_RATE <0.3 (使用率不到30%)
二:演示步骤
1.创建表并插入数据
(1)创建表
create table T3(id int, major varchar(255));
(2)创建插入数据的存储过程 插入100万条数据
CREATE OR REPLACE PROCEDURE P_INSERT_T3 AS
I INT DEFAULT 1;
BEGIN
FOR I IN 1 … 1000000 LOOP
INSERT INTO T3 (ID, MAJOR) VALUES (I, ‘金融学院-’ || I);
END LOOP;
COMMIT;
EN