Oracle 常用性能监控SQL语句:1. --查看表锁
SELECT *
FROM SYS.V_$SQLAREA
WHERE DISK_READS > 100; 2. --监控事例的等待
SELECT EVENT, SUM(DECODE(WAIT_TIME, 0, 0, 1)) "Prev", SUM(DECODE(WAIT_TIME, 0, 1, 0)) "Curr", COUNT(*) "Tot"
FROM V$SESSION_WAIT
GROUP BY EVENT
ORDER BY 4; 3. --回滚段的争用情况
SELECT NAME, WAITS, GETS, WAITS / GETS "Ratio"
FROM V$ROLLSTAT A, V$ROLLNAME B
WHERE A.USN = B.USN; 4. --查看前台正在发出的SQL语句
SELECT USER_NAME, SQL_TEXT
FROM V$OPEN_CURSOR
WHERE SID IN (
SELECT SID
FROM (
SELECT SID, SERIAL#, USERNAME, PROGRAM
FROM V$SESSION
WHERE STATUS = "ACTIVE")); 5. --数据表占用空间大小情况
SELECT SEGMENT_NAME, TABLESPACE_NAME, BYTES, BLOCKS
FROM USER_SEGMENTS
WHERE SEGMENT_TYPE = "TABLE"
ORDER BY BYTES
DESC, BLOCKS
DESC; 6. --查看表空间碎片大小
SELECT TABLESPACE_NAME, ROUND(SQRT(
MAX(BLOCKS) / SUM(BLOCKS)) * (100 / SQRT(SQRT(COUNT(BLOCKS)))), 2) FSFI
FROM DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME
ORDER BY 1; 7. --查看表空间占用磁盘情况
SELECT B.FILE_ID 文件ID号, B.TABLESPACE_NAME 表空间名, B.BYTES 字节数, (B.BYTES - SUM(NVL(A.BYTES, 0))) 已使用, SUM(NVL(A.BYTES, 0)) 剩余空间, SUM(NVL(A.BYTES, 0)) / (B.BYTES) * 100 剩余百分比
FROM DBA_FREE_SPACE A, DBA_DATA_FILES B
WHERE A.FILE_ID = B.FILE_ID
GROUP BY B.TABLESPACE_NAME, B.FILE_ID, B.BYTES
ORDER BY B.FILE_ID; 8. --查看session使用回滚段
SELECT R.
NAME 回滚段名, S.SID, S.SERIAL#, S.USERNAME 用户名, T.STATUS, T.CR_GET, T.PHY_IO, T.USED_UBLK, T.NOUNDO, SUBSTR(S.PROGRAM, 1, 78) 操作程序
FROM SYS.V_$SESSION S, SYS.V_$
TRANSACTION T, SYS.V_$ROLLNAME R
WHERE T.ADDR = S.TADDR AND T.XIDUSN = R.USN
ORDER BY T.CR_GET, T.PHY_IO; 9. --查看SGA区剩余可用内存
SELECT NAME, SGASIZE / 1024 / 1024 "Allocated(M)", BYTES / 1024 "**空间(K)", ROUND(BYTES / SGASIZE * 100, 2) "**空间百分比(%)"
FROM (
SELECT SUM(BYTES) SGASIZE
FROM SYS.V_$SGASTAT) S, SYS.V_$SGASTAT F
WHERE F.
NAME = "free memory"; 10. --监控表空间I/O比例
SELECT DF.TABLESPACE_NAME
NAME, DF.FILE_NAME "file", F.PHYRDS PYR, F.PHYBLKRD PBR, F.PHYWRTS PYW, F.PHYBLKWRT PBW
FROM V$FILESTAT F, DBA_DATA_FILES DF
WHERE F.FILE# = DF.FILE_ID
ORDER BY DF.TABLESPACE_NAME; 11. --监控SGA命中率
SELECT A.VALUE + B.VALUE "logical_reads", C.VALUE "phys_reads", ROUND(100 * ((A.VALUE + B.VALUE) - C.VALUE) / (A.VALUE + B.VALUE)) "BUFFER HIT RATIO"
FROM V$SYSSTAT A, V$SYSSTAT B, V$SYSSTAT C
WHERE A.STATISTIC# = 38 AND B.STATISTIC# = 39 AND C.STATISTIC# = 40; 12. --监控 SGA 中字典缓冲区的命中率
SELECT PARAMETER, GETS, GETMISSES, GETMISSES / (GETS + GETMISSES) * 100 "miss ratio", (1 - (SUM(GETMISSES) / (SUM(GETS) + SUM(GETMISSES)))) * 100 "Hit ratio"
FROM V$ROWCACHE
WHERE GETS + GETMISSES <> 0
GROUP BY PARAMETER, GETS, GETMISSES; 13. --监控 SGA **享缓存区的命中率,应该小于1%
SELECT SUM(PINS) "Total Pins", SUM(RELOADS) "Total Reloads", SUM(RELOADS) / SUM(PINS) * 100 LIBCACHE
FROM V$LIBRARYCACHE; 14. --监控 SGA 中重做日志缓存区的命中率,应该小于1%
SELECT NAME, GETS, MISSES, IMMEDIATE_GETS, IMMEDIATE_MISSES, DECODE(GETS, 0, 0, MISSES / GETS * 100) RATIO1, DECODE(IMMEDIATE_GETS + IMMEDIATE_MISSES, 0, 0, IMMEDIATE_MISSES / (IMMEDIATE_GETS + IMMEDIATE_MISSES) * 100) RATIO2
FROM V$LATCH
WHERE NAME IN ("redo allocation", "redo copy"); 15. --监控内存和硬盘的排序比率,最好使它小于 .10
SELECT NAME, VALUE
FROM V$SYSSTAT
WHERE NAME IN ("sorts (memory)", "sorts (disk)"); 16. --监控字典缓冲区
SELECT SUM(GETS) "DICTIONARY GETS", SUM(GETMISSES) "DICTIONARY CACHE GET MISSES"
FROM V$ROWCACHE; 17. --非系统用户建在SYSTEM表空间中的表
SELECT OWNER, TABLE_NAME
FROM DBA_TABLES
WHERE TABLESPACE_NAME IN ("SYSTEM", "USER_DATA") AND OWNER NOT IN ("SYSTEM", "SYS", "OUTLN", "ORDSYS", "MDSYS", "SCOTT", "HOSTEAC"); 18. --性能最差的SQL
SELECT *
FROM (
SELECT PARSING_USER_ID EXECUTIONS, SORTS, COMMAND_TYPE, DISK_READS, SQL_TEXT
FROM V$SQLAREA
ORDER BY DISK_READS
DESC)
WHERE ROWNUM < 100; --用下列SQL 工具找出低效SQL :
SELECT EXECUTIONS, DISK_READS, BUFFER_GETS, ROUND((BUFFER_GETS - DISK_READS) / BUFFER_GETS, 2) HIT_RADIO, ROUND(DISK_READS / EXECUTIONS, 2) READS_PER_RUN, SQL_TEXT
FROM V$SQLAREA
WHERE EXECUTIONS > 0 AND BUFFER_GETS > 0 AND (BUFFER_GETS - DISK_READS) / BUFFER_GETS < 0.8
ORDER BY 4
DESC; 19. --读磁盘数超100次的sql
SELECT *
FROM SYS.V_$SQLAREA
WHERE DISK_READS > 100; 20. --最频繁执行的sql
SELECT *
FROM SYS.V_$SQLAREA
WHERE EXECUTIONS > 100; 21. --查询使用CPU多的用户session
SELECT A.SID, SPID, STATUS, SUBSTR(A.PROGRAM, 1, 40) PROG, A.TERMINAL, OSUSER, VALUE / 60 / 100 VALUE
FROM V$SESSION A, V$PROCESS B, V$SESSTAT C
WHERE C.STATISTIC# = 12 AND C.SID = A.SID AND A.PADDR = B.ADDR
ORDER BY VALUE
DESC; 22. --当前每个会话使用的对象数
SELECT A.SID, S.TERMINAL, S.PROGRAM, COUNT(A.SID)
FROM V$ACCESS A, V$SESSION S
WHERE A.OWNER <> "SYS" AND S.SID = A.SID
GROUP BY A.SID, S.TERMINAL, S.PROGRAM
ORDER BY COUNT(A.SID); MySQL实现循环插入功能Oracle控制文件的恢复相关资讯 SQL语句
- 如何定位SQL语句在共享池里用到了 (03月17日)
- Java 注解入门 自动生成SQL语句 (07/28/2015 16:08:34)
- Oracle 通过sql profile为sql语句 (05/03/2015 19:43:07)
| - MySQL 存储过程动态执行sql语句 (10/13/2015 19:10:08)
- 画图解释 SQL join 语句 (07/17/2015 15:16:27)
- MySQL数据库sql语句调优 (03/21/2015 17:42:45)
|
本文评论 查看全部评论 (0)