网站建设有那些软件重庆装饰公司15大排名
网站建设有那些软件,重庆装饰公司15大排名,wordpress后门插件,企业咨询管理是做什么的达梦数据库性能优化技术指南
一、前言
1.1 概述
性能优化是指在不影响系统运行正确性的前提下#xff0c;使之运行地更快#xff0c;完成特定功能所需的时间更短。达梦数据库性能优化主要包含以下内容#xff1a;
数据库架构优化数据库参数优化SQL 优化统计信息
1.2 核心工具…达梦数据库性能优化技术指南一、前言1.1 概述性能优化是指在不影响系统运行正确性的前提下使之运行地更快完成特定功能所需的时间更短。达梦数据库性能优化主要包含以下内容数据库架构优化数据库参数优化SQL 优化统计信息1.2 核心工具与术语DMLOGSQL 日志分析工具直观反映 SQL 执行情况dmdbg命令行调试工具用于调试 DMSQL 程序Monitor性能监控工具监视服务器活动和性能CBO基于代价的优化器依据统计信息选择最优执行计划执行计划SQL 语句在数据库中的执行过程描述二、数据库架构优化根据业务特性选择合适的数据库架构架构类型特性适用场景数据守护集群 (DMDataWatch)实时数据同步故障秒级切换高可用性需求灾难恢复读写分离集群 (DMRWC)只读操作自动分流到备库读多写少场景OA 办公系统数据共享集群 (DMDSC)多实例单数据库自动负载均衡金融级高可用企业级容灾分布式集群 (DMDPC)支持 OLTPOLAP高扩展性大数据量高并发场景三、数据库参数优化3.1 关键 INI 参数配置内存相关参数MEMORY_POOL共享内存池大小高并发时应调大BUFFER系统缓冲区大小建议设置为总内存的 2/3数据量大于内存时RECYCLE临时表、排序等操作缓冲区高并发时调大HJ_BUF_GLOBAL_SIZE/HJ_BUF_SIZEHASH 连接缓存OLAP 环境可调大并发与线程WORKER_THREADS工作线程数建议设置为 CPU 核数或其两倍BUFFER_POOLS减少数据缓冲区并发冲突优化器参数ENABLE_MONITOR性能优化时设为 3运行时设为 2OLAP_FLAGOLTP 环境保持默认值 2TOP_ORDER_OPT_FLAG优化 TOP 和 ORDER BY 查询移除 SORT 操作符3.2 参数修改方法方式一系统存储过程-- 查询参数值SELECTSF_GET_PARA_VALUE(1,HFS_CACHE_SIZE);-- 修改动态参数立即生效SP_SET_PARA_VALUE(1,HFS_CACHE_SIZE,320);-- 修改会话级参数SF_SET_SESSION_PARA_VALUE(USE_HAGR_FLAG,1);方式二ALTER 命令-- 修改系统参数ALTERSYSTEMSETMTAB_MEM_SIZE1200SPFILE;-- 修改会话参数ALTERSESSIONSETHAGR_HASH_SIZE2000000;方式三直接修改 dm.ini 文件修改后需重启数据库生效静态参数四、SQL 优化实战4.1 定位慢 SQL方法一开启跟踪日志配置dm.iniSVR_LOG 1配置sqllog.ini设置MIN_EXEC_TIME阈值日志文件位置../log/dmsql_实例名_日期_时间.log方法二系统视图查询-- 查询正在执行的会话SELECTSF_GET_SESSION_SQL(SESS_ID)FULLSQLFROMV$SESSIONSWHERESTATEIN(ACTIVE,WAIT);-- 查询超时 SQLSELECT*FROMV$LONG_EXEC_SQLS;4.2 执行计划分析查看执行计划-- 预估执行计划EXPLAINSELECT*FROMSYSOBJECTS;-- 真实执行计划含统计信息SETAUTOTRACE TRACEONLY;SELECT*FROMSYSOBJECTS;常见操作符解读操作符含义优化建议CSCN全表扫描尽量避免考虑添加索引SSEK/CSEK索引扫描优先使用注意回表开销NEST LOOP嵌套循环连接适用于小表驱动大表HASH JOIN哈希连接无索引时的首选消耗内存MERGE JOIN归并连接需要两表连接列都有索引HAGR/SAGR分组聚集SAGR 性能优于 HAGR有序时4.3 SQL 改写技巧1. 优化 GROUP BY-- 优化前SELECTJOB,AVG(AGE)FROMTEMPGROUPBYJOBHAVINGJOBSTUDENT;-- 优化后SELECTJOB,AVG(AGE)FROMTEMPWHEREJOBSTUDENTGROUPBYJOB;2. UNION ALL 替换 UNION-- 避免不必要的排序操作SELECTUSER_IDFROMTAB1WHEREAGE20UNIONALLSELECTUSER_IDFROMTAB2WHEREAGE20;3. EXISTS 替换 IN/DISTINCT-- 优化前SELECTDISTINCTUSER_IDFROMTAB1 D,TAB2 EWHERED.USER_IDE.USER_ID;-- 优化后SELECTUSER_IDFROMTAB1 DWHEREEXISTS(SELECT1FROMTAB2 EWHEREE.USER_IDD.USER_ID);4. 半连接/反连接优化-- NOT IN 改写为 LEFT JOINSELECTE.*FROMEMP2 ELEFTJOINDEPT2 DOND.DEPTNOE.DEPTNOWHERED.DEPTNOISNULL;4.4 索引优化策略建立索引原则✅ 为经常查询、排序、分组的字段建索引✅ 遵循最左匹配原则组合索引✅ 唯一索引优先❌ 避免过多索引影响 DML 性能❌ 避免在函数/计算列上建索引索引失效场景组合索引未使用首列条件列带有函数或计算数据区分度低如查询返回 20% 数据4.5 表设计优化表类型选择类型特点适用场景行存储表按行存储B 树索引OLTP 高并发列存储表 (HUGE)按列存储压缩率高OLAP 海量数据分析堆表物理 ROWID并发插入快高并发插入场景分区表优势减少数据访问范围支持分区级操作TRUNCATE、DROP、EXCHANGE提升查询性能分区裁剪全局临时表应用-- 会话级临时表CREATEGLOBALTEMPORARYTABLETEMP_DATA(...)ONCOMMITPRESERVEROWS;-- 用途存储中间结果会话结束自动清理4.6 HINT 优化应急方案-- 视图过滤合并优化SELECT/* VIEW_FILTER_MERGING(1) */*FROMdms.view_da_baseWHEREahdm00005fe8-b171-4292-b776-b53c3fd65923;-- 绑定 HINT 到慢 SQLSF_INJECT_HINT(select * from ...,VIEW_FILTER_MERGING(1),...);⚠️ 注意HINT 仅作为特定场景或应急处理不推荐常规使用五、统计信息管理5.1 统计信息的重要性统计信息是 CBO 生成最优执行计划的基础包括表行数、块数、平均每行大小索引高度、叶子节点数列数据分布直方图5.2 收集统计信息手动收集-- 收集用户下所有表统计信息DBMS_STATS.GATHER_SCHEMA_STATS(USERNAME,100,TRUE,FOR ALL COLUMNS SIZE AUTO);-- 收集单表统计信息DBMS_STATS.GATHER_TABLE_STATS(USERNAME,TABLE_NAME,null,100,TRUE,FOR ALL COLUMNS SIZE AUTO);-- 收集索引统计信息DBMS_STATS.GATHER_INDEX_STATS(USERNAME,IDX_NAME);自动收集-- 开启表数据量监控SP_SET_PARA_VALUE(1,AUTO_STAT_OBJ,2);-- 设置触发阈值变化率超过 15%DBMS_STATS.SET_TABLE_PREFS(SYSDBA,T,STALE_PERCENT,15);-- 创建自动收集任务SP_CREATE_AUTO_STAT_TRIGGER(1,1,1,1,14:36,2020/3/31,60,1);5.3 查看与维护-- 查看表统计信息DBMS_STATS.TABLE_STATS_SHOW(模式名,表名);-- 查看索引统计信息DBMS_STATS.INDEX_STATS_SHOW(模式名,索引名);-- 删除统计信息DBMS_STATS.DELETE_TABLE_STATS(模式名,表名);六、性能诊断工具6.1 ET 工具执行跟踪-- 开启 ET 功能SP_SET_PARA_VALUE(1,ENABLE_MONITOR,1);SP_SET_PARA_VALUE(1,MONITOR_SQL_EXEC,1);-- 查看执行详情CALLET(执行号);输出指标操作符耗时、占比、执行次数6.2 DBMS_SQLTUNE-- 实时监控 SQL 执行ALTERSESSIONSETMONITOR_SQL_EXEC1;SELECTDBMS_SQLTUNE.REPORT_SQL_MONITOR(SQL_EXEC_ID1213701)FROMDUAL;优势获取 IO 操作量、真实执行计划、瓶颈定位6.3 存储过程调试图形化调试管理工具 - DEBUG SYSTEM命令行调试dmdbg 工具断点、单步、变量查看七、最佳实践总结DBA 日常运维定期收集统计信息业务低峰期监控慢 SQLV$LONG_EXEC_SQLS 日志分析调整关键参数根据负载类型 OLTP/OLAP健康检查系统、实例、集群三级检查开发人员规范SQL 编写避免 SELECT *明确指定列使用 EXISTS 替代 IN/DISTINCTWHERE 过滤优先于 HAVING合理使用 COMMIT 释放资源索引设计高频查询列建索引组合索引遵循最左匹配定期清理无用索引表结构设计大数据量表考虑分区复杂查询使用临时表选择合适表类型行/列/堆紧急优化流程定位慢 SQL日志/视图分析执行计划EXPLAIN/ET检查统计信息是否过期验证索引有效性尝试 SQL 改写必要时使用 HINT应急参考资源达梦技术社区https://eco.dameng.com/community/question/官方文档《DM8 系统管理员手册》《DM8_SQL 语言使用手册》