达梦数据库卡慢简单分析
1.檢查是否有鎖表
????????查詢鎖表:select sess_id,sql_text from v$sessions sess,v$lock lck where ????????sess.trx_id=lck.trx_id and lck.blocked=1; --查詢僵死會話
????????解鎖:根據(jù)會話ID,停止會話
????????sp_close_session(sess_id);
?2.根據(jù)v$sessions,V$LONG_EXEC_SQLS,確認(rèn)sql是否需要優(yōu)化
????????select * from v$sessions;--根據(jù)情況,可關(guān)閉執(zhí)行卡死的會話。
3.根據(jù)v$connect 確認(rèn)連接數(shù)是否過高
?select * from V$CONNECT?where STATUS$='ACTIVE';--查詢正在使用的連接
4.根據(jù)DM性能監(jiān)視工具-性能監(jiān)視-資源監(jiān)控-sql硬解析頻率是否過高,運(yùn)行參數(shù)配置是否合理
? ? ? ?1 sql硬解析引起的并發(fā)數(shù)限制,可查詢出訪問次數(shù)較高的幾個功能界面和執(zhí)行率較
????????高的硬解析語句,優(yōu)化功能的sql執(zhí)行方式。?
? ? ? ? 如:select * from test where id='123'; 改成 select * from test? where id=? 方式執(zhí)行。
或select para_value from V$DM_INI ?where para_name='USE_PLN_POOL';
????????2? 運(yùn)行參數(shù)配置不合理,可修改配置
? ? ? ?
????????如查詢:select? * from V$DM_INI? where para_name='HJ_BUF_GLOBAL_SIZE';
????????調(diào)整:alter system set 'HJ_BUF_GLOBAL_SIZE' =5000? both;
5.檢查系統(tǒng)資源
?????? cup使用率、運(yùn)行內(nèi)存使用率,磁盤使用率,IO使用是否過高,是否使用的機(jī)械硬盤有壞道等,
????????影響數(shù)據(jù)庫運(yùn)行。
? ? ? ? 系統(tǒng)資源不足可升級硬件或部署達(dá)夢讀寫分離的集群模式,分?jǐn)倝毫Α?/p>
注:DM7版本事務(wù)控制期間insert,delete ,update過程中,引起的select卡慢,可升級到DM8版本解決。
6.檢查表數(shù)據(jù)量是否存儲的比較多
? ? ? ? 表數(shù)據(jù)過多引起的sql卡慢,可對存儲數(shù)據(jù)量過多的表 分區(qū)或者分表 嘗試解決,
????????對數(shù)據(jù)量巨多的可分表+分區(qū)聯(lián)合使用解決查詢卡慢的問題。
? ? ? ? 如:test表數(shù)據(jù)過多,根據(jù)登錄賬號的usernameid創(chuàng)建hash分區(qū) (DM8_創(chuàng)建分區(qū)腳本)
????????????????CREATE TABLE "TEST_1"
????????????????(
????????????????"ID" VARCHAR2(32) NOT NULL,
????????????????"USERNAMEID" VARCHAR2(32),
????????????????"COLNAME1" VARCHAR2(199),
????????????????"COLNAME2" VARCHAR2(1) ) partition by hash (USERNAMEID) partitions 16 ? ;
????????????????alter table TEST rename to TEST_BAK;
????????????????alter table TEST_1 rename to TEST;
????????????????INSERT INTO TEST SELECT * FROM TEST_BAK;commit;
? ? ? ? CREATE ?INDEX "TEST_USERNAMEID_COLNNAME1" ON TEST("USERNAMEID" ASC,"COLNAME1" ASC) GLOBAL ? ;--分區(qū)索引
alter table TEST enable row movement;--允許分區(qū)字段更新
7.查找出耗時的sql進(jìn)行優(yōu)化
1.通過試圖查詢歷史執(zhí)行的sql
select * from V$SQL_HISTORY where time_used>3000000 order by ?start_time desc;--查詢出執(zhí)行時間超過3s的sql;
2 通過sql日志文件分析,歷史執(zhí)行的sql運(yùn)行的情況
????????如:windows 系統(tǒng)查詢耗時在10s以上的sql語句.
????????使用notepad++文本編輯器,打開達(dá)夢sql日志文件,ctrl+h打開搜索框輸入正則查詢
????????條件點(diǎn)擊全部標(biāo)記,可將耗時在10s以上的所有sql查詢出來并標(biāo)記;
????????點(diǎn)擊搜索-書簽->復(fù)制書簽行,可以將標(biāo)記的所有耗時在10s以上的sql拷貝出來。
?
?linux 系統(tǒng):查詢耗時在10s以上的sql語句.
grep -n '[0-9]\{5,10\}[(][m][s][)]' /mnt/e/dmdbms/log/dmsql_DMSERVER_20220303_171739.log
????????輸入以上命令可查詢出耗時在10s以上的sql,
????????/mnt/e/dmdbms/log/dmsql_DMSERVER_20220303_171739.log :達(dá)夢sql日志所在路徑。
????????'[0-9]\{5,10\}[(][m][s][)]'? ?:正則查詢條件
總結(jié)
以上是生活随笔為你收集整理的达梦数据库卡慢简单分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: extjs tree 遍历树节点并设置选
- 下一篇: spark-sql建表语句限制_第三篇|