(SERIES11)DM性能诊断

1 性能诊断的概念

  性能诊断用于了解操作系统以及数据库的各项性能指标是否达到要求,以满足系统正常运行需要。通过性能诊断,可以更好地了解系统资源的使用情况、以及数据库的状态,提前避免由于性能不足引发的各种问题。
  主要包含如下内容:

  • 提前准备工作
  • 系统资源诊断
  • 动态视图诊断
  • 跟踪日志诊断
  • AWR 日志诊断
  • 相关接口诊断

2 环境信息收集

  环境信息收集范围主要包括硬件信息软件信息其他信息,分别如表2-1,2-2,2-3:

表2-1 需要收集的硬件信息

硬件硬件配置运行情况
CPUcat /proc/cpuinfotop\vmstat\sar
内存cat /proc/meminfotop\vmstat\free
磁盘RAIDiostat
网络ifconfigping\route\netstat
表2-2 需要收集的软件信息

分类说明
数据库版本SELECT * FROM V$VERSION;
数据库架构单机\主备\读写分离\DSC
交易类型OLTP\OLAP\OLTP 与 OLAP 混合
配置参数资源类参数\查询优化参数
数据库规模库大小\大表\分区表\索引
关注的对象触发器\大字段\物化视图\外部链接
会话数SELECT COUNT(*) FROM V$SESSIONS;
事务数SELECT COUNT(*) FROM V$TRX;
等待事件SELECT * FROM V$TRXWAIT;
内存池SELECT * FROM V$MEM_POOL;
热点热点表\热点 SQL
表2-1 需要收集的其他信息

分类说明
硬件是否有硬件更换\重启\升级
软件是否有新业务上线\新模块适配
用户是否有业务用户增加\业务访问时间调整\业务访问模块集中

3 系统资源诊断

3.1 系统资源诊断的概念

  系统资源诊断用于了解服务器的内存、CPU、磁盘 I/O 和网络的性能情况。系统资源诊断主要分为:

  • 内存性能诊断
  • CPU 性能诊断
  • 磁盘 I/O 性能诊断
  • 网络性能诊断

3.2 内存性能诊断

3.2.1 前置知识

  Linux 内核给每一个进程都提供了一个独立的虚拟地址空间,并且这个地址空间是连续的,这样进程就可以很方便地访问内存,即虚拟内存。本节介绍常见内存性能分析命令,以及内存性能分析方法。

3.2.2 相关命令

3.2.2.1 top命令

 &esmp;top 命令经常用来监控 Linux 系统 CPU、内存的使用情况,关于 top 命令的详细介绍见https://eco.dameng.com/document/dm/zh-cn/ops/system-monitor.html
  输入top命令之后的返回情况示例如下:

[root@VM-8-6-centos ~]$ top

top - 01:02:39 up 23 days, 13:17,  6 users,  load average: 0.13, 0.06, 0.08
Tasks: 331 total,   1 running, 330 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.5 us,  0.7 sy,  0.0 ni, 98.3 id,  0.3 wa,  0.0 hi,  0.2 si,  0.0 st
KiB Mem :  7911456 total,   134848 free,  3924472 used,  3852136 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  3629240 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                         
10782 root      20   0 1041692  77384  15076 S   1.3  1.0  43:35.71 YDService                                                                       
    9 root      20   0       0      0      0 S   0.3  0.0  13:15.30 rcu_sched                                                                       
 2286 root      20   0    3968   1668   1360 S   0.3  0.0   0:17.21 startup.sh                                                                      
 2405 mysql     20   0 1793848 384644   5320 S   0.3  4.9  80:53.50 mysqld                                                                          
 2959 root      20   0  754616  16200   2700 S   0.3  0.2 242:33.07 barad_agent                                                                     
10835 root      20   0  922460   7448   4068 S   0.3  0.1   1:08.06 YDLive                                                                          
22819 root      20   0       0      0      0 S   0.3  0.0   0:00.71 kworker/1:1                                                                     
24228 dmdba     20   0 4457600 920660  11084 S   0.3 11.6  30:08.30 java                                                                            
26772 root      20   0   22420   1856   1284 S   0.3  0.0   0:22.28 tmux                                                                            
30999 root      20   0  116336   2556   1376 S   0.3  0.0   2:16.09 vncserver_wrapp                                                                 
31408 root      20   0  716788  12848   5404 S   0.3  0.2   4:36.88 gsd-color                                                                       
    1 root      20   0  126048   4296   2408 S   0.0  0.1   4:43.08 systemd                                                                         
    2 root      20   0       0      0      0 S   0.0  0.0   0:00.42 kthreadd                                                                        
    4 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H                                                                    
    6 root      20   0       0      0      0 S   0.0  0.0   1:13.12 ksoftirqd/0                                                                     
    7 root      rt   0       0      0      0 S   0.0  0.0   0:49.63 migration/0                                                                     
    8 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcu_bh                                                                          
   10 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 lru-add-drain                                                                   
   11 root      rt   0       0      0      0 S   0.0  0.0   0:05.05 watchdog/0                                                                      
   12 root      rt   0       0      0      0 S   0.0  0.0   0:10.59 watchdog/1                                                                      
   13 root      rt   0       0      0      0 S   0.0  0.0   0:48.94 migration/1                                                                     
   14 root      20   0       0      0      0 S   0.0  0.0   1:08.57 ksoftirqd/1                                                                     
   16 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/1:0H                                                                    
   18 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kdevtmpfs                                                                       
   19 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 netns                                                                           
   20 root      20   0       0      0      0 S   0.0  0.0   0:01.30 khungtaskd                                                                      
   21 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 writeback                                                                       
   22 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kintegrityd                                                                     
   23 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 bioset                                                                          
   24 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 bioset                                                                          
   25 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 bioset                                                                          
   26 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kblockd                                                                         
   27 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 md                                                                              
   28 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 edac-poller 

  从中可以清晰地看到系统内存情况,包括物理内存总量、空闲内存总量、使用的物理内存总量和用作内核缓存的内存量等。

3.2.2.2 vmstat命令

  vmstatVirtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、IO 读写、CPU 活动等进行监视,在某系统中输入 vmstat 命令之后显示结果如下所示:

[root@VM-8-6-centos ~]$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 141332 192080 3660740    0    0     3    38    9    7  1  1 98  0  0

  memory 部分显示切换到内存交换区的内存大小、当前空闲的物理内存大小、用于磁盘缓存的大小、用于页面缓存的内存大小等;
  swap 部分显示每秒从交换分区读回到内存的大小、每秒写入交换分区的大小等。
  或使用如下命令:

3.2.3 分析方法

  使用 vmstat 命令对内存性能进行分析:

[root@VM-8-6-centos ~]# vmstat 1 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 152408 192080 3661052    0    0     3    38    9    7  1  1 98  0  0
 0  0      0 152060 192080 3661052    0    0     0     0 1119 2041  1  1 99  0  0
 0  0      0 152028 192080 3661052    0    0     0     0 1117 2048  1  1 99  0  0
 0  0      0 152136 192080 3661052    0    0     0   340 1268 2295  1  1 99  0  0
 0  0      0 152276 192080 3661056    0    0     0     0 1146 2179  1  1 99  0  0

  这表示使用 vmstat 检测,每隔 1 秒刷新一次,共刷新 5 次。
  对上述指标解读如下:

  • memory
    (1)swpd :如果 swap 的值不为 0,或者比较大,比如超过 100 MB ,但是 si 和 so 的值长期为 0,这种情况不会影响系统性能。
    (2)free :空闲内存 (free) 很少或接近于 0 时,并不能认定为内存不够用,Linux 是抢占内存的 OS,还要结合 si 和 so;如果 free 很少,si 和 so 也很少(大多时候是 0),系统性能在这种情况下不会受到影响。
    (3)cache :如果 cache 的值大的时候,说明 cache 处的文件数多,如果频繁访问到的文件都能被 cache,那么磁盘读 IO 的 bi 会非常小。
  • swap
      内存够用的时候,si 和 so 这 2 个值都是 0,如果这两个个值长期大于 0 ,表示存在虚拟内存页频繁换入换出,内存使用到了 swap 系统性能会受到影响。

3.3 CPU性能诊断

3.3.1 相关命令

3.3.1.1 top命令

  类似于3.2.2.1中所示:
  第三行显示 CPU 相关信息,包括:

  • 当前用户空间占用 CPU 百分比
  • 内核空间占用 CPU 百分比
  • 用户进程空间内改变过优先级的进程占用 CPU 百分比
  • 空闲 CPU 百分比
  • 等待输入输出的 CPU 时间百分比
  • CPU 服务于硬件中断所耗费的时间总额
  • CPU 服务软中断所耗费的时间总额
  • 虚拟机被 hypervisor 偷去的 CPU 时间
3.3.1.2 vmstat命令

  类似于3.2.2.2或3.2.3中所示:
  CPU 以百分比显示,包括:

  • 用户进程执行时间
  • 系统进程执行时间
  • 空闲时间
  • 等待 IO 时间
  • 被偷走的 CPU 时间所占百分比

  us + sy + id + wa =100%,近似为 100%。

3.3.2 分析方法

  对其中指标解读如下:

  1. Procs
  • r:如果在 procs 中运行的序列 (processr) 是连续的大于在系统中的 CPU 的个数,表示 CPU 比较忙,系统现在运行比较慢,有多数的进程等待 CPU。如果 r 的输出数大于系统中可用 CPU 个数的 4 倍,则系统面临着 CPU 短缺的问题,或者是 CPU 的速率过低,系统中有多数的进程在等待 CPU,造成系统中进程运行过慢。
  • b:在 procs 中运行的序列 (processb),即处于不可中断状态的进程数,如果连续为 CPU 的 2~3 倍,就表明 CPU 排队比较严重。

  如果 r 连续大于 CPU 的个数,甚至是 CPU 个数的几倍;b 也持续有值,甚至是 CPU 的 2~3 倍,并且 id 也持续小于 50%,wa 也比较小,这就表明 CPU 负荷很严重。

  1. SYSTEM
  • in:每秒产生的中断次数。
  • cs:每秒产生的上下文切换次数。

  incs 这两个值越大,由内核消耗的 CPU 时间会越大。

  1. CPU
  • us:用户进程消耗的 CPU 时间百分比。us 的值比较高时,说明用户进程消耗的 CPU 时间多,在服务高峰期持续大于 50~60,是可以接受的范围,但是如果长期超过 50% ,就需要考虑优化程序算法。
  • sy:内核进程消耗的 CPU 时间百分比。sy 的值比较高时,说明系统内核消耗的 CPU 资源多,对于这种非良性表现需要检查原因。
  • wa:IO 等待消耗的 CPU 时间百分比。wa 的值比较高时,说明 IO 等待比较严重,可能是由于磁盘大量做随机访问造成的,也有可能是磁盘出现了瓶颈(块操作)。
  • id:CPU 处于空闲状态时间百分比,如果空闲时间 (cpu id) 持续为 0 并且系统时间 (cpu sy) 是用户时间的两倍 (cpu us) ,系统则面临着 CPU 资源的短缺,如果在服务高峰期持续小于 50,是可以接受的范围。

  除此之外,还可以用以下方法分析 CPU 性能:

  观察 CPU 的使用率和 CPU 运行进程队列长度及负载,可以使用命令:sar -u 1 5sar -q 1 5
  查看具体是什么进程在消耗 CPU,可以使用命令:topps -auxw|more
  知道了某个进程消耗大量的 CPU,想了解该进程详细内容,可以使用命令:strace

3.4 磁盘 I/O 性能诊断

3.4.1 相关命令

3.4.1.1 iostat命令

  iostat 是 Linux 最常见的磁盘 I/O 监控工具。基本用法如下:

[root@VM-8-6-centos ~]$ iostat -d -x -k 1 5
Linux 3.10.0-1160.119.1.el7.x86_64 (VM-8-6-centos) 	2024年09月16日 	_x86_64_	(2 CPU)

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
vda               0.00     8.21    0.12    7.16     5.54    75.54    22.27     0.01    0.78    1.76    0.77   0.50   0.36
scd0              0.00     0.00    0.00    0.00     0.01     0.00    27.44     0.00    0.50    0.50    0.00   0.47   0.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
vda               0.00     0.00    1.00    0.00     8.00     0.00    16.00     0.00    1.00    1.00    0.00   1.00   0.10
scd0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
vda               0.00    20.00    0.00    9.00     0.00   128.00    28.44     0.01    0.56    0.00    0.56   0.67   0.60
scd0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
vda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
scd0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
vda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
scd0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00

  参数含义:

  • -d:显示设备(磁盘)使用状态。
  • -k:某些使用 block 为单位的列强制使用 Kilobytes 为单位。
  • 1 5:数据显示每隔 1 秒刷新一次,共显示 5 次。
  • -x:获得更多统计信息。

  对上述结果的解读:

  • rrqm/s:每秒进行 merge(多个 IO 的合并)读操作的数量。
  • wrqm/s:每秒进行 merge(多个 IO 的合并)写操作的数量。
  • rsec/s:每秒读取的扇区数。
  • wsec/s:每秒写入的扇区数。
  • rKB/s:每秒读多少 k 字节,在 kernel 2.4 以上,rkB/s=2×rsec/s,因为一个扇区为 512 bytes。
  • wKB/s:每秒写多少 k 字节,在 kernel 2.4 以上,wkB/s=2×wsec/s,因为一个扇区为 512 bytes。
  • avgrq-sz:平均请求扇区的大小。
  • avgqu-sz:是平均请求队列的长度,队列长度越短越好。
  • await:每一个 IO 请求的处理的平均时间(单位是微秒毫秒)。这里可以理解为 IO 的响应时间,一般地系统 IO 响应时间应该低于 5 ms,如果大于 10 ms 就比较大了。这个时间包括了队列时间和服务时间,一般情况下,await 大于 svctm,它们的差值越小,则说明队列时间越短,反之差值越大,队列时间越长,说明系统出了问题。
  • svctm:表示平均每次设备 I/O 操作的服务时间(以毫秒为单位)。如果 svctm 的值与 await 很接近,表示几乎没有 I/O 等待,磁盘性能很好,如果 await 的值远高于 svctm 的值,则表示 I/O 队列等待太长,系统上运行的应用程序将变慢。
  • %util:在统计时间内所有处理 IO 时间,除以总共统计时间,该参数表示设备的繁忙程度,如果该参数是 100% 表示设备已经接近满负荷运行了(如果是多磁盘,即使 %util 是 100%,因为磁盘的并发能力,所以磁盘使用不一定到了瓶颈)。
3.4.1.2 iotop命令

  iotop 是一个用 python 编写的类似 top 界面的磁盘 I/O 监控工具。使用前需要先安装 iotop。安装命令如下:

yum install -y iotop

  系统中输入 iotop 命令之后显示结果如下所示:

Total DISK READ :	0.00 B/s | Total DISK WRITE :      22.91 K/s
Actual DISK READ:	0.00 B/s | Actual DISK WRITE:       7.64 K/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND                                                                               
  689 be/4 lighthou    0.00 B/s    3.82 K/s  0.00 %  0.05 % dmserver /opt/dmdbms/data/DAMENG/dm.ini -noconsole [dm_chkpnt_thd]
  690 be/4 lighthou    0.00 B/s    3.82 K/s  0.00 %  0.05 % dmserver /opt/dmdbms/data/DAMENG/dm.ini -noconsole [dm_redolog_thd]
 8624 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.01 % [kworker/0:0]
  845 be/4 lighthou    0.00 B/s    7.64 K/s  0.00 %  0.00 % dmserver /opt/dmdbms/data/DAMENG/dm.ini -noconsole [dm_sched_thd]
 2958 be/4 root        0.00 B/s    3.82 K/s  0.00 %  0.00 % barad_agent
13242 be/4 root        0.00 B/s    3.82 K/s  0.00 %  0.00 % dockerd -H fd:// --containerd=/run/containerd/containerd.sock
    1 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % systemd --switched-root --system --deserialize 22
    2 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kthreadd]
27307 be/4 postfix     0.00 B/s    0.00 B/s  0.00 %  0.00 % pickup -l -t unix -u
    4 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kworker/0:0H]
    6 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/0]
    7 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/0]
    8 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [rcu_bh]
    9 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [rcu_sched]
   10 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [lru-add-drain]
   11 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [watchdog/0]
   12 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [watchdog/1]
   13 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/1]
   14 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/1]
31405 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % gsd-a11y-settings [gdbus]
   16 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kworker/1:0H]
   18 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kdevtmpfs]
   19 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [netns]
   20 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [khungtaskd]
   21 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [writeback]
28694 be/4 dmdba       0.00 B/s    0.00 B/s  0.00 %  0.00 % ibus-engine-libpinyin --ibus [gmain]
   23 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [bioset]
   24 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [bioset]
   25 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [bioset]
   26 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kblockd]
   27 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [md]
   28 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [edac-poller]
   29 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [watchdogd]
   36 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kswap

  结果解读:

  • DISK READ 和 DISK WRITE 字段:代表块设备在采样时间内的 I/O 带宽。
  • SWAPIN 和 IO 字段:表示当前进程或线程花费在页面换入和等待 I/O 的时间。
  • PRIO 字段:表示 I/O 优先级。
  • Total DISK READ 和 Total DISK WRITE 字段:表示总的 I/O 读写情况。

3.4.2 分析方法

  使用 vmstat 命令对磁盘 I/O 性能进行分析:

[root@VM-8-6-centos ~]$ vmstat 1 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 210396 191996 3605016    0    0     3    38   10    8  1  1 98  0  0
 0  0      0 210016 191996 3605016    0    0     0   116 1278 2273  1  1 98  0  0
 0  0      0 209484 191996 3605012    0    0     0     0 1293 2348  1  1 98  0  0
 0  0      0 210536 191996 3605012    0    0     0     0 1089 1988  1  1 99  0  0
 0  0      0 210596 191996 3605020    0    0     0     0 1469 2949  2  2 96  0  0

  如果 b 的值为 2~3 倍 CPU 数量,bi 和 bo 的值很大(有时 bi 和 bo 值很小,但 in 和 cs 很大,也会引起磁盘 IO 负载重),wa 的值持续很高,如高于 40,id 也持续高于 70,这些现象都表明系统的 IO 可能出现性能问题。
  可以进一步通过 iostat 命令分析,如下所示:

[root@VM-8-6-centos ~]# iostat -x 1 5
Linux 3.10.0-1160.119.1.el7.x86_64 (VM-8-6-centos) 	2024年09月16日 	_x86_64_	(2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.74    0.00    0.71    0.13    0.00   98.42

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
vda               0.00     8.21    0.12    7.17     5.55    75.54    22.28     0.01    0.78    1.76    0.77   0.50   0.36
scd0              0.00     0.00    0.00    0.00     0.01     0.00    27.44     0.00    0.50    0.50    0.00   0.47   0.00

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.50    0.00    0.50    0.00    0.00   98.99

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
vda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
scd0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.99    0.00    0.99    0.50    0.00   97.52

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
vda               0.00    13.00    0.00    2.00     0.00    60.00    60.00     0.00    1.00    0.00    1.00   1.50   0.30
scd0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.51    0.00    0.00    0.00    0.00   99.49

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
vda               0.00    11.00    0.00    9.00     0.00    92.00    20.44     0.01    0.56    0.00    0.56   0.67   0.60
scd0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.50    0.00    1.01    0.00    0.00   98.49

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
vda               0.00     0.00    0.00    1.00     0.00     4.00     8.00     0.00    0.00    0.00    0.00   1.00   0.10
scd0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00

  结果分析:

  1. 检查 %util(服务 IO 的时间占总时间的百分比),如果这个值接近 100%,表示 IO 的请求很多(表示任务服务的所有时间几乎都用在 IO 上),这种现象表明磁盘 IO 性能出现瓶颈。
  2. 检查 await(表示每次 IO 设备等待时间)和 svctm(表示每次 IO 设备服务时间,一般性能越好的磁盘,这个值越小)。
    • 如果 svctm 接近 await ,说明 IO 几乎没有等待,每个 IO 设备都得到及时的响应。
    • 如果 svctm 远小于 await ,说明 IO 等待队列可能很长,IO 的得到服务的时间将延长(排队 + 服务时间)。
  1. avgqu-sz:表示 IO 排队的现象,如果排队过长会影响 IO 的响应时间。
  2. r/s+w/s:可以计算当前系统的 iops(可以结合硬盘的测试或者硬件参数来衡量是否超过磁盘的 iops 最大值)。

  通过 iostat 了解到如果磁盘 I/O 出现性能瓶颈,可以借助 pidstat ,定位出导致瓶颈的进程,分析进程的 I/O 行为,结合应用程序的原理,分析这些 I/O 的来源。

3.5 网络性能诊断

3.5.1 意义

  网络性能对数据库也有很大的影响,数据库服务器和 Web 服务器之间会进行网络传输,网络延迟和带宽大小都是影响因素。

3.5.2 相关命令

3.5.2.1 ifconfig命令

  ifconfig 是 linux 中用于显示或配置网络设备(网络接口卡)的命令。在某系统中输入此命令后显示结果如下所示:

[root@VM-8-6-centos ~]# ifconfig
br-870c978be774: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.16.1.1  netmask 255.255.255.0  broadcast 172.16.1.255
        inet6 fe80::42:22ff:fe63:2d86  prefixlen 64  scopeid 0x20<link>
        ether 02:42:22:63:2d:86  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

br-f0c46f65d5ee: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.1  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::42:d1ff:fe12:4809  prefixlen 64  scopeid 0x20<link>
        ether 02:42:d1:12:48:09  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.2.8.6  netmask 255.255.252.0  broadcast 10.2.11.255
        inet6 fe80::5054:ff:fe43:ce25  prefixlen 64  scopeid 0x20<link>
        ether 52:54:00:43:ce:25  txqueuelen 1000  (Ethernet)
        RX packets 10699769  bytes 2419107627 (2.2 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 9807517  bytes 2090254060 (1.9 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 5102188  bytes 400704536 (382.1 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 5102188  bytes 400704536 (382.1 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

veth2cf7fc1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::8428:12ff:fe08:b140  prefixlen 64  scopeid 0x20<link>
        ether 86:28:12:08:b1:40  txqueuelen 0  (Ethernet)
        RX packets 183317  bytes 11978302 (11.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 183311  bytes 261140845 (249.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:9f:38:bd  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

  以随意一个网卡为例解释其中部分信息的含义:

  • 第一行中的 “UP” 表示接口已启用
  • “RUNNING” 表示接口在工作中
  • “mtu 1500” 表示最大传输单元为 1500 字节
  • 第二行中的 “inet” 表示 ip 地址

  利用 ifconfig 命令可以对网络信息有一个基本的了解,在此基础上可以利用 ethtool 命令查询网络传输速率。

3.5.2.2 ethtool命令

  使用 ethtool 命令可以查看指定网口对应的网络传输速率。执行示例:

[root@VM-8-6-centos ~]$ ethtool vethdb38401
Settings for vethdb38401:
	Supported ports: [ ]
	Supported link modes:   Not reported
	Supported pause frame use: No
	Supports auto-negotiation: No
	Supported FEC modes: Not reported
	Advertised link modes:  Not reported
	Advertised pause frame use: No
	Advertised auto-negotiation: No
	Advertised FEC modes: Not reported
	Speed: 10000Mb/s
	Duplex: Full
	Port: Twisted Pair
	PHYAD: 0
	Transceiver: internal
	Auto-negotiation: off
	MDI-X: Unknown
	Link detected: yes

  结果解读:

  • Supported link modes 为网卡支持的连接模式。
  • speed 和 duplex 字段为当前网络速率和模式。

3.5.3 分析方法

3.5.3.1 使用 ping 命令测试网络的连通性和响应时间。

  ping 发送 ICMP echo 数据包来探测网络的连通性,除了能直观地看出网络的连通状况外,还能获得本次连接的往返时间(RTT 时间),丢包情况,以及访问的域名所对应的 IP 地址(使用 DNS 域名解析)。

[root@VM-8-6-centos ~]$ ping -c 4 baidu.com
ping -c 4 baidu.com 
PING baidu.com (110.242.68.66): 56 data bytes
64 bytes from 110.242.68.66: icmp_seq=0 ttl=54 time=11.634 ms
64 bytes from 110.242.68.66: icmp_seq=1 ttl=54 time=12.085 ms
64 bytes from 110.242.68.66: icmp_seq=2 ttl=54 time=12.357 ms
64 bytes from 110.242.68.66: icmp_seq=3 ttl=54 time=11.679 ms

--- baidu.com ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 11.634/11.939/12.357/0.299 ms

  解析到 baidu 的一台服务器 IP 地址为 110.242.68.66。RTT 时间的最小、平均、最大和算术平均差分别是 11.634ms、11.939ms、12.357ms 和 0.299ms。

3.5.3.2 使用 sar 命令测试网络带宽

  sar 命令使用 -n 选项可以汇报网络相关信息。

[root@VM-8-6-centos ~]# sar -n DEV 1 3
Linux 3.10.0-1160.119.1.el7.x86_64 (VM-8-6-centos) 	2024年09月16日 	_x86_64_	(2 CPU)

02时00分31秒     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
02时00分32秒 vethbc88527      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02时00分32秒 veth92841cd      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02时00分32秒 vethe6bec48      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02时00分32秒 vethdb38401      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02时00分32秒 vethd524e00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02时00分32秒 veth8e5b4f8      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02时00分32秒      eth0      3.00      1.00      0.18      0.09      0.00      0.00      0.00
02时00分32秒        lo     14.00     14.00      1.03      1.03      0.00      0.00      0.00
02时00分32秒 virbr0-nic      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02时00分32秒    virbr0      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02时00分32秒 br-870c978be774      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02时00分32秒 br-f0c46f65d5ee      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02时00分32秒 vethe0e5936      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02时00分32秒 veth4d16748      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02时00分32秒 docker_gwbridge      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02时00分32秒 veth2cf7fc1      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02时00分32秒 veth851d8eb      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02时00分32秒   docker0      0.00      0.00      0.00      0.00      0.00      0.00      0.00

02时00分32秒     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
02时00分33秒 vethbc88527      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02时00分33秒 veth92841cd      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02时00分33秒 vethe6bec48      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02时00分33秒 vethdb38401      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02时00分33秒 vethd524e00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02时00分33秒 veth8e5b4f8      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02时00分33秒      eth0     10.00     11.00      0.76      3.69      0.00      0.00      0.00
02时00分33秒        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02时00分33秒 virbr0-nic      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02时00分33秒    virbr0      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02时00分33秒 br-870c978be774      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02时00分33秒 br-f0c46f65d5ee      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02时00分33秒 vethe0e5936      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02时00分33秒 veth4d16748      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02时00分33秒 docker_gwbridge      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02时00分33秒 veth2cf7fc1      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02时00分33秒 veth851d8eb      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02时00分33秒   docker0      0.00      0.00      0.00      0.00      0.00      0.00      0.00

02时00分33秒     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
02时00分34秒 vethbc88527      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02时00分34秒 veth92841cd      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02时00分34秒 vethe6bec48      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02时00分34秒 vethdb38401      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02时00分34秒 vethd524e00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02时00分34秒 veth8e5b4f8      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02时00分34秒      eth0      2.00      3.00      0.14      2.04      0.00      0.00      0.00
02时00分34秒        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02时00分34秒 virbr0-nic      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02时00分34秒    virbr0      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02时00分34秒 br-870c978be774      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02时00分34秒 br-f0c46f65d5ee      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02时00分34秒 vethe0e5936      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02时00分34秒 veth4d16748      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02时00分34秒 docker_gwbridge      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02时00分34秒 veth2cf7fc1      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02时00分34秒 veth851d8eb      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02时00分34秒   docker0      0.00      0.00      0.00      0.00      0.00      0.00      0.00

????:           IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
????:       vethbc88527      0.00      0.00      0.00      0.00      0.00      0.00      0.00
????:       veth92841cd      0.00      0.00      0.00      0.00      0.00      0.00      0.00
????:       vethe6bec48      0.00      0.00      0.00      0.00      0.00      0.00      0.00
????:       vethdb38401      0.00      0.00      0.00      0.00      0.00      0.00      0.00
????:       vethd524e00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
????:       veth8e5b4f8      0.00      0.00      0.00      0.00      0.00      0.00      0.00
????:            eth0      5.00      5.00      0.36      1.94      0.00      0.00      0.00
????:              lo      4.67      4.67      0.34      0.34      0.00      0.00      0.00
????:       virbr0-nic      0.00      0.00      0.00      0.00      0.00      0.00      0.00
????:          virbr0      0.00      0.00      0.00      0.00      0.00      0.00      0.00
????:       br-870c978be774      0.00      0.00      0.00      0.00      0.00      0.00      0.00
????:       br-f0c46f65d5ee      0.00      0.00      0.00      0.00      0.00      0.00      0.00
????:       vethe0e5936      0.00      0.00      0.00      0.00      0.00      0.00      0.00
????:       veth4d16748      0.00      0.00      0.00      0.00      0.00      0.00      0.00
????:       docker_gwbridge      0.00      0.00      0.00      0.00      0.00      0.00      0.00
????:       veth2cf7fc1      0.00      0.00      0.00      0.00      0.00      0.00      0.00
????:       veth851d8eb      0.00      0.00      0.00      0.00      0.00      0.00      0.00
????:         docker0      0.00      0.00      0.00      0.00      0.00      0.00      0.00

  在上图中可以看到:

  • 每秒钟接收到的包数目
  • 每秒钟发送出去的包数目
  • 每秒钟接收到的字节数
  • 每秒钟发送出去的字节数
  • 每秒钟接收到的压缩包数目
  • 每秒钟接收到的多播包的包数目

  通过这些参数可以对网络带宽有更好的了解。

4 动态视图诊断

  利用动态视图可以便捷查询数据库相关信息,并定位数据库性能问题。以下介绍 4 种动态性能视图的诊断方法,分别是查询活动会话数、查询耗时超过 2 秒的 SQL、查询锁和查询阻塞。

  1. 查询活动会话数,活动会话数量达到一定程度后会对数据库性能造成影响。
select 
  (select count(*) 
   from v$sessions 
    where state='ACTIVE' and sess_id != sessid()
  ) act_ses, 
  (select count(*) from v$sessions) tot_ses;
  1. 查询已执行超过 2 秒的活动 SQL。
select  * 
  from ( SELECT sess_id, 
               sql_text, 
               state, 
               datediff(ss,last_recv_time,sysdate) Y_EXETIME, 
               to_char(SF_GET_SESSION_SQL(SESS_ID)) fullsql, 
               clnt_ip 
          FROM V$SESSIONS 
         WHERE STATE='ACTIVE')
 where Y_EXETIME>=2;
  1. 查询锁
SELECT O.NAME,L.* FROM V$LOCK L,SYSOBJECTS O WHERE L.TABLE_ID=O.ID AND BLOCKED=1;
  1. 查询阻塞
WITH LOCKS
     AS (SELECT O.NAME,L.*,S.SESS_ID,S.SQL_TEXT,S.CLNT_IP,S.LAST_SEND_TIME
           FROM V$LOCK L, SYSOBJECTS O, V$SESSIONS S
          WHERE L.TABLE_ID = O.ID AND L.TRX_ID = S.TRX_ID),
     LOCK_TR
     AS (SELECT TRX_ID WT_TRXID, TID BLK_TRXID
           FROM LOCKS
          WHERE BLOCKED = 1),
     RES
     AS (SELECT SYSDATE STATTIME,T1.NAME,T1.SESS_ID WT_SESSID,S.WT_TRXID,
                T2.SESS_ID BLK_SESSID,S.BLK_TRXID,T2.CLNT_IP,
                SF_GET_SESSION_SQL (T1.SESS_ID) FULSQL,
                DATEDIFF (SS, T1.LAST_SEND_TIME, SYSDATE) SS,
                T1.SQL_TEXT WT_SQL
           FROM LOCK_TR S, LOCKS T1, LOCKS T2
          WHERE     T1.LTYPE = 'OBJECT'
                AND T1.TABLE_ID <> 0
                AND T2.LTYPE = 'OBJECT'
                AND T2.TABLE_ID <> 0
                AND S.WT_TRXID = T1.TRX_ID
                AND S.BLK_TRXID = T2.TRX_ID)
SELECT DISTINCT WT_SQL,CLNT_IP,SS,WT_TRXID,BLK_TRXID
  FROM RES;

5 跟踪日志诊断

  跟踪日志文件是一个纯文本文件,以 ‘dmsql_实例名_日期_时间命名’,默认生成在 DM 安装目录的 log 子目录下。跟踪日志内容包含系统各会话执行的 SQL 语句、参数信息、错误信息、执行时间等。跟踪日志主要用于分析错误和分析性能问题,基于跟踪日志可以对系统运行状态进行分析。跟踪日志配置方式如下:

  1. 配置 dm.ini 文件,设置 SVR_LOG = 1 以启用 sqllog.ini 配置,该参数为动态参数,可通过调用数据库函数直接修改:
SP_SET_PARA_VALUE(1,'SVR_LOG',1);
  1. 配置数据文件目录下的 sqllog.ini 文件。注意⚠️,为避免记录 SQL log 对服务器产生较大的影响,可以配置异步日志刷新(参数 ASYNC_FLUSH 设置为1)。:
[dmdba@localhost DAMENG]$ 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           =
  1. 如果对 sqllog.ini 进行了修改,可通过调用以下函数即时生效,无需重启数据库:
SP_REFRESH_SVR_LOG_CONFIG();
  1. sqllog.ini 文件配置成功后可在 dmsql 指定目录下生成 dmsql 开头的 log 日志文件;可以通过正则表达式在 dmsql 日志文件中查找执行时间超过一定阈值的 SQL 语句。例如:查找执行时间超过 10 秒的 SQL 语句。
[1-9][0-9][0-9][0-9][0-9](ms)

  如需进行更为系统全面的分析,可使用 DMLOG 工具对 SQL 进行分类汇总。

6 接口日志诊断

  达梦提供各种接口日志,包括 DPI/DCI 日志、ODBC 日志和 JDBC 日志。通过这些日志可以查看报错信息,更好地对问题进行诊断,排查错误。接口日志的开启方法请参考实例状态监控-接口日志
  在接口的 URL 连接串中,可以添加日志相关属性。下表所展示的 JDBC 连接串日志相关属性。更多接口连接串属性请参考达梦安装目录下的 doc 文件夹的《DM8 程序员手册》。

表6-1 JDBC 连接串日志相关属性

属性说明是否必须设置
logDir日志等其他一些 JDBC 过程文件生成目录,默认为 jvm 当前工作目录;
logLevel生成日志的级别,日志从低到高依次如下(off:不记录;error:只记录错误信息;warn:记录警告信息;sql:记录sql 执行信息;info:记录全部执行信息;all:记录全部),高级别同时记录低级别的信息;默认 off;
logFlushFreq日志刷新盘频率;单位 s,有效值范围 0~2147483647;默认 60;
statEnable是否启用状态监控;取值 1/0 或 true/false;默认 false;
statDir状态监控信息以文本文件形式输出的目录,默认为 jvm 当前工作目录;
statFlushFreq状态监控统计信息写文件刷盘频率;单位 s,有效值范围 0~2147483647;0 表示不写文件;默认 10;
statSlowSqlCount统计慢 sql top 行数;有效值范围 0~1000;默认 100;
statHighFreqSqlCount统计高频 sql top 行数;有效值范围 0~1000;默认 100;

  在 jdbc 日志中可以查看接口连接信息。若接口日志中出现异常,可联系相关技术人员进行错误分析。

  社区地址:https://eco.dameng.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值