一、前言
通常SQL 调优作为业务上线前对数据库性能调优中最重要的一个环节,对数据库相关性能产生着重要的影响,影响SQL执行效率的原因有很多,比如:SQL编码不规范,表结构设计不合理,索引问题,慢SQL,统计信息不准确等, SQL调优的原则是最大程度减小系统资源开支,尤其减少I/O和CPU使用率、提高SQL命中率,获得最优的执行计划。
二、SQL 优化思路总结
定位慢 SQL
定位执行效率低的 SQL 语句是 SQL 优化的第一步。待优化的 SQL 可大致分为两类:
SQL 执行时间在十几秒到数十秒之间,但执行频率不高,此类 SQL 对数据库整体性能影响并不大,可以放到最后进行优化。
SQL 单独执行时间可能很快,在几百毫秒到几秒之间,但执行频率非常高,甚至达到每秒上百次,高并发下执行效率降低,很可能导致系统瘫痪,此类 SQL 是优化的首要对象。
以下介绍两种定位慢 SQL 的方法,可记录下具体 SQL 语句以及对应执行时间,为后续 SQL 优化工作奠定基础。
-
开启跟踪日志记录
跟踪日志文件是一个纯文本文件,以”dmsql_实例名_日期_时间命名.log”,默认生成在 DM 安装目录的log 子目录下。跟踪日志内容包含系统各会话执行的 SQL 语句、参数信息、错误信息、执行时间等。跟踪日志主要用于分析错误和分析性能问题,基于跟踪日志可以对系统运行状态进行分析。
-
跟踪日志记录配置
(1)配置 dm.ini 文件,设置SVR_LOG = 1 以启用 sqllog.ini 配置,该参数为动态参数,可通过调用数据库函数直接修改,如下所示:
SP_SET_PARA_VALUE(1,'SVR_LOG',1);
(2)配置数据文件目录下的 sqllog.ini 文件。
[dmdba@localhostDAMENG]$ cat sqllog.ini
BUF_TOTAL_SIZE = 10240 #SQLs Log Buffer Total Size(K)(1024~1024000)
BUF_SIZE = 1024 #SQLs Log Buffer Size(K)(50~409600)
BUF_KEEP_CNT = 6 #SQLs Log buffer keeped count(1~100)
[SLOG_ALL]
FILE_PATH = ../log
PART_STOR = 0
SWITCH_MODE = 1
SWITCH_LIMIT = 100000
ASYNC_FLUSH = 0
FILE_NUM = 200
ITEMS = 0
SQL_TRACE_MASK = 2:3:23:24:25
MIN_EXEC_TIME = 0
USER_MODE = 0
- USERS =
(3)如果对sqllog.ini 进行了修改,可通过调用以下函数即时生效,无需重启数据库。
SP_REFRESH_SVR_LOG_CONFIG();(各配置项详细说明请见达梦官网技术文档)
表设计优化
表设计优化可以从三个方面入手:选择合适的表类型、设置分区表、设置全局临时表。
表类型选择
达梦数据库提供了三种表类型:行存储表、列存储表(HUGE)和堆表。运维人员可根据实际需求选择合适的表类型。
表类型 |
描述 |
主要特征 |
适用场景 |
行存储表 |
行存储是以记录为单位进行存储的,数据页面中存储的是完整的若干条记录 |
1.按行存储 2.每个表都创建一个 B 树,并在叶子上存放数据 |