达梦数据库日常运维SQL和问题排查

目录

1、达梦基础运维SQL

1:达梦版本信息和授权信息

2:数据库实例信息和参数信息

2、达梦中级运维SQL

1:查看达梦数据库表空间

2:查看达梦数据库用户信息

3:查看达梦数据库模式信息及其拥有者

4:查看达梦数据库表结构

5:达梦数据库查看各个模式下表、视图、触发器、索引等信息数量

6:达梦数据库查看会话

7:达梦数据库查看阻塞

8:达梦数据库查看慢sql

9:达梦数据库查看死锁

3、达梦高级运维SQL

1:达梦数据库查看表空间使用情况

2:达梦数据库KILL长时间会话

3:达梦数据库定位阻塞会话和阻塞信息

4:达梦数据库查看表数据信息

5:达梦数据库统计信息更新

6:达梦数据库ET性能分析工具


1、达梦基础运维SQL

1:达梦版本信息和授权信息
sql 复制代码
SELECT * FROM v$version;  -- DM7
SELECT id_code();        -- DM7,--DM8
SELECT * FROM V$LICENSE;       --授权信息
2:数据库实例信息和参数信息
sql 复制代码
-- 达梦数据库实例参数

SELECT '实例名称' AS 选项, INSTANCE_NAME AS 值 FROM V$INSTANCE

SELECT '字符集',
    CASE SF_GET_UNICODE_FLAG()
        WHEN '0' THEN 'GB18030'
        WHEN '1' THEN 'UTF-8'
        WHEN '2' THEN 'EUC-KR'
        ELSE 'UNKNOWN'
    END
UNION ALL
SELECT '页大小(单位:KB)', CAST(PAGE() / 1024 AS VARCHAR)
UNION ALL
SELECT '簇大小(单位:页数)', CAST(SF_GET_EXTENT_SIZE() AS VARCHAR)
UNION ALL
SELECT '大小写敏感',
    CASE SF_GET_CASE_SENSITIVE_FLAG()
        WHEN 1 THEN '是'
        ELSE '否'
    END;

--达梦数据库配置文件参数

SELECT PARA_NAME,PARA_VALUE FROM V$DM_INI;

2、达梦中级运维SQL

1:查看达梦数据库表空间
sql 复制代码
--查看达梦数据库表空间

SELECT T.NAME AS TABLESPACE_NAME, F.PATH AS FILE_PATH 
FROM V$TABLESPACE T, V$DATAFILE F 
WHERE T.ID = F.GROUP_ID;
2:查看达梦数据库用户信息
sql 复制代码
-- 查看所有用户的账户状态和默认表空间
SELECT USERNAME, ACCOUNT_STATUS, DEFAULT_TABLESPACE, CREATED 
FROM DBA_USERS;
3:查看达梦数据库模式信息及其拥有者
sql 复制代码
-- 查看模式和用户归属关系
SELECT SCH_OBJ.NAME AS SCHEMA_NAME, 
       USER_OBJ.NAME AS OWNER_NAME
FROM (SELECT NAME, PID FROM SYS.SYSOBJECTS WHERE TYPE$='SCH') SCH_OBJ,
     (SELECT NAME, ID FROM SYS.SYSOBJECTS WHERE TYPE$='UR' AND SUBTYPE$='USER') USER_OBJ
WHERE SCH_OBJ.PID = USER_OBJ.ID
ORDER BY SCH_OBJ.NAME;
4:查看达梦数据库表结构
sql 复制代码
-- DISQL中查看
DESC [schema_name.]table_name; 
-- SP_TABLEDEF系统过程查看
CALL SP_TABLEDEF('schema_name', 'table_name');
-- DBMS_METADATA.GET_DDL系统包查看
SELECT DBMS_METADATA.GET_DDL('TABLE', 'table_name', 'schema_name') FROM DUAL;
5:达梦数据库查看各个模式下表、视图、触发器、索引等信息数量
sql 复制代码
-- 查看各个模式下表、视图、触发器、索引等信息数量

SELECT 
    OWNER 模式名,
    OBJECT_TYPE 对象类型,
    COUNT(*) 数量
FROM 
    DBA_OBJECTS
WHERE 
    OWNER IN ('MMIS_INNOVATION', 'MMIS_HD', 'SENYI', 'WANGHAI', 'GK_INNOVATION', 'SCM_INNOVATION')
GROUP BY 
    OWNER, OBJECT_TYPE
ORDER BY 
    OWNER, OBJECT_TYPE;
6:达梦数据库查看会话
sql 复制代码
--查看数据库会话

SELECT * FROM V$SESSIONS;
7:达梦数据库查看阻塞
sql 复制代码
--查看数据库阻塞

select id,wait_for_id,wait_time,thrd_id from v$trxwait;
8:达梦数据库查看慢sql
sql 复制代码
--最近1000条慢SQL
SELECT * FROM V$LONG_EXEC_SQLS;
--系统启动累计最慢SQL
SELECT * FROM V$V$SYSTEM_LONG_EXEC_SQLS;
9:达梦数据库查看死锁
sql 复制代码
--查看死锁记录
SELECT * FROM V$DEADLOCK_HISTORY;

3、达梦高级运维SQL

1:达梦数据库查看表空间使用情况
sql 复制代码
--查看表空间使用情况
SELECT 
    (SELECT MAX(NAME) FROM V$TABLESPACE WHERE ID=GROUP_ID) AS "表空间名称", 
    PATH "数据文件", 
    TO_CHAR(TOTAL_SIZE*PAGE/1024/1024) AS "总大小(MB)", 
    TO_CHAR(FREE_SIZE*PAGE/1024/1024) AS "空闲大小(MB)", 
    (TO_CHAR(100 - FREE_SIZE*100/TOTAL_SIZE))||'%' AS "使用率(%)", 
    CASE AUTO_EXTEND WHEN '0' THEN '未开启' WHEN '1' THEN '开启' END AS "自动扩展", 
    MAX_SIZE AS "最大可扩展大小(MB)" 
FROM 
    V$DATAFILE;
2:达梦数据库KILL长时间会话
sql 复制代码
--杀死active状态超过180秒的会话
SELECT 
    'SP_CLOSE_SESSION(' || SESS_ID || ');' AS kill_command,
    SESS_ID,
    SF_GET_SESSION_SQL(SESS_ID) AS current_sql,
    DATEDIFF(SS, LAST_RECV_TIME, SYSDATE) AS active_seconds,
    CLNT_IP,
    USER_NAME
FROM V$SESSIONS 
WHERE STATE = 'ACTIVE' 
    AND DATEDIFF(SS, LAST_RECV_TIME, SYSDATE) > 180  -- 超过180秒
ORDER BY active_seconds DESC;
3:达梦数据库定位阻塞会话和阻塞信息
sql 复制代码
--查看会话阻塞和被阻塞会话信息

SELECT SESS_ID, USER_NAME, CLNT_IP, SQL_TEXT, STATE
FROM V$SESSIONS 
WHERE TRX_ID = <查到的WAIT_FOR_ID>;
    -- 被阻塞的会话信息
    WAIT_SESS.SESS_ID AS 被阻塞会话ID,
    WAIT_SESS.SQL_TEXT AS 被阻塞最后执行的SQL,
    WAIT_SESS.STATE AS 被阻塞会话状态,
    -- 阻塞源会话信息
    HOLD_SESS.SESS_ID AS 阻塞源会话ID,
    HOLD_SESS.SQL_TEXT AS 阻塞源最后执行的SQL,
    HOLD_SESS.STATE AS 阻塞源会话状态,
    -- 阻塞详情
    TRXWAIT.WAIT_TIME AS 已等待时间毫秒
FROM
    V$TRXWAIT TRXWAIT
LEFT JOIN V$SESSIONS WAIT_SESS ON WAIT_SESS.TRX_ID = TRXWAIT.ID
LEFT JOIN V$SESSIONS HOLD_SESS ON HOLD_SESS.TRX_ID = TRXWAIT.WAIT_FOR_ID
ORDER BY
    TRXWAIT.WAIT_TIME DESC;
4:达梦数据库查看表数据信息
sql 复制代码
--达梦数据库查看表数据量大小和表数据量
  SELECT OWNER, 
         TABLE_NAME, 
         TABLESPACE_NAME, 
         STATUS, 
         NUM_ROWS ,
         TABLE_USED_SPACE(OWNER, TABLE_NAME) * PAGE() / 1024 / 1024 AS "SIZE_MB"
    FROM ALL_TABLES 
   WHERE OWNER NOT IN ('SYS', 
                       'SYSAUDITOR', 
                       'SYSSSO', 
                       'CTISYS') 
5:达梦数据库统计信息更新
sql 复制代码
--按表更新统计信息
DBMS_STATS.GATHER_TABLE_STATS(
   '模式名',          -- 对象所属的模式名
   '表名',            -- 目标表名
   NULL,              -- 分区名,NULL表示整个表
   100,               -- 估算百分比(1-100),100为精确统计[reference:2]
   FALSE,             -- 是否聚合所有分区的统计信息,FALSE表示否[reference:3]
   'FOR ALL COLUMNS SIZE AUTO' -- 指定收集哪些列的统计信息,AUTO让系统自动判断
);
--按模式更新统计信息
DBMS_STATS.GATHER_SCHEMA_STATS(
   '模式名',          -- 目标模式名
   100,               -- 估算百分比(1-100)
   TRUE,              -- 是否强制重新分析,即使统计信息是最新的
   'FOR ALL COLUMNS SIZE AUTO' -- 收集所有列的统计信息
);
6:达梦数据库ET性能分析工具
sql 复制代码
--开启会话监控
alter session set 'MONITOR_SQL_EXEC'=1;
--创建测试表并写入数据
CREATE TABLE T1 AS SELECT LEVEL c1,LEVEL||'abc' c2 FROM dual
CONNECT BY LEVEL<=10000;
--执行查询
SELECT * FROM T1 WHERE c2 LIKE '5000%';
--ET查看各部分耗时
ET(执行号);

--EXPLAIN查看执行计划
EXPLAIN SELECT * FROM T1 WHERE c2 LIKE '5000%';
--添加索引优化
CREATE INDEX idx_c2_t1 ON T1(c2);

执行添加索引后执行计划

相关推荐
m0_748920362 小时前
Golang goquery怎么解析HTML_Golang goquery教程【核心】
jvm·数据库·python
m0_746752302 小时前
golang如何编写Markdown转HTML工具_golang Markdown转HTML工具编写详解
jvm·数据库·python
weixin_424999362 小时前
C#怎么使用TopLevel顶级语句 C#顶级语句怎么写如何省略Main方法简化控制台程序【语法】
jvm·数据库·python
qq_372154233 小时前
如何利用Bootstrap的Flex工具类快速排版
jvm·数据库·python
qq_654366983 小时前
golang如何实现菜单权限动态加载_golang菜单权限动态加载实现详解
jvm·数据库·python
arronKler3 小时前
大数据量高并发的数据库优化
服务器·数据库·oracle
祖传F874 小时前
SQL DATE()函数会抹去时间戳
数据库·sql
untE EADO4 小时前
在 MySQL 中使用 `REPLACE` 函数
android·数据库·mysql
Absurd5874 小时前
Redis如何限制列表最大长度_利用LTRIM指令截断List保留最新记录
jvm·数据库·python