实例状态监控

DM 性能监控工具 (Monitor)

DM 性能监视工具 (Monitor) 是 DM 数据库管理员用来监视服务器的活动和数据库性能情况,并对实例中参数进行调整的客户端工具,它允许系统管理员在本机或远程监视服务器的运行状况。

性能监控工具功能

实例监控

实例监控显示所连接实例的内存和 CPU 的使用情况,以及该实例的线程和会话信息,包括内存和 CPU 的当前使用值,以及自开始监视以来的最大值和最小值;活动的线程和会话的个数,以及自开始监视以来的最大值和最小值。数据库内存使用情况如下图所示:

DEM 实例状态监控1

MPP 监控

MPP 监控主要监控 DM MPP 集群环境。包括站点分布图和消息分发图。其中站点分布图显示各站点的物理主机分布情况,消息分布图显示各站点间的通信情况。数据分布视图显示指定数据库表的数据在 DM MPP 的各个站点上的分布情况。

统计分析

统计分析视图监视系统资源、数据库可用性、健康状态、性能等。显示系统自启动以来各项资源的使用历史情况以及平均使用率。包括内存和 hash 缓存的使用情况,逻辑、物理读写情况,事务总次数以及提交、回滚、死锁次数、会话分配和空闲的次数以及检查点的次数,SQL 的执行情况、系统 CPU 使用率以及线程切换情况。

性能监视

性能监视涵盖 DM 数据库的所有监控事项,主要包括:线程监视、会话监视、事务监视、SQL 监视、SQL 日志文件分析、DM.INI 参数监视、内存管理、存储监视、系统监视,如下图所示:

DEM 实例状态监控2

调优向导

调优向导是自动化的调优工具,主要包括:内存配置向导、线程配置向导、数据库物理存储维护向导、数据库逻辑存储维护向导、性能瓶颈分析与调优向导、索引优化向导、索引重组向导。

预警配置

预警配置页面可以配置监控的关键指标和警告发送方式,以监测所配置的关键指标是否达到预警值,如果达到则通过所配置的警告发送方式把警告信息发送给管理员。

数据库实例情况运维查看

实例查看模式对象的空间使用

模式对象的空间管理关系到空间的有效使用和数据的合理分布。

  • 查看用户占用的空间

可以使用系统函数 USER_USED_SPACE 得到用户占用空间的大小,函数参数为用户名,返回值为占用的页的数目。

SELECT USER_USED_SPACE('TEST_USER');
  • 看表占用的空间

可以使用系统函数 TABLE_USED_SPACE 得到表对象占用空间的大小,函数参数为模式名和表名,返回值为占用的页的数目。

SELECT TABLE_USED_SPACE('SYSDBA','TEST');
  • 查看索引占用的空间

可以使用系统函数 INDEX_USED_SPACE 得到索引占用空间的大小,函数参数为索引 ID,返回值为占用的页的数目。

SELECT INDEX_USED_SPACE(33555463);

实例运维查看

  • 实例中查询活动会话

查询实例中活动会话使用 V$sessions 视图,V$sessions 会显示会话的具体信息,如执行的 SQL 语句、主库名、当前会话状态、用户名等等。

SELECT count(*) FROM v$sessions WHERE state='ACTIVE';
--获取完整sql
SELECT SYSDATE,
       SF_GET_SESSION_SQL (SESS_ID),
       sess_id,
       sess_seq,
       sql_text,
       state,
       seq_no,
       user_name,
       trx_id,
       create_time,
       clnt_ip
  FROM v$sessions
 WHERE state = 'ACTIVE';
  • 实例中锁查询

锁机制用于管理对共享资源的并发访问。数据库中使用锁是为了支持对共享资源进行并发访问,与此同时还能提供数据完整和一致性。每个数据库都会存在锁,不过实现机制各不相同。

死锁:当两个或者多个事务都在请求对方资源,等待其他事务释放锁从而产生等待环,则会产生死锁。

从定义上我们不难看出锁是数据库中合理的存在,它保证了共享资源的并发访问和数据一致性而正常存在的。但是死锁确实不合理的存在,它会影响客户正常的体验。下面是实例中锁查询语句:

SELECT o.name, l.*
  FROM v$lock l, sysobjects o
 WHERE l.table_id = o.id AND blocked = 1;

WITH locks
     AS (SELECT o.name,
                l.*,
                s.sess_id,
                s.sql_text,
                s.clnt_ip,
                s.last_send_time
           FROM v$lock l, sysobjects o, v$sessions s
          WHERE l.table_id = o.id AND l.trx_id = s.trx_id),
     lock_tr
     AS (SELECT trx_id wt_trxid, tid blk_trxid
           FROM locks
          WHERE blocked = 1),
     res
     AS (SELECT SYSDATE stattime,
                t1.name,
                t1.sess_id wt_sessid,
                s.wt_trxid,
                t2.sess_id blk_sessid,
                s.blk_trxid,
                t2.clnt_ip,
                SF_GET_SESSION_SQL (t1.sess_id) fulsql,
                datediff (ss, t1.last_send_time, SYSDATE) ss,
                t1.sql_text wt_sql
           FROM lock_tr s, locks t1, locks t2
          WHERE     t1.ltype = 'OBJECT'
                AND t1.table_id <> 0
                AND t2.ltype = 'OBJECT'
                AND t2.table_id <> 0
                AND s.wt_trxid = t1.trx_id
                AND s.blk_trxid = t2.trx_id)
--select distinct clnt_ip from res;
SELECT DISTINCT wt_sql, clnt_ip, ss
  FROM res;
  • 实例中已执行未提交的 SQL 查询
SELECT t1.sql_text, t1.state, t1.trx_id
  FROM v$sessions t1, v$trx t2
 WHERE t1.trx_id = t2.id AND t1.state = 'IDLE' AND t2.status = 'ACTIVE';
  • 有事务未提交的表查询
SELECT b.object_name, c.sess_id, a.*
  FROM v$lock a, dba_objects b, v$sessions c
 WHERE a.table_id = b.object_id AND ltype = 'OBJECT' AND a.trx_id = c.trx_id;
  • 长时间的 SQL 查询
SELECT t1.sql_text, t1.state, t1.trx_id
  FROM v$sessions t1, v$trx t2
 WHERE t1.trx_id = t2.id AND t1.state = 'IDLE' AND t2.status = 'ACTIVE';
  • 找出已执行超过 2 秒的活动 SQL
SELECT *
  FROM (SELECT sess_id,
               sql_text,
               datediff (ss, last_recv_time, SYSDATE) Y_EXETIME,
               SF_GET_SESSION_SQL (SESS_ID) fullsql,
               clnt_ip
          FROM V$SESSIONS
         WHERE STATE = 'ACTIVE')
 WHERE Y_EXETIME >= 2;
微信扫码
分享文档
扫一扫
联系客服