常用工具sql

【常规操作】
-------------查看表空间:
set lin 200 pagesize 2000
SELECT D.TABLESPACE_NAME,
       SPACE "SUM_SPACE(M)",
       BLOCKS SUM_BLOCKS,
       SPACE - NVL(FREE_SPACE, 0) "USED_SPACE(M)",
       ROUND((1 - NVL(FREE_SPACE, 0) / SPACE) * 100, 2) "USED_RATE(%)",
       FREE_SPACE "FREE_SPACE(M)"
  FROM (SELECT TABLESPACE_NAME,
               ROUND(SUM(BYTES) / (1024 * 1024), 2) SPACE,
               SUM(BLOCKS) BLOCKS
          FROM DBA_DATA_FILES
         GROUP BY TABLESPACE_NAME) D,
       (SELECT TABLESPACE_NAME,
               ROUND(SUM(BYTES) / (1024 * 1024), 2) FREE_SPACE
          FROM DBA_FREE_SPACE
         GROUP BY TABLESPACE_NAME) F
 WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+)
UNION ALL 
SELECT D.TABLESPACE_NAME,
       SPACE "SUM_SPACE(M)",
       BLOCKS SUM_BLOCKS,
       USED_SPACE "USED_SPACE(M)",
       ROUND(NVL(USED_SPACE, 0) / SPACE * 100, 2) "USED_RATE(%)",
       NVL(FREE_SPACE, 0) "FREE_SPACE(M)"
  FROM (SELECT TABLESPACE_NAME,
               ROUND(SUM(BYTES) / (1024 * 1024), 2) SPACE,
               SUM(BLOCKS) BLOCKS
          FROM DBA_TEMP_FILES
         GROUP BY TABLESPACE_NAME) D,
       (SELECT TABLESPACE_NAME,
               ROUND(SUM(BYTES_USED) / (1024 * 1024), 2) USED_SPACE,
               ROUND(SUM(BYTES_FREE) / (1024 * 1024), 2) FREE_SPACE
          FROM V$TEMP_SPACE_HEADER
         GROUP BY TABLESPACE_NAME) F
 WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+);
 
---------------扩表空间
ALTER TABLESPACE zxin_data ADD DATAFILE '/zxindata/zxin_file0/zxin_data1.dbf' SIZE 10240M;


alter tablespace zxin_temp add tempfile  '/zxindata/zxin_temp/zxin_temp3.dbf' size 10240m;


CREATE UNDO TABLESPACE UNDOTBS2 DATAFILE '/zxindata/oracle/system/undo2.dbf' SIZE 10240M REUSE AUTOEXTEND ON;
ALTER SYSTEM SET UNDO_TABLESPACE = UNDOTBS2;
drop UNDO TABLESPACE UNDOTBS1;




---------------查询segment的大小
select segment_name, segment_type, sum(bytes) / (1024 * 1024) as "size(M)"
from   user_segments
where  segment_type <> 'INDEX'
group  by segment_name, segment_type
order  by "size(M)" desc;


---------------查询正在执行的sql
select sql_text from v$sql where users_executing>0;


【锁相关】
---------------解锁:
alter system kill session ‘sid,serial#’;
kill -9 PID


---------------锁与阻塞
select
 'Wait' "Status",
 a.username,
 a.machine,
 a.sid,
 a.serial#,
 a.last_call_et "Seconds",
 b.id1,
 c.sql_text "SQL"
from   v$session a, v$lock b, v$sqltext c
where  a.username is not null
and    a.lockwait = b.kaddr
and    c.hash_value = a.sql_hash_value
union
select
 'Lock' "Status",
 a.username,
 a.machine,
 a.sid,
 a.serial#,
 a.last_call_et "Seconds",
 b.id1,
 c.sql_text "SQL"
from   v$session a, v$lock b, v$sqltext c
where  b.id1 in (select 
                 distinct e.id1
                 from   v$session d, v$lock e
                 where  d.lockwait = e.kaddr)
and    a.username is not null
and    a.sid = b.sid
and    b.request = 0
and    c.hash_value = a.sql_hash_value; 
 
--------------查询被锁对象
SELECT /*+ rule */
lpad(' ', decode(l.xidusn, 0, 3, 0)) || l.oracle_username User_name,
o.owner,o.object_name,o.object_type,s.sid,s.serial#,p.spid
FROM v$locked_object l, dba_objects o, v$session s, v$process p
WHERE l.object_id = o.object_id
AND l.session_id = s.sid and s.paddr = p.addr
ORDER BY o.object_id, xidusn DESC;


---------------查看被锁对象及其持有时间
select a.username username, a.sid sid, a.serial# serial,b.id1 id1, c.sql_text sqltext
from v$session a, v$lock b, v$sqltext c
where b.id1 in
   (select distinct e.id1
   from v$session d, v$lock e
   where d.lockwait = e.kaddr)
   and a.sid = b.sid
   and c.hash_value = a.sql_hash_value
   and b.request = 0;




【troubleshooting】
----------------top event对应的sql
select distinct b.SQL_TEXT
  from dba_hist_active_sess_history a, v$sql b
 where a.event like '%gc current block busy%'
   and a.sql_id = b.SQL_ID
   and a.sample_time >=
       to_date('2012-10-31 16:44:43', 'yyyy-mm-dd hh24:mi:ss')
   and a.sample_time <= to_date('2012-10-31 16:48:20', 'yyyy-mm-dd hh24:mi:ss');
   
----------------查询历史执行计划
select a.INSTANCE_NUMBER,a.snap_id,a.sql_id,a.plan_hash_value,b.begin_interval_time
from dba_hist_sqlstat a, dba_hist_snapshot b 
where sql_id ='56s18gn1k19yp' 
and a.snap_id = b.snap_id 
order by instance_number, snap_id;


查询历史执行计划

select * from table(dbms_xplan.display_awr('sql_id'));


select * from DBA_HIST_SQL_PLAN;





----------------未提交的sql
select b.* from v$transaction a,v$session b where a.ADDR=b.TADDR ;


----------------通过进程号获取sql
SELECT   /*+ ORDERED */
         sql_text
    FROM v$sqltext a
   WHERE (a.hash_value, a.address) IN (
            SELECT DECODE (sql_hash_value,
                           0, prev_hash_value,
                           sql_hash_value
                          ),
                   DECODE (sql_hash_value, 0, prev_sql_addr, sql_address)
              FROM v$session b
             WHERE b.paddr = (SELECT addr
                                FROM v$process c
                               WHERE c.spid = &pid))
ORDER BY piece ASC;


-------------查询全表扫描
select sp.object_owner,
       sp.object_name,
       (select sql_text
        from   v$sqlarea sa
        where  sa.address = sp.address
        and    sa.hash_value = sp.hash_value) sqltext,
       (select executions
        from   v$sqlarea sa
        where  sa.address = sp.address
        and    sa.hash_value = sp.hash_value) no_of_full_scans,
       (select lpad(nvl(trim(to_char(num_rows)), ' '), 15, ' ') || ' | ' ||
               lpad(nvl(trim(to_char(blocks)), ' '), 15, ' ') || ' | ' || buffer_pool
        from   dba_tables
        where  table_name = sp.object_name
        and    owner = sp.object_owner) "rows|blocks|pool"
from   v$sql_plan sp
where  operation = 'TABLE ACCESS'
and    options = 'FULL'
and    object_owner IN ('ZXDBM_830')
order  by 1, 2;


------------表分析 
exec dbms_stats.gather_table_stats(ownname => 'scott',tabname => 'work_list',estimate_percent => 10,method_opt=> 'for all indexed columns') ;  
exec dbms_stats.gather_index_stats(ownname => 'crm2',indname => 'IDX_ADM_PERMISSION_PID_MID',estimate_percent => '10',degree => '4') ;
analyze index test.ind_desc compute statistics;
analyze table test compute statistics;  
analyze table test compute statistics sample 20 percent;    --20%采样


升级后数据库监控
1)查看alert.log
2)性能诊断报告
3)查看失效索引,
select index_name,status from all_indexes;


--------------当你想知道当前是哪条sql在占用temp表空间的时候,你可以这样:
SELECT a.username, a.sid, a.serial#, a.osuser, b.tablespace, b.blocks, c.sql_text
FROM v$session a, v$tempseg_usage b, v$sqlarea c
WHERE a.saddr = b.session_addr
AND c.address= a.sql_address
AND c.hash_value = a.sql_hash_value
ORDER BY b.tablespace, b.blocks;


--------------查询undo的使用情况
SELECT DISTINCT STATUS, SUM(BYTES/1024/1024), COUNT(*) FROM DBA_UNDO_EXTENTS GROUP BY STATUS;


--------------linux 
1、 测试磁盘写能力
dd if=/dev/zero of=/1Gb.file bs=1024 count=1000000


2、 测试磁盘读能力
dd if=/root/1Gb.file bs=64k | dd of=/dev/null

诊断

SQL> oradebug setmypid
SQL> oradebug unlimit
SQL> oradebug event 10053 trace name context forever, level 1
SQL> ...enter your query here...
SQL> oradebug event 10053 trace name context off
SQL> oradebug tracefile_name


tkprof

               


sql最全的常用命令语句 询某个数据库的连接数 select count(*) from Master.dbo.SysProcesses where dbid=db_id() --前10名其他等待类型 SELECT TOP 10 * from sys.dm_os_wait_stats ORDER BY wait_time_ms DESC SELECT *FROM sys.dm_os_wait_stats WHERE wait_type like 'PAGELATCH%' OR wait_type like 'LAZYWRITER_SLEEP%' --CPU的压力 SELECT scheduler_id, current_tasks_count, runnable_tasks_count FROM sys.dm_os_schedulers WHERE scheduler_id 500 begin select text,CROSS APPLY master.sys.dm_exec_sql_text(a.sql_handle) from master.sys.sysprocesses a end select text,a.* from master.sys.sysprocesses a CROSS APPLY master.sys.dm_exec_sql_text(a.sql_handle) where a.spid = '51' dbcc inputbuffer(53) with tb as ( select blocking_session_id, session_id,db_name(database_id) as dbname,text from master.sys.dm_exec_requests a CROSS APPLY master.sys.dm_exec_sql_text(a.sql_handle) ), tb1 as ( select a.*,login_time,program_name,client_interface_name,login_name,cpu_time,memory_usage*8 as 'memory_usage(KB)', total_scheduled_time,reads,writes,logical_reads from tb a inner join master.sys.dm_exec_sessions b on a.session_id=b.session_id ) select a.*,connect_time,client_tcp_port,client_net_address from tb1 a inner join master.sys.dm_exec_connections b on a.session_id=b.session_id --当前进程数 select * from master.dbo.sysprocesses order by cpu desc --查看当前活动的进程数 sp_who active --查询是否由于连接没有释放引起CPU过高 select * from master.dbo.sysprocesses where spid> 50 and waittype = 0x0000 and waittime = 0 and status = 'sleeping ' and last_batch < dateadd(minute, -10, getdate()) and login_time 50 and waittype = 0x0000 and waittime = 0 and status = 'sleeping ' and last_batch < dateadd(minute, -60, getdate()) and login_time 1 ORDER BY qs.plan_generation_num SELECT top 50 qt.text AS SQL_text ,SUM(qs.total_worker_time) AS total_cpu_time, SUM(qs.execution_count) AS total_execution_count, SUM(qs.total_worker_time)/SUM(qs.execution_count) AS avg_cpu_time, COUNT(*) AS number_of_statements FROM sys.dm_exec_query_stats qs CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) as qt GROUP BY qt.text ORDER BY total_cpu_time DESC --统计总的CPU时间 --ORDER BY avg_cpu_time DESC --统计平均单次查询CPU时间 -- 计算可运行状态下的工作进程数量 SELECT COUNT(*) as workers_waiting_for_cpu,s.scheduler_id FROM sys.dm_os_workers AS o INNER JOIN sys.dm_os_schedulers AS s ON o.scheduler_address=s.scheduler_address AND s.scheduler_id<255 WHERE o.state='RUNNABLE' GROUP BY s.scheduler_id
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值