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