Oracle 简单性能测试脚本
Oracle 简单性能测试脚本
-- =========================================
-- Oracle 11g Performance Test Script
-- =========================================
-- 建议开启服务器输出
SET SERVEROUTPUT ON
SET TIMING ON
SET FEEDBACK ON
SET PAGESIZE 1000
SET LINESIZE 200
PROMPT ====== Step 1: 清理环境 ======
BEGIN
EXECUTE IMMEDIATE 'DROP TABLE perf_test PURGE';
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE != -942 THEN
RAISE;
END IF;
END;
/
PROMPT ====== Step 2: 创建测试表 ======
CREATE TABLE perf_test (
id NUMBER PRIMARY KEY,
name VARCHAR2(50),
created_at DATE,
amount NUMBER(10,2),
remark VARCHAR2(200)
);
PROMPT ====== Step 3: 批量插入数据(100万行) ======
DECLARE
v_start NUMBER := DBMS_UTILITY.get_time;
BEGIN
FOR i IN 1..1000000 LOOP
INSERT INTO perf_test VALUES (
i,
'NAME_' || i,
SYSDATE - MOD(i, 365),
DBMS_RANDOM.VALUE(1, 10000),
RPAD('TEST', 100, 'X')
);
IF MOD(i, 10000) = 0 THEN
COMMIT;
END IF;
END LOOP;
COMMIT;
DBMS_OUTPUT.put_line(
'Insert Time (seconds): ' ||
(DBMS_UTILITY.get_time - v_start) / 100
);
END;
/
PROMPT ====== Step 4: 创建索引 ======
CREATE INDEX idx_perf_test_created ON perf_test(created_at);
CREATE INDEX idx_perf_test_amount ON perf_test(amount);
PROMPT ====== Step 5: 全表扫描测试 ======
DECLARE
v_cnt NUMBER;
v_start NUMBER := DBMS_UTILITY.get_time;
BEGIN
SELECT COUNT(*) INTO v_cnt FROM perf_test;
DBMS_OUTPUT.put_line('Total Rows: ' || v_cnt);
DBMS_OUTPUT.put_line(
'Full Scan Time (seconds): ' ||
(DBMS_UTILITY.get_time - v_start) / 100
);
END;
/
PROMPT ====== Step 6: 索引查询测试 ======
DECLARE
v_cnt NUMBER;
v_start NUMBER := DBMS_UTILITY.get_time;
BEGIN
SELECT COUNT(*)
INTO v_cnt
FROM perf_test
WHERE created_at > SYSDATE - 30;
DBMS_OUTPUT.put_line('Recent Rows: ' || v_cnt);
DBMS_OUTPUT.put_line(
'Index Query Time (seconds): ' ||
(DBMS_UTILITY.get_time - v_start) / 100
);
END;
/
PROMPT ====== Step 7: 聚合查询测试 ======
DECLARE
v_avg NUMBER;
v_start NUMBER := DBMS_UTILITY.get_time;
BEGIN
SELECT AVG(amount)
INTO v_avg
FROM perf_test
WHERE amount > 5000;
DBMS_OUTPUT.put_line('AVG Amount: ' || v_avg);
DBMS_OUTPUT.put_line(
'Aggregation Time (seconds): ' ||
(DBMS_UTILITY.get_time - v_start) / 100
);
END;
/
PROMPT ====== Step 8: 更新性能测试 ======
DECLARE
v_start NUMBER := DBMS_UTILITY.get_time;
BEGIN
UPDATE perf_test
SET amount = amount * 1.05
WHERE id <= 500000;
COMMIT;
DBMS_OUTPUT.put_line(
'Update Time (seconds): ' ||
(DBMS_UTILITY.get_time - v_start) / 100
);
END;
/
PROMPT ====== Step 9: 删除性能测试 ======
DECLARE
v_start NUMBER := DBMS_UTILITY.get_time;
BEGIN
DELETE FROM perf_test WHERE id > 900000;
COMMIT;
DBMS_OUTPUT.put_line(
'Delete Time (seconds): ' ||
(DBMS_UTILITY.get_time - v_start) / 100
);
END;
/
PROMPT ====== Performance Test Completed ======
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 程序员小航
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果