达梦数据库日常运维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);

执行添加索引后执行计划

相关推荐
邮专薛之谦14 小时前
MySQL 完整SQL指令大全(含详细解释+实战示例)
数据库·sql·mysql
YL2004042614 小时前
MySQL-进阶篇-SQL优化
数据库·sql·mysql
Irissgwe14 小时前
redis之典型应用-缓存cache
数据库·redis·缓存·缓存击穿·缓存雪崩·redis淘汰策略
Shely201714 小时前
数据库索引
数据库·mysql
我也不曾来过114 小时前
Mysql
数据库·mysql
小陈工14 小时前
Python异步编程进阶:asyncio高级模式与性能调优
开发语言·前端·数据库·人工智能·python·flask·numpy
gQ85v10Db14 小时前
Redis分布式锁进阶第三十一篇
数据库·redis·分布式
身如柳絮随风扬14 小时前
购物车服务设计:基于 Redis Hash 的高效实现
数据库·redis
观测云15 小时前
观测云4月产品升级报告 | 统一目录、Obsy AI 全新上线,基础设施、场景、监控告警、管理多项能力升级
数据库·人工智能·可观测性·产品迭代·观测云
Mike117.15 小时前
GBase 8c schema 和 search_path 引发的对象定位问题
数据库·sql·oracle