oracle 中的实时统计

CREATE TABLE tab1 (
id NUMBER,
description VARCHAR2(50)
);
在这里插入图片描述
创建一个过程来截断测试表,向其中填充一些数据并收集所有表统计信息。
CREATE OR REPLACE PROCEDURE reset_tab1 AS
BEGIN
EXECUTE IMMEDIATE ‘TRUNCATE TABLE tab1’;
INSERT /*+ APPEND / INTO tab1 (id, description)
SELECT level, 'Description of ’ || level
FROM dual
CONNECT BY level <= 1000;
COMMIT;
DBMS_STATS.gather_table_stats(NULL, ‘tab1’);
END;
/
在这里插入图片描述
在这里插入图片描述
EXEC reset_tab1;
在这里插入图片描述
SELECT table_name,
num_rows
FROM user_tables
WHERE table_name = ‘TAB1’;
num_rows:表中的行数
在这里插入图片描述
USER_TAB_STATISTICS:显示当前用户拥有的表的优化程序统计信息
SELECT table_name,
num_rows,
notes
FROM user_tab_statistics
WHERE table_name = ‘TAB1’;
在这里插入图片描述
USER_TAB_COL_STATISTICS包含从中提取的列统计信息和直方图信息
SELECT table_name,
column_name,
UTL_RAW.cast_to_number(low_value) AS low_value,
UTL_RAW.cast_to_number(high_value) AS high_value,
sample_size,
notes
FROM user_tab_col_statistics
WHERE table_name = ‘TAB1’
AND column_name = ‘ID’;
column_name:列名
SAMPLE_SIZE:分析此列所用的样本量
UTL_RAW.cast_to_number:此函数将NUMBER(in RAW)的二进制表示形式转换为NUMBER
在这里插入图片描述
在这里插入图片描述
插入数据测试
EXEC reset_tab1;
INSERT INTO tab1
SELECT level+1000 AS id,
'Description of ’ || level AS description
FROM dual
CONNECT BY level <= 1000;
COMMIT;
在这里插入图片描述
在这里插入图片描述
EXEC DBMS_STATS.flush_database_monitoring_info;
在这里插入图片描述
alter system set “_exadata_feature_on”=true scope=spfile;
shutdown immediate;
startup;
在这里插入图片描述
SELECT * FROM TABLE(DBMS_XPLAN.display_cursor);
在这里插入图片描述
EXEC DBMS_STATS.flush_database_monitoring_info;
在这里插入图片描述
SELECT table_name,
num_rows,
notes
FROM user_tab_statistics
WHERE table_name = ‘TAB1’;
在这里插入图片描述
在这里插入图片描述
SELECT MAX(id) FROM tab1;
在这里插入图片描述
SELECT * FROM TABLE(DBMS_XPLAN.display_cursor);
在这里插入图片描述
重置测试数据将监视数据刷新到字典中
EXEC reset_tab1;
INSERT /
+ APPEND */ INTO tab1
SELECT level+1000 AS id,
'Description of ’ || level AS description
FROM dual
CONNECT BY level <= 1000;
COMMIT;
在这里插入图片描述
写入到数据字典
EXEC DBMS_STATS.flush_database_monitoring_info;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
常规插入它不会触发实时统计信息
EXEC reset_tab1;
INSERT INTO tab1 VALUES (1001, ‘Description of 1001’);
COMMIT;
EXEC DBMS_STATS.flush_database_monitoring_info;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
EXEC reset_tab1;
BEGIN
FOR i IN 1001 … 2000 LOOP
INSERT INTO tab1 VALUES (i, 'Description of ’ || i);
END LOOP;
COMMIT;
END;
/
EXEC DBMS_STATS.flush_database_monitoring_info;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
EXEC reset_tab1;
BEGIN
FOR i IN 1001 … 2000 LOOP
INSERT INTO tab1 VALUES (i, 'Description of ’ || i);
COMMIT;
END LOOP;
END;
/
EXEC DBMS_STATS.flush_database_monitoring_info;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
更新
EXEC reset_tab1;
UPDATE tab1
SET id =id+10000;
COMMIT;
EXEC DBMS_STATS.flush_database_monitoring_info;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
删除
EXEC reset_tab1;
DELETE FROM tab1;
EXEC DBMS_STATS.flush_database_monitoring_info;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值