1. 程式人生 > 其它 >達夢資料庫日常運維管理手冊

達夢資料庫日常運維管理手冊

 

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