1.3 优化的基本步骤
对DM8进行性能优化时,一般会采取以下5个步骤,即问题分析、监控系统性能、数据库重演、检查数据物理一致性、优化数据库布局。
1.3.1 问题分析
问题分析是对DM8进行性能优化的第一步。当系统出现问题,无法及时响应用户/应用请求时,存在多方面可能的原因。一般来说DBA应该查看和分析以下内容。
1. 网络是否正常
DBA可以直接使用各种工具/软件来排除网络问题。若远程操作有问题,但是本地操作没问题,则可能是网络出现故障或者带宽耗尽。但如果远程操作和本地操作都有问题,也不能判断网络一定没有问题,那么此时还需要用其他方式确定网络是否有故障,同时进一步分析本地问题产生的原因。
2. 内存使用量
用户可以通过操作系统提供的内存检测工具/命令来查看数据库内存占用情况,评估数据库是否占用了过多内存,并且开始大量使用页面文件(Windows)/交换分区(Linux/Unix),若数据库占用内存过多,则需要进一步分析可能的原因,如数据库的内存相关参数设置是否错误,客户端请求的资源是否过多且是否一直没有释放(如不断打开连接/游标,并且一直不关闭)等。对于参数设置错误,DBA可以通过修改参数加以解决。如果是客户端请求资源过多,DBA可以通过查询运行时的动态视图(参考附录C DM8常用动态性能视图)来检查资源使用情况,明确问题产生的原因并予以纠正。若排除其他原因后,发现数据库内存仍在不断增长,此时可以联系武汉达梦数据库股份有限公司技术服务人员协助解决。
3. CPU占用率
当发现系统响应很慢甚至无法响应时,CPU占用率也是一个重要的观察指标。如果CPU占用率一直保持在90%以上,甚至100%,则说明CPU占用率过高,此时需要分析导致CPU占用率过高的原因。可能包括:写了错误的存储过程/函数死循环逻辑;某条SQL语句执行计划不好(如没有建立合适的索引等);系统内部SQL语句都执行正常,而实际应用负载过大等。针对上述原因,DBA可以通过改正存储过程/函数死循环逻辑、建立合适的索引及提供更高配置的软/硬件环境等措施分别予以纠正。
4. I/O是否正常
I/O性能没有满足要求是导致很多系统性能低下的原因。通常情况下,主要是两个方面的原因导致I/O性能瓶颈:①在系统规划时没有对I/O性能进行估算或者估算偏差太大,导致存储的I/O性能无法满足要求;②没有利用好数据库特性,如没有建立合适的索引,导致要经常做全表扫描,消耗大量I/O带宽,这可以通过查看带宽,以及通过查看SQL语句执行计划来加以分析。
5. 系统日志和SQL日志
DBA还可以通过查看系统日志来辅助分析问题。DM8在运行过程中,会将一些关键信息记录到安装目录下名称为“dm_实例名_YYYYMM.log”的系统日志文件中,其中“YYYY”表示年份,“MM”表示月份,如“dm_DMSERVER_202102.log”。该文件会记录数据库服务启动/关闭的时间、系统错误如打开文件失败等。
另外,如果将DM8配置文件中参数文件里的参数SVR_LOGSVR_LOG设置为打开,那么系统还会在前文提到的log目录下生成名为“dmsql_实例名_日期_时间.log”的SQL日志文件,如“dmsql_DMSERVER_20210226_102712.log”。在该文件中记录了启用SVR_LOG之后数据库接收到的所有SQL语句等信息,DBA也可以通过分析该文件来帮助解决问题。
1.3.2 监控系统性能
在DM8中,定义了一系列以V$为前缀的系统动态视图(参考附录C DM8常用动态性能视图),这些视图只有结构信息,没有数据,有时也被称为虚视图。查询动态视图时,服务器会动态加载数据。在DM8的运行过程中,系统动态视图提供了大量内部信息以便数据库管理员监视服务器的运行状况,并根据这些信息对数据库进行调优以达到提高性能的目的。用户可以通过普通查询语句来查询动态视图信息,也可以通过图形化客户端工具Monitor来进行查看。
某些动态性能视图(如V$SYSSTAT)需要在ENABLE_MONITOR、MONITOR_TIME、MONITOR_SYNC_EVENT、MONITOR_SQL_EXEC参数设置为打开时,才会进行相关信息的收集。
1.3.3 数据库重演
数据库重演(Database Replay)是达梦数据库中用来重现、定位和分析问题的一个重要手段,其基本原理是在数据库系统上捕获所有负载(记录外部客户端对服务器的请求),将其保存到二进制捕获文件中,然后通过达梦数据库提供的数据库重演工具,将捕获文件中的请求发送给捕获前由原始数据库备份恢复而来的重演测试系统,以帮助重现当时场景。
用户可以通过调用系统过程sp_start_capture来开始捕获发往数据库的所有负载,并将该阶段收到的所有请求保存到二进制捕获文件中,然后使用达梦数据库提供的数据库重演客户端工具重放二进制捕获文件,重现当时真实环境的负载情况及运行情况,以帮助实现问题跟踪和诊断。使用系统过程sp_stop_capture可以停止捕获。
对于数据库重演的使用必须指定要执行的参数,其格式如下。
1.3.4 检查数据物理一致性
DM8提供了用于检查物理一致性的工具dmdbchk。在数据库服务器正常关闭的情况下,可以使用dmdbchk对数据文件的完整性进行校验,校验的内容主要包括数据文件大小校验、索引合法性校验、数据页面校验、系统对象ID校验等。在校验完毕后,dmdbchk会在当前目录下生成一个名为dbchk_err.txt的检查报告,供用户查看。
dmdbchk的使用必须指定必要的执行参数,其调用格式如下。
1.3.5 优化数据库布局
数据库的布局直接影响整个系统数据库的I/O性能。在通常情况下,DBA应该遵循以下原则。
(1)日志文件放在独立的物理磁盘上,保持与数据文件分开存储。
(2)预先估算并分配好磁盘空间,避免运行过程中频繁扩充数据文件。
(3)系统中不同表空间尽量分布在不同的磁盘上,这样当数据分布在多个表空间时,可以充分利用不同磁盘的并行I/O能力。
(4)尽可能将不同的分区表放到磁盘空间中。
(5)对于分析型应用,数据库的页大小和簇大小都可以考虑取最大值,并且在采用列存储的情况下,应该尽可能让每列存放在独立表中。