Oracle常用sql

本文介绍了如何使用OracleSQL查询执行最慢的50条语句,监控用户连接情况,以及进行连表更新和插入操作的最佳实践。通过V$SQLAREA,V$PROCESS,和V$SESSIONS等视图提供了SQL性能管理和用户活动的洞察。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Oracle常用sql


1. 查询执行最慢的50行sql

SELECT
	* 
FROM
	(
SELECT
	AREA.SQL_TEXT,
	AREA.SQL_FULLTEXT,
	AREA.EXECUTIONS "count",--执行次数
	ROUND( AREA.ELAPSED_TIME / 1000000, 2 ) "time", --总执行时间
	ROUND( AREA.ELAPSED_TIME / 1000000 / AREA.EXECUTIONS, 2 ) "avgTime", --平均执行时间
	AREA.COMMAND_TYPE,
	AREA.PARSING_USER_ID "userId",
	U.USERNAME "userName",
	AREA.HASH_VALUE 
FROM
	V$SQLAREA AREA
	LEFT JOIN ALL_USERS U ON AREA.PARSING_USER_ID = U.USER_ID 
WHERE
	AREA.EXECUTIONS > 0 
ORDER BY
	( AREA.ELAPSED_TIME / AREA.EXECUTIONS ) DESC ) 
WHERE
	ROWNUM <= 50;

2.用户连接情况

SELECT
	S.MACHINE,
	S.PROGRAM,
	S.USERNAME,
	COUNT( * ) 
FROM
	V$PROCESS P,
	V$SESSION S 
WHERE
	P.ADDR = S.PADDR 
	AND S.USERNAME IS NOT NULL 
GROUP BY
	S.MACHINE,
	S.PROGRAM,
	S.USERNAME 
ORDER BY
	COUNT( * ) DESC

3.连表更新或插入

-- 将源表employees_source中匹配的数据更新到目标表employees_target中,同时将源表employees_source中不匹配的数据插入到目标表employees_target中。 
MERGE INTO employees_target t USING employees_source s ON ( t.employee_id = s.employee_id ) 
WHEN MATCHED THEN
UPDATE 
	SET t.first_name = s.first_name,
	t.last_name = s.last_name,
	t.salary = s.salary 
	WHEN NOT MATCHED THEN
	INSERT ( t.employee_id, t.first_name, t.last_name, t.salary )
VALUES
	( s.employee_id, s.first_name, s.last_name, s.salary );

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值