达梦数据库学习之问题分析方法总结

问题分析方法总结

一、操作系统

1.1 网络情况

  • 使用ping 或者 telnet ip 端口号等命令确认网络是否畅通
  • 网络畅通的情况下可以使用ethtool或者sar -n 命令排查当前网络带宽情况。

1.2 内存使用情况

  • 首先可以使用free -h 或者 top 以及 cat /proc/meminfo |grep -i commit 或者sar -r等命令确认当前内存使用情况。
  • 如果发现内存不够,且当前swap已经开始大量使用,就要检查是否是数据库内存使用过高导致的操作系统内存不足,可以用top命令或者pidstat -r 确定内存消耗高的进程。
  • 当确定是数据库问题时,需要对数据库内存参数进行检查,主要为dm.ini文件中buffer和memory相关参数。
  • 同时需要确认是否存在慢SQL堆积或者大事务的情况导致内存占用过高
  • 或者存在大量连接不释放导致内存使用过高

1.3 CPU 使用率

  • 确认cpu使用率可以用top或者pidstat -u以及sar 工具来确认或者定位cpu是否达到瓶颈
  • 如果确认是数据库导致的可以检查,通过栈信息或者通过netstat -apn|grep dmserver|grep ESTABLISHED|awk ‘{print $5}’|awk -F “:” ‘{print $1}’|sort -nr|uniq -c|sort -nr 确认当前数据库连接数最多的IP以及正在执行作业的session_id去确认问题语句
  • 一般来说CPU使用过高是写了错误的存储过程/函数死循环逻辑或某条 SQL语句执行计划不好导致 CPU 使用率过高(如没有建立合适的索引等)

1.4 磁盘IO

在安装数据库集群前需要使用dd命令或者fio命令检查磁盘读写速度,评估当前读写速度是否满足业务上线需求。

  • 使用iostat命令确认磁盘当前状态是否到达瓶颈
  • 确认当前数据库是否在执行备份,大批量DML等语句
  • 使用pstack确认当前数据库是否存在频繁的全表扫描语句

二、数据库

2.1通过检查日志打印情况确认问题

实例日志:

dm_DMDB1_202302.log

守护日志:

dm_watcher_DMDB1_202302.log

AP日志:

dm_BAKRES_202302.log

SQL日志:

BUF_TOTAL_SIZE = 10240
BUF_SIZE = 1024
BUF_KEEP_CNT = 6
[SLOG_ALL]
FILE_PATH = ../log
PART_STOR = 1
SWITCH_MODE = 2
SWITCH_LIMIT = 512
ASYNC_FLUSH = 1
FILE_NUM = 5
ITEMS = 0
SQL_TRACE_MASK = 2:3:25
MIN_EXEC_TIME = 1500
USER_MODE = 0
USERS = 

一般SQL日志配置如上,记录1.5S以上的慢SQL

同时数据库需要开启日志记录

SP_SER_PARA_VALUE(1,‘SVR_LOG’,1); —开启日志记录

修改此文件后需要执行CALL SP_REFERESH_SVR_LOG_CONFIG()

2.2通过查询语句分析问题

--查询活动会话数

select count(*) from v$sessions where state = 'ACTIVE';
--慢SQL(大于1)
select * from (
SELECT sess_id,sql_text,datediff(ss,last_send_time,sysdate) ss,
       SF_GET_SESSION_SQL(SESS_ID) fullsql
 FROM V$SESSIONS WHERE STATE='ACTIVE' and sess_id <> sessid())
 where ss>=1;
--死锁历史
SELECT SESS_ID AS "会话ID",TRX_ID AS "事务ID",SQL_TEXT AS "产生死锁的SQL",HAPPEN_TIME AS "死锁发生时间" FROM V$DEADLOCK_HISTORY;
--等待事件
SELECT THREAD_ID AS "线程ID",TRX_ID AS "事务ID",WAIT_CLASS AS "等待类型号",WAIT_OBJECT AS "等待对象",WAIT_START AS "等待开始时间",TRUNC(WAIT_TIME,6)/1000000 AS "等待时间" FROM V$WAIT_HISTORY;

–查询最近10000条SQL历史记录,并案耗时排序

select * from v$sql_history order by time_used desc;

2.3收集统计信息

-创建系统包
SP_CREATE_SYSTEM_PACKAGES(1);

-收集指定用户下所有表所有列的统计信息:
DBMS_STATS.GATHER_SCHEMA_STATS('username',100,TRUE,'FOR ALL COLUMNS SIZE AUTO');

-收集指定用户下所有索引的统计信息:
DBMS_STATS.GATHER_SCHEMA_STATS('useRname',1.0,TRUE,'FOR ALL INDEXED SIZE AUTO');
--或 收集单个索引统计信息:
DBMS_STATS.GATHER_INDEX_STATS('username','IDX_T2_X');

-收集指定用户下某表统计信息:
DBMS_STATS.GATHER_TABLE_STATS('username','table_name',null,100,TRUE,'FOR ALL COLUMNS SIZE AUTO');

--收集某表某列的统计信息:
STAT 100 ON table_name(column_name);

达梦数据库社区地址:https://eco.dameng.com

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值