暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

达梦数据库官方文档中关于问题跟踪和解决的方法

原创 小小星月明 2022-08-23
1599

 问题跟踪和解决


问题跟踪和解决是最复杂的脑力劳动之一,其复杂主要体现在问题的无法预知性和问题根源的多样性。本章的目的是提供一种相对比较系统的方法来查找并解决使用 DM 数据库过程中可能遇到的各种难以跟踪、定位的问题,为 DBA 分析、解决问题提供帮助。

1.1 问题分析
当系统出现问题,无法及时响应用户/应用请求时,可能的原因是多方面的。一般来说,DBA 应该查看和分析的内容包括:


1. 网络是否正常
DBA 可以直接使用各种工具/软件来排除网络问题。如果远程操作有问题,但是本地操作没有问题,则有可能是网络出现故障或者网络带宽耗尽。但是如果本地也有问题,不能说明网络一定没有问题,此时还是需要用其他方式确定网络是否有故障,同时进一步分析本地问题产生的原因。


2. 内存使用量
用户可以通过操作系统提供的内存检测工具/命令来查看数据库占用内存情况,看是否数据库占用了过多内存,并且开始大量使用页面文件( Windows ) / 交换分区(Linux/UNIX),如果数据库占用内存过多,则需要进一步分析可能的原因:是否数据库的内存相关参数设置错误,是否客户端请求的资源过多并且一直没有释放(如不断打开连接/游标,并且一直不关闭)等等。对于参数设置错误,DBA 可以通过修改参数加以解决。如果是客户端请求资源过多,DBA 可以通过查询运行时动态视图来检查资源使用情况,明确问题产生的原因并予以纠正。若排除其他原因后,发现数据库内存仍在不断增长,此时可以联系达梦公司技术服务人员协助解决。

3. CPU 使用率
当发现系统响应很慢甚至无法响应时,CPU 的使用率也是一个重要的观察指标。如果CPU 使用率一直持续 90%以上,甚至 100%,则说明 CPU 使用率过高,此时需要分析导致CPU 使用率过高的原因。可能的原因包括:写了错误的存储过程/函数死循环逻辑;某条 SQL语句执行计划不好导致 CPU 使用率过高(如没有建立合适的索引等);系统内部 SQL 语句都执行正常,只是实际应用负载过大等。针对上述原因,DBA 可以分别考虑改正存储过程/函数的死循环逻辑、建立合适的索引以及提供更高配置的软/硬件环境等措施分别予以解决。


4. I/0 是否正常
I/O 性能没有满足要求是导致很多系统性能低下的原因。通常情况下,主要是两个方面的原因导致 I/O 性能瓶颈:在系统规划时没有对 I/O 性能进行估算或者估算偏差太大,导致存储的 I/O 性能无法满足要求;其次是没有利用好数据库特性,如没有建立合适的索引,导致经常要做全表扫描,消耗大量 I/O 带宽,这可以通过查看 SQL 语句执行计划来加以分析。


5. 系统日志和 SQL 日志
最后,DBA 还可以通过查看系统日志来辅助分析问题。在 DM 数据库运行过程中,会将一些关键信息记录到安装目录下一级 log 目录下的名称为 dm_YYYYMM.log 的日志文件中,其中 YYYY 表示年份,MM 表示月份,该文件会记录下数据库服务启动/关闭的时间、系统关键错误如打开文件失败等。
另外,如果将 DM 数据库配置文件中的参数 SVR_LOG 设置为 1,则系统还会在刚才的log 目录下生成名为 log_commit_NN.log 的文件,在该文件中记录了启用 SVR_LOG 之后数据库接收到的所有 SQL 语句等信息,DBA 也可以通过分析该文件来帮助解决问题。


1.2 监控系统性能(V$)
在 DM 数据库中,定义了一系列以 V$为前缀的系统动态视图,这些表只有表结构信息,没有数据,有时也称之为虚视图。查询动态视图时,服务器动态加载数据。在 DM 数据库运行过程中,系统动态视图提供了大量系统内部信息,便于数据库管理员监视服务器的运行状况,并根据这些信息对数据库进行调优,达到提高数据库性能的目的。用户可以通过普通 SQL 查询语句来查询动态视图信息,也可以通过图形化客户端工具 Monitor 来进行查看。
某些动态性能视图(如 V$SYSSTAT)需要 ENABLE_MONITOR、MONITOR_TIME、MONITOR_SYNC_EVENT、MONITOR_SQL_EXEC 参数打开时才会进行相关信息的收集。


1.3 数据库重演(REPLAY)
数据库重演(Database Replay)是 DM 中用来重现、定位和分析问题的一个重要手段,其基本原理是在数据库系统上捕获所有负载(记录外部客户端对服务器的请求),保存到二进制捕获文件,然后通过 DM 提供的数据库重演工具将捕获文件中的请求发送给捕获前由原始数据库备份恢复而来的重演测试系统上,从而帮助重现当时的场景。用户可以调用系统过程 sp_start_capture 来启动捕获发往数据库的所有负载,并将该阶段收到的所有请求保存到二进制捕获文件中,然后使用 DM 提供的数据库重演客户端工具重放二进制捕获文件,再现当时真实环境的负载及运行情况,帮助进行问题跟踪和诊断。使用系统过程 sp_stop_capture 可以停止捕获。

Replay 的使用必须指定必要的执行参数,其调用格式为:
     格式:DREPLAY KEYWORD=value
    例程:DREPLAY SERVER=LOCALHOST:5236 FILE=.\test.cpt
    必选参数:FILE
   --如果需要获取帮助信息,可以调用 dreplay help,屏幕将显示如下信息:
            关键字                                  说明(默认)
  -------------------------------------------------------------
         SERVER                               需要连接的服务器格式 SERVER:PORT(LOCALHOST:5236)
         FILE                                     捕获文件及路径
         HELP                                   打印帮助信息

1.4 检查数据物理一致性
DM 数据库提供了用于检查数据物理一致性的工具 dmdbchk。在数据库服务器正常关闭的情况下,可以使用 dmdbchk 对数据文件完整性进行校验,检验的内容主要包括:数据文
件大小的校验;索引合法性校验;数据页面校验;系统对象 ID 校验等。在检验完毕后,dmdbchk 会在当前目录下生成一个名为 dbchk_err.txt 的检查报告,供用户查看。


dmdbchk 的使用必须指定必要的执行参数,其调用格式为:
     格式::dmdbchk [ini_file_path]
    例程:
   dmdbchk path=d:\dmdbms\bin\dm.ini
   --如果需要获取帮助信息,可以调用 dmdbchk help,屏幕将显示如下信息:
          关键字                                说明(默认)
------------------------------------------------------------------
         PATH                            dm.ini 绝对路径或者当前目录的 dm.ini
        HELP                             打印帮助信息


1.5 调整配置参数
在 DM 数据库中,很多参数都是动态的,会自动响应各种负载,但是 DBA 仍然可以调用系统过程来改变 DM 实例的运行参数,从而获得更佳的性能体验。DBA 可以在 DM 数据库运行过程中执行 SF_GET_PARA_VALUE 、 SF_GET_PARA_DOUBLE_VALUE 和SF_GET_PARA_STRING_VALUE 这三个函数来获取系统的当前配置参数,并且可以使用SP_SET_PARA_VALUE 和 SP_SET_PARA_DOUBLE_VALUE 过程来修改静态/动态配置参数:


1. SF_GET_PARA_VALUE (scope int, paraname varchar(256))
配置参数的值类型为数值类型时使用该函数来获取当前值。SCOPE 参数为 1 表示获取INI 文件中配置参数的值,为 2 表示获取内存中配置参数的值。


2. SF_GET_PARA_DOUBLE_VALUE(scope int, paraname varchar(8187))
配置参数的值类型为浮点型时使用该函数来获取当前值。SCOPE参数为1表示获取INI文件中配置参数的值,为 2 表示获取内存中配置参数的值。


3. SF_GET_PARA_STRING_VALUE (scope int, paraname varchar(8187))
配置参数的值为字符串类型时用该系统函数来获取当前值。SCOPE 参数为 1 表示获取INI 文件中配置参数的值,为 2 表示获取内存中配置参数的值。


4. SP_SET_PARA_VALUE (scope int, paraname varchar(256), value int64)
该过程用于修改整型静态配置参数和动态配置参数。SCOPE参数为1表示在内存和INI文件中都修改参数值,此时只能修改动态的配置参数。参数为 2 表示只在 INI 文件中修改配置参数,此时可用来修改静态配置参数和动态配置参数。当 SCOPE 等于 1,试图修改静态配置参数时服务器会返回错误信息。只有具有 DBA 角色的用户才有权限调用 SP_SET_PARA_VALUE。

5. SP_SET_PARA_DOUBLE_VALUE (scope int, paraname varchar(8187), value double)
该过程用于修改浮点型静态配置参数和动态配置参数。SCOPE 参数为 1 表示在内存和INI 文件中都修改参数值,此时只能修改动态的配置参数。参数为 2 表示只在 INI 文件中修改配置参数,此时可用来修改静态配置参数和动态配置参数。当 SCOPE 等于 1,试图修改静态配置参数时服务器会返回错误信息。只有具有 DBA 角色的用户才有权限调用SP_SET_PARA_DOUBLE_VALUE。


6. SF_SET_SYSTEM_PARA_VALUE (paraname varchar(256), value int64\double\varchar(256), deferred int, scope int64)
该过程用于修改系统整型、double、varchar 的静态配置参数或动态配置参数。DEFERRED 参数,为 0 表示当前 session 修改的参数立即生效,为 1 表示当前 session不生效,后续再生效,默认为 0。SCOPE 参数为 1 表示在内存和 INI 文件中都修改参数值,此时只能修改动态的配置参数。参数为 2 表示只在 INI 文件中修改配置参数,此时可用来修改静态配置参数和动态配置参数。只有具有 DBA 角色的用户才有权限调用SF_SET_SYSTEM_PARA_VALUE。

DM 的动态 INI 参数分为系统级和会话级两种级别。会话级参数在服务器运行过程中被修改时,之前创建的会话不受影响,只有新创建的会话使用新的参数值。


1. SF_SET_SESSION_PARA_VALUE (paraname varchar(8187), value bigint)
设置某个会话级 INI 参数的值,设置的参数值只对本会话有效。


2. SP_RESET_SESSION_PARA_VALUE (paraname varchar(8187))
重置某个会话级 INI 参数的值,使得这个 INI 参数的值和系统 INI 参数的值保持一致。


3. SF_GET_SESSION_PARA_VALUE (paraname varchar(8187))
获得当前会话的某个会话级 INI 参数的值。


需要注意的是,在对参数进行调整前,DBA 应该深刻理解配置参数中每个参数的含义和对系统的影响,避免由于错误的调整导致影响整个系统对外提供正常服务。对于一些关键业务,在实际调整前,建议在测试系统上先进行试验,验证通过后再在生产系统上进行调整。


1.6 优化数据库布局
数据库的布局直接影响整个系统的 I/O 性能。通常情况下,DBA 应该遵循下述原则:
1. 日志文件放在独立的物理磁盘上,保持与数据文件分开存储;
2. 预先估算并分配好磁盘空间,避免运行过程中频繁扩充数据文件;
3. 系统中不同表空间尽量分布在不同的磁盘上,这样当数据分布在多个表空间时,可以充分利用不同磁盘的并行 I/O 能力;
4. 对于分区表,尽可能将不同的分区放到不同的表空间;
5. 对于分析型应用,数据库的页大小和簇大小都可以考虑取最大值,并且在采用列存储的情况下,应该尽可能让每列存放在独立的表

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论