• 达梦数据库日常运维管理手册


     

    1、     数据库基础操作

    1.1.           创建表空间

    例,以 SYSDBA 身份登录数据库后,创建表空间 TS1,指定数据文件 TS1.dbf,大小128M。

    CREATE TABLESPACE TS1 DATAFILE 'd:\TS1.dbf' SIZE 128 AUTOEXTNED ON NEXT 256;

    注意事项:

    1. 表空间名在数据库中必须唯一;

    2. 一个表空间中,数据文件和镜像文件一起不能超过 256 个;

    3. 如果全库已经加密,就不再支持表空间加密;

    4. SYSTEM 表空间不允许关闭自动扩展,且不允许限制空间大小。

    5. 表空间数据文件的路径一定要在规划的数据盘上,避免空间不足。

    6. MPP、DSC集群环境在创建表空间时,数据文件写数据文件名即可,不需要写绝对路径,写绝对路径可以会出现错误。

    1.2.           表空间增加数据文件

    例,单个数据文件过大不利于数据库的运维管理,为已有的表空间TS1 增加一个新的数据文件,并设置这个数据文件最大上限1000G

    ALTER TABLESPACE TS1 ADD DATAFILE 'd:\TS1.dbf' SIZE 128 AUTOEXTNED ON NEXT 256 MAX 102400;

    1.3.           创建用户

    例,创建用户名为 BOOKSHOP_USER、口令为 BOOKSHOP_PASSWORD用户,并为用户指定默认表空间。

    CREATE USER BOOKSHOP_USER IDENTIFIED BY BOOKSHOP_PASSWORD DEFAULT TABLESAPCE TS1;

    也可在管理工具中创建用户,用户-管理用户-右键-新建用户

    注意事项:

    1. 新建用户一定要为用户指定默认表空间,否则会使用默认系统表空间,不利于以后的维护和扩展;

    1.4.           用户授权

    例,给TEST用户授予权限

    grant public,resource to "TEST";

    同样也可在管理工具中更改用户权限,用户-管理用户-TEST用户-右键-修改

    注意事项:

    1. dba角色不要轻易授予,临时授权需要及时回收;

    1.5.           创建索引

    例,在 emp 表的 ename 列上创建一个名为 idx_emp_ename 的索引,并指定该索引使用表空间 users。

    CREATE INDEX idx_emp_ename ON emp(ename) STORAGE (ON USERS);

    注意事项:

    1. 创建索引会锁表,影响表上的删除、更新、插入等操作,要在确保没有操作的表上创建索引;
    2. 不指定索引使用的表空间,默认会使用用户的默认表空间。

    1.6.           创建唯一索引

    可用 CREATE UNIQUE INDEX 语句来创建唯一索引,如下例子创建一个唯一索引:

    CREATE UNIQUE INDEX dept_unique_index ON dept (dname) STORAGE (ON users);

    1.7.           创建函数索引

    例如, WHERE 子句中的表达式使用了函数,通过函数索引可以提高查询效率

    CREATE INDEX IDX ON EXAMPLE_TAB(avg(column))

    SELECT * FROM EXAMPLE_TAB WHERE avg(column) < 10;

    1.8.           创建主键

    如下面的语句会自动在表emp的name列上创建一个唯一索引。

    ALTER TABLE EMP ADD CONSTRAINT PK_EMP_NAME PRIMARY KEY (NAME);

    1.9.           查看所有会话

    select * from v$sessions;

    1.10.    查看活动会话

    select * from v$sessions where state='ACTIVE';

    1.11.    查看最慢20条SQL

    select TOP 20* from V$SYSTEM_LONG_EXEC_SQLS ORDER BY EXEC_TIME DESC;

    1.12.    查看最近的20条慢sql

    select * from V$LONG_EXEC_SQLS order by EXEC_TIME DESC limit 0,20;

    2、     常见问题处理

    2.1.           锁表的处理

        锁表的问题主要是多个事务同时对一张表进行更新、删除造成,一个事务对表加锁未释放前,其他事务无法再次进行加锁,处于等待状态。

    2.1.1.     查询正在运行的事务

    select

    tw.id as "等待的事务ID",

    tw.wait_for_id as "正在运行的事务ID",

    s.sess_id as "等待的会话",

    ws.sess_id as "正在执行的会话",

    s.sql_text as "等待的sql",

    ws.sql_text as "正在执行的sql" ,

    cast(ws.rowid as varbinary ) >> 58 "运行节点号",

    'SP_CLOSE_SESSION('||ws.sess_id||');' "关闭会话的语句"

    from v$trxwait tw left join v$sessions s

    on tw.id=s.trx_id

    left join v$sessions ws

    on tw.wait_for_id=ws.trx_id;

    #######

    #"正在执行的事务ID":处于等待状态的事务ID;

    #"等待的事务ID":正在运行的事务ID;

    #"正在执行的会话":处于等待状态的会话ID

    #"等待的会话":正在运行的会话ID;

    #"等待的sql":等待执行的SQL;

    #"正在执行的sql":正在执行的SQL;

    #"运行节点号":正在执行的SQL运行在哪个EP节点;

    #"关闭会话的语句":关闭会话的执行语句;

    2.1.2.     通过SESS_ID关闭会话

    通过SQL_TEXT判断需要关闭的会话,通过上一步操作,可以提取出关闭阻塞会话的执行语句。

    SP_CLOSE_SESSION(#SESSID);

    2.1.3.     MPP场景的锁处理

    MPP是分布式数据库,事务会分发到多个节点上同时执行,通过全局登录查询会看到所有节点上的会话信息,如果需要关闭某一个事务,需要将所有节点上的相关事务的会话都要关闭才可以。

    以下命令需要在MPP多个节点同时进行执行:

    ./disql 用户名/密码#{MPP_TYPE=local}--MPP集群需要local登录

    SP_SET_SESSION_LOCAL_TYPE (1);--允许本地登录执行DDL操作命令

    SP_CLOSE_SESSION(#SESSID);

    2.2.           数据库慢分析过程

    2.2.1.     检查资源使用情况

    free -g

    vmstat 1

    ps -aux | sort -k4nr | head -10

    通过以上检查,可以分析内存使用情况,并找到内存占用最高的进程是哪些,从而对占用资源较高的进程进行分析。

    2.2.2.     检查磁盘IO情况

    iostat -xm -t 1

    通过以上检查,可以分析是否有大量的读写在进行;

    如果大量的写入,可以分析是否有正在运行的进程在做批量的插入操作,是否是正常的业务进程,是否可以在非业务高峰期进行。

    如果有大量的读取需要分析是否有大表未使用索引,造成大数据量的全表扫描。

    2.2.3.     检查数据库活动sessions

    select count(*) from v$sessions;

    select PARA_NAME,PARA_VALUE from v$dm_ini where para_name ='MAX_SESSIONS';

    select count(*) from v$sessions where state='ACTIVE';

    select * from v$sessions where state='ACTIVE';

    通过以上检查可以分析是否连接会话数达到上线,造成会话连接等待。

    如果活动会话数持续居高不下,需要具体分析活动的会话执行内容,是否存在死锁等待造成会话无法结束,是否存在应用程序异常操作。

    2.2.4.     查询数据库中的慢sql

    select * from V$LONG_EXEC_SQLS order by EXEC_TIME DESC limit 0,20;

    通过以上检查可以分析数据中执行较慢的SQL,如果sql执行慢且执行频率高,必须进行优化,否则可能会造成数据库整体执行缓慢。

    通过以上分析基本可以定位大部分数据库执行缓慢问题。如果通过以上分析依然无法准确定位问题,可以进行后续的堆栈分析。堆栈分析需要相关专家参与进行结果分析。

    2.2.5.     查看数据库进程的资源使用情况

    (1)提取进程号

    ps -ef |grep dmserver

    (2)查看数据库进程下,各线程的资源使用情况

    ps -eLo pcpu,pmem,pid,tid,psr,wchan:14,comm|grep 进程号 |sort

    2.2.6.     抓取消耗资源最高的线程堆栈信息

    (1)堆栈信息抓取

    pstack 进程号 |grep -A 14线程号

    [dmdba@localhost ~]$ pstack 15248 |grep -A 14 2266805

    Thread 241 (LWP 2091011):

    #0 0x000000000053d790 in nrec_get_nth_fld_with_prev_offset ()

    #1 0x0000000000d007c8 in cscn2_exec_fill_data_all_visible ()

    #2 0x0000000000d01d34 in cscn2_exec_fetch ()

    #3 0x0000000000d056b8 in cscn2_exec ()

    #4 0x0000000000e4a340 in vm_run_low ()

    #5 0x0000000000e4a5f0 in vm_run ()

    #6 0x0000000000e4bb84 in vm_run_mpln ()

    #7 0x00000000011fec20 in mtsk_process_mpln ()

    #8 0x0000000001215d34 in mtsk_process_mal_letter_for_mpp ()

    #9 0x00000000011144e4 in uthr_db_main_for_msess ()

    #10 0x0000ffffa75e88cc in ?? () from /lib64/libpthread.so.0

    #11 0x0000ffffa727a1ec in ?? () from /lib64/libc.so.6

    (2)输出堆栈信息,提交给相关专家进一步分析

    [dmdba@localhost ~]$ pstack 15248 > /tmp/15248.txt

  • 相关阅读:
    米洛个人修炼术:导致上班累成狗的三大主因
    米洛个人修炼术:如何倍增你的功力修行速度达成健康体魄
    米洛个人修炼术:注意这三方面,天天都早起
    米洛个人修炼术:情绪的四种常用处理方式,其实都是有问题的
    好公司和差公司的对比
    课程作业二
    课程作业一
    作业四
    寒假作业三
    寒假作业二
  • 原文地址:https://www.cnblogs.com/zqntx/p/16312815.html
Copyright © 2020-2023  润新知