当前位置:   article > 正文

open Gauss 数据库-03 openGauss数据库维护管理指导手册_opengauss数据库-3.数据库管理

opengauss数据库-3.数据库管理

发文章是为了证明自己真的掌握了一个知识,同时给他人带来帮助,如有问题,欢迎指正,祝大家万事胜意!

目录

前言

openGauss数据库维护管理

1 操作系统参数检查

1.1 实验介绍

1.2 场景设置及操作步骤

2 openGauss 运行健康状态检查

2.1 实验介绍

2.2 场景设置及操作步骤

3 数据库性能检查

3.1 实验介绍

3.2 通过 gs_checkperf 工具来检查数据库性能

3.3 通过 EXPLAIN 进行 SQL 语句优化

4 日志检查

4.1 实验介绍

4.2 通过 gs_collector 工具来收集日志信息

5 最大连接数设置

5.1 实验介绍

5.2 场景设置及操作步骤

6 例行表、索引的维护

6.1 实验介绍

6.2 场景设置及操作步骤

前言

本实验主要内容为操作系统参数检查、 openGauss 健康状态检查、数据库性能检查、日志检查
和清理、时间一致性检查、应用连接数检查、例行维护表等
我的环境:
设备名称设备型号软件版本
虚拟机VMwareVMware-workstation-full-17.5.1
操作系统openEuler   openEuler 22.3LTS
数据库openGauss  openGauss 5.0.0

 需要的工具,大家不用现在下,后面用到了再下也可以,如果需要相关文件,可以评论,其实大多数都是可以去官网下的哈,因为我只能通过网盘给大家,文件又有点大,网盘的速度大家都是清楚的哈哈,所以还是推荐大家去官网,如果实在找不到可以找我

openGauss数据库维护管理

1 操作系统参数检查

1.1 实验介绍

gs_checkos 工具用来帮助检查操作系统、控制参数、磁盘配置等内容,并对系统控制参数、 I/O
配置、网络配置和 THP 服务等信息进行配置。
本实验主要是通过 gs_checkos 工具来检查操作系统参数设置是否合理。先进行场景设置,然后
根据检查结果进行参数调整。

1.2 场景设置及操作步骤

 步骤 1 ROOT 用户登录装有 openGauss 数据库服务的操作系统,登录后信息如下:

  1. Welcome to 5.10.0-153.12.0.92.oe2203sp2.x86_64
  2. System information as of time: 20240325日 星期一 19:09:30 CST
  3. System load: 0.02
  4. Processes: 195
  5. Memory used: 39.3%
  6. Swap used: 13.3%
  7. Usage On: 25%
  8. IP address: 192.168.28.131
  9. Users online: 1

 步骤 2 ROOT 用户下执行 gs_checkos 先对系统参数进行检查。

  1. [root@node0 ~]# gs_checkos -i A
  2. Checking items:
  3. A1. [ OS version status ] : Normal
  4. A2. [ Kernel version status ] : Normal
  5. A3. [ Unicode status ] : Normal
  6. A4. [ Time zone status ] : Normal
  7. A5. [ Swap memory status ] : Warning
  8. A6. [ System control parameters status ] : Warning
  9. A7. [ File system configuration status ] : Normal
  10. A8. [ Disk configuration status ] : Normal
  11. A9. [ Pre-read block size status ] : Normal
  12. BondMode Null
  13. A11.[ Network card configuration status ] : Normal
  14. A12.[ Time consistency status ] : Warning
  15. A13.[ Firewall service status ] : Normal
  16. A14.[ THP service status ] : Normal
  17. Total numbers:13. Abnormal numbers:0. Warning numbers:3.

2 openGauss 运行健康状态检查

2.1 实验介绍

gs_check 能够帮助用户在 openGauss 运行过程中,全量的检查 openGauss 运行环境,操作系
统环境,网络环境及数据库执行环境,也有助于在 openGauss 重大操作之前对各类环境进行全
面检查,有效保证操作执行成功。
本实验主要是通过 gs_check 工具来检查 openGauss 数据库运行状态。先进行场景设置,然后
根据检查结果进行数据库调整。

2.2 场景设置及操作步骤

步骤 1 ROOT 用户登录装有 openGauss 数据库服务的操作系统然后用 su – omm 命令切换至
OMM 用户环境,登录后信息如下。
  1. [root@node0 ~]# su - omm
  2. Last login: Mon Mar 25 18:47:31 CST 2024 on pts/0
  3. Welcome to 5.10.0-153.12.0.92.oe2203sp2.x86_64
  4. System information as of time: 20240325日 星期一 19:31:35 CST
  5. System load: 0.30
  6. Processes: 195
  7. Memory used: 39.0%
  8. Swap used: 14.3%
  9. Usage On: 25%
  10. IP address: 192.168.28.131
  11. Users online: 1
  12. To run a command as administrator(user "root"),use "sudo <command>".
步骤 2 确认 openGauss 数据库服务是否启动。
  1. [omm@node0 ~]$ gs_om -t status
  2. -----------------------------------------------------------------------
  3. cluster_name : dbCluster
  4. cluster_state : Normal
  5. redistributing : No
  6. -----------------------------------------------------------------------
cluster_state : Normal 表示已启动,可以正常使用。如果状态为非 Normal 表示不可用
为了实验场景设置,如果数据库服务已经启动,请执行步骤 3 先关闭服务。
步骤 3 关闭 openGauss 数据库服务。
  1. [omm@node0 ~]$ gs_om -t stop
  2. Stopping cluster.
  3. =========================================
  4. Successfully stopped cluster.
  5. =========================================
  6. End stop cluster.
步骤 4 检查 openGauss 实例连接。
  1. [omm@node0 ~]$ gs_check -i CheckDBConnection -L
  2. 2024-03-25 19:37:53 [NAM] CheckDBConnection
  3. 2024-03-25 19:37:53 [STD] 检查能否连接数据库,如果连接成功则检查项通过,否则检查项不通过
  4. 2024-03-25 19:37:53 [RST] NG
  5. The database can not be connected.
  6. 2024-03-25 19:37:53 [RAW]
说明:
CheckDBConnection...........................NG 表示连接检查项无用;
The database can not be connected. 表示实例不能连接;
Failed. All check items run completed. Total:1 NG:1 表示共检查 1 项并且检查结果未通过。

步骤 5 启动 openGauss 数据库服务。

  1. [omm@node0 ~]$ gs_om -t start
  2. Starting cluster.
  3. =========================================
  4. [SUCCESS] node0
  5. ......
  6. =========================================
  7. Successfully started.
步骤 6 确认 openGauss 数据库服务已启动。
  1. [omm@node0 ~]$ gs_om -t status;
  2. -----------------------------------------------------------------------
  3. cluster_name : dbCluster
  4. cluster_state : Normal
  5. redistributing : No
  6. -----------------------------------------------------------------------
步骤 7 再次检查 openGauss 实例连接。
  1. [omm@node0 ~]$ gs_check -i CheckDBConnection -L
  2. 2024-03-25 19:46:27 [NAM] CheckDBConnection
  3. 2024-03-25 19:46:27 [STD] 检查能否连接数据库,如果连接成功则检查项通过,否则检查项不通过
  4. 2024-03-25 19:46:27 [RST] OK
  5. The database connection is normal.
  6. 2024-03-25 19:46:27 [RAW]
  7. source '/home/omm/.bashrc' && gsql -m -d postgres -p 15400 -c 'select pg_sleep(1);'
说明:
CheckDBConnection...........................OK 表示连接检查项正常;
Success. All check items run completed. Total:1 Success:1 表示共检查 1 项并且检查结
果成功。
openGauss 数据库运行健康状态检查实验结束

3 数据库性能检查

3.1 实验介绍

openGauss 提供了 gs_checkperf 工具来帮助用户了解 openGauss 的负载情况。
本实验主要是通过 gs_checkperf 工具来检查 openGauss 数据库性能以及通过 EXPLAIN 来进行
SQL 语句优化。

3.2 通过 gs_checkperf 工具来检查数据库性能

说明:
gs_checkperf 可以对以下级别进行检查:
  openGauss 级别(主机 CPU 占用率、 Gauss CPU 占用率、 I/O 使用情况等)、
  节点级别( CPU 使用情况、内存使用情况、 I/O 使用情况)、
  会话 / 进程级别( CPU 使用情况、内存使用情况、 I/O 使用情况)、
  SSD 性能(写入、读取性能)
其中检查 SSD 性能要用 root 用户执行,检查 openGauss 性能要用 openGauss 安装用户执行
本实验为检查 openGauss 性能。
步骤 1 ROOT 用户登录装有 openGauss 数据库服务的操作系统然后用 su – omm 命令切换至
OMM 用户环境,登录后信息如下。
  1. [root@node0 ~]# su - omm
  2. Last login: Mon Mar 25 18:47:31 CST 2024 on pts/0
  3. Welcome to 5.10.0-153.12.0.92.oe2203sp2.x86_64
  4. System information as of time: 20240325日 星期一 19:31:35 CST
  5. System load: 0.30
  6. Processes: 195
  7. Memory used: 39.0%
  8. Swap used: 14.3%
  9. Usage On: 25%
  10. IP address: 192.168.28.131
  11. Users online: 1
  12. To run a command as administrator(user "root"),use "sudo <command>".
步骤 2 先启动数据库服务,再用 gs_checkperf 检查下,再使用 gsql 客户端以管理员用户身份连接
postgres 数据库,假设端口号为 15400
先启动数据库服务。
  1. [omm@node0 ~]$ gs_om -t start
  2. Starting cluster.
  3. =========================================
  4. [SUCCESS] node0:
  5. [2024-03-25 19:53:25.112][42128][][gs_ctl]: gs_ctl started,datadir is /opt/huawei/install/data/dn
  6. [2024-03-25 19:53:25.129][42128][][gs_ctl]: another server might be running; Please use the restart command
  7. =========================================
  8. Successfully started.
gs_checkperf 检查下。
  1. [omm@node0 ~]$ gs_checkperf
  2. Cluster statistics information:
  3. Host CPU busy time ratio : 1.79 %
  4. MPPDB CPU time % in busy time : 8.68 %
  5. Shared Buffer Hit ratio : 99.56 %
  6. In-memory sort ratio : 0
  7. Physical Reads : 759
  8. Physical Writes : 124
  9. DB size : 50 MB
  10. Total Physical writes : 124
  11. Active SQL count : 4
  12. Session count : 8
然后连接 postgres 数据库。
  1. [omm@node0 ~]$ gsql -d postgres -p 15400 -r
  2. gsql ((openGauss 5.0.0 build a07d57c3) compiled at 2023-03-29 03:37:13 commit 0 last mr )
  3. Non-SSL connection (SSL connection is recommended when requiring high-security)
  4. Type "help" for help.
步骤 3 PMK 模式下的表进行统计信息收集。
  1. openGauss=# analyze pmk.pmk_configuration;
  2. ANALYZE
  3. openGauss=# analyze pmk.pmk_meta_data;
  4. ANALYZE
  5. openGauss=# analyze pmk.pmk_snapshot;
  6. ANALYZE
  7. openGauss=# analyze pmk.pmk_snapshot_datanode_stat;
  8. ANALYZE
gs_checkperf 工具的监控信息依赖于 pmk 模式下的表的数据,如果 pmk 模式下的表未执
analyze 操作,则可能导致 gs_checkperf 工具执行失败。
步骤 4 执行简要性能检查。
\q 先退出 postgres 数据库,然后在操作系统用户 omm 环境下去执行 gs_checkperf 检查
工具,具体如下:
  1. openGauss=# \q
  2. [omm@node0 ~]$ gs_checkperf
  3. Cluster statistics information:
  4. Host CPU busy time ratio : 2.02 %
  5. MPPDB CPU time % in busy time : 16.25 %
  6. Shared Buffer Hit ratio : 99.67 %
  7. In-memory sort ratio : 0
  8. Physical Reads : 777
  9. Physical Writes : 335
  10. DB size : 51 MB
  11. Total Physical writes : 335
  12. Active SQL count : 4
  13. Session count : 8
步骤 5 执行详细性能检查。
  1. [omm@node0 ~]$ gs_checkperf --detail
  2. Cluster statistics information:
  3. Host CPU usage rate:
  4. Host total CPU time : 26998790.000 Jiffies
  5. Host CPU busy time : 594830.000 Jiffies
  6. Host CPU iowait time : 5920.000 Jiffies
  7. Host CPU busy time ratio : 2.20 %
  8. Host CPU iowait time ratio : .02 %
  9. MPPDB CPU usage rate:
  10. MPPDB CPU time % in busy time : 16.57 %
  11. MPPDB CPU time % in total time : .37 %
  12. Shared buffer hit rate:
  13. Shared Buffer Reads : 1232
  14. Shared Buffer Hits : 430218
  15. Shared Buffer Hit ratio : 99.71 %
  16. In memory sort rate:
  17. In-memory sort count : 0
  18. In-disk sort count : 0
  19. In-memory sort ratio : 0
  20. I/O usage:
  21. Number of files : 121
  22. Physical Reads : 785
  23. Physical Writes : 492
  24. Read Time : 168726 ms
  25. Write Time : 5694 ms
  26. Disk usage:
  27. DB size : 51 MB
  28. Total Physical writes : 492
  29. Average Physical write : 86406.74
  30. Maximum Physical write : 492
  31. Activity statistics:
  32. Active SQL count : 4
  33. Session count : 8
  34. Node statistics information:
  35. dn_6001:
  36. MPPDB CPU Time : 98590 Jiffies
  37. Host CPU Busy Time : 594830 Jiffies
  38. Host CPU Total Time : 26998790 Jiffies
  39. MPPDB CPU Time % in Busy Time : 16.57 %
  40. MPPDB CPU Time % in Total Time : .37 %
  41. Physical memory : 1497370624 Bytes
  42. DB Memory usage : 5200146432 Bytes
  43. Shared buffer size : 284164096 Bytes
  44. Shared buffer hit ratio : 99.71 %
  45. Sorts in memory : 0
  46. Sorts in disk : 0
  47. In-memory sort ratio : 0
  48. Number of files : 121
  49. Physical Reads : 785
  50. Physical Writes : 492
  51. Read Time : 168726
  52. Write Time : 5694
  53. Session statistics information(Top 10):
  54. Session CPU statistics:
  55. 1 dn_6001-postgres-omm:
  56. Session CPU time : 3
  57. Database CPU time : 98680
  58. Session CPU time % : 0.00 %
  59. 2 dn_6001-postgres-omm:
  60. Session CPU time : 0
  61. Database CPU time : 98680
  62. Session CPU time % : 0.00 %
  63. 3 dn_6001-postgres-omm:
  64. Session CPU time : 0
  65. Database CPU time : 98680
  66. Session CPU time % : 0.00 %
  67. 4 dn_6001-postgres-omm:
  68. Session CPU time : 0
  69. Database CPU time : 98680
  70. Session CPU time % : 0.00 %
  71. Session Memory statistics:
  72. 1 dn_6001-postgres-omm:
  73. Buffer Reads : 303
  74. Shared Buffer Hit ratio : 100.00
  75. In Memory sorts : 0
  76. In Disk sorts : 0
  77. In Memory sorts ratio : 0
  78. Total Memory Size : 7002360
  79. Used Memory Size : 5792184
  80. 2 dn_6001-postgres-omm:
  81. Buffer Reads : 300
  82. Shared Buffer Hit ratio : 99.01
  83. In Memory sorts : 0
  84. In Disk sorts : 0
  85. In Memory sorts ratio : 0
  86. Total Memory Size : 6994168
  87. Used Memory Size : 5790576
  88. 3 dn_6001-postgres-omm:
  89. Buffer Reads : 303
  90. Shared Buffer Hit ratio : 100.00
  91. In Memory sorts : 0
  92. In Disk sorts : 0
  93. In Memory sorts ratio : 0
  94. Total Memory Size : 6961400
  95. Used Memory Size : 5782816
  96. 4 dn_6001-postgres-omm:
  97. Buffer Reads : 1113
  98. Shared Buffer Hit ratio : 100.00
  99. In Memory sorts : 1
  100. In Disk sorts : 0
  101. In Memory sorts ratio : 100.00
  102. Total Memory Size : 12467920
  103. Used Memory Size : 10249640
  104. Session IO statistics:
  105. 1 dn_6001-postgres-omm:
  106. Physical Reads : 3
  107. Read Time : 11883
  108. 2 dn_6001-postgres-omm:
  109. Physical Reads : 0
  110. Read Time : 0
  111. 3 dn_6001-postgres-omm:
  112. Physical Reads : 0
  113. Read Time : 0
  114. 4 dn_6001-postgres-omm:
  115. Physical Reads : 0
  116. Read Time : 0

3.3 通过 EXPLAIN 进行 SQL 语句优化

说明:
  使用 explain 能显示 SQL 语句的执行计划 ;
  执行计划将显示 SQL 语句所引用的表会采用什么样的扫描方式,如:简单的顺序扫描、索
引扫描等。如果引用了多个表,执行计划还会显示用到的 JOIN 算法 ;
  执行计划的最关键的部分是语句的预计执行开销,这是计划生成器估算执行该语句将花费
多长的时间 ;
  若指定了 ANALYZE 选项,则该语句模拟执行并形成最优的执行计划(并非真正执行),然
后根据实际的运行结果显示统计数据,包括每个计划节点内时间总开销(毫秒为单位)和
实际返回的总行数。这对于判断计划生成器的估计是否接近现实非常有用。
步骤 1 ROOT 用户登录装有 openGauss 数据库服务的操作系统然后用 su – omm 命令切换至
OMM 用户环境,登录后信息如下。
  1. [root@node0 ~]# su - omm
  2. Last login: Mon Mar 25 19:31:35 CST 2024 on pts/0
  3. Welcome to 5.10.0-153.12.0.92.oe2203sp2.x86_64
  4. System information as of time: 20240325日 星期一 20:21:39 CST
  5. System load: 0.02
  6. Processes: 195
  7. Memory used: 38.6%
  8. Swap used: 13.9%
  9. Usage On: 25%
  10. IP address: 192.168.28.131
  11. Users online: 1
  12. To run a command as administrator(user "root"),use "sudo <command>".
步骤 2 先启动数据库服务,然后使用 gsql 客户端以管理员用户身份连接 postgres 数据库,假设端
口号为 15400
启动数据库服务。
  1. [omm@node0 ~]$ gs_om -t start
  2. Starting cluster.
  3. =========================================
  4. [SUCCESS] node0:
  5. ......
  6. =========================================
  7. Successfully started.
然后连接 postgres 数据库。
  1. [omm@node0 ~]$ gsql -d postgres -p 15400 -r
  2. gsql ((openGauss 5.0.0 build a07d57c3) compiled at 2023-03-29 03:37:13 commit 0 last mr )
  3. Non-SSL connection (SSL connection is recommended when requiring high-security)
  4. Type "help" for help.
步骤 3 创建 student 表。
  1. openGauss=# CREATE TABLE student
  2. openGauss-# ( std_id INT NOT NULL,
  3. openGauss(# std_name VARCHAR(20) NOT NULL,
  4. openGauss(# std_sex VARCHAR(6),
  5. openGauss(# std_birth DATE,
  6. openGauss(# std_in DATE NOT NULL,
  7. openGauss(# std_address VARCHAR(100)
  8. openGauss(# );
  9. CREATE TABLE
步骤 4 表数据插入。
下面是原数据,直接复制粘贴就行(从上的图也可以看出,如果我把代码录制出来,会有干扰,比如:openGauss=#啥的,就是让自己敲下面的插入代码很麻烦也没有很大的意义),后面这种代码量比较多的我就直接给批量的语句,方便大家复制,在虚拟机直接粘贴就行(如果不知道怎么粘贴,可以直接问)
  1. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (1,'张一','男
  2. ','1993-01-01','2011-09-01','江苏省南京市雨花台区');
  3. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (2,'张二','男
  4. ','1993-01-02','2011-09-01','江苏省南京市雨花台区');
  5. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (3,'张三','男
  6. ','1993-01-03','2011-09-01','江苏省南京市雨花台区');
  7. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (4,'张四','男
  8. ','1993-01-04','2011-09-01','江苏省南京市雨花台区');
  9. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (5,'张五','男
  10. ','1993-01-05','2011-09-01','江苏省南京市雨花台区');
  11. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (6,'张六','男
  12. ','1993-01-06','2011-09-01','江苏省南京市雨花台区');
  13. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (7,'张七','男
  14. ','1993-01-07','2011-09-01','江苏省南京市雨花台区');
  15. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (8,'张八','男
  16. ','1993-01-08','2011-09-01','江苏省南京市雨花台区');
  17. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (9,'张九','男
  18. ','1993-01-09','2011-09-01','江苏省南京市雨花台区');
  19. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (10,'李一','男
  20. ','1993-01-10','2011-09-01','江苏省南京市雨花台区');
  21. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (11,'李二','男
  22. ','1993-01-11','2011-09-01','江苏省南京市雨花台区');
  23. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (12,'李三','男
  24. ','1993-01-12','2011-09-01','江苏省南京市雨花台区');
  25. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (13,'李四','男
  26. ','1993-01-13','2011-09-01','江苏省南京市雨花台区');
  27. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (14,'李五','男
  28. ','1993-01-14','2011-09-01','江苏省南京市雨花台区');
  29. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (15,'李六','男
  30. ','1993-01-15','2011-09-01','江苏省南京市雨花台区');
  31. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (16,'李七','男
  32. ','1993-01-16','2011-09-01','江苏省南京市雨花台区');
  33. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (17,'李八','男
  34. ','1993-01-17','2011-09-01','江苏省南京市雨花台区');
  35. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (18,'李九','男
  36. ','1993-01-18','2011-09-01','江苏省南京市雨花台区');
  37. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (19,'王一','男
  38. ','1993-01-19','2011-09-01','江苏省南京市雨花台区');
  39. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (20,'王二','男
  40. ','1993-01-20','2011-09-01','江苏省南京市雨花台区');
  41. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (21,'王三','男
  42. ','1993-01-21','2011-09-01','江苏省南京市雨花台区');
  43. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (22,'王四','男
  44. ','1993-01-22','2011-09-01','江苏省南京市雨花台区');
  45. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (23,'王五','男
  46. ','1993-01-23','2011-09-01','江苏省南京市雨花台区');
  47. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (24,'王六','男
  48. ','1993-01-24','2011-09-01','江苏省南京市雨花台区');
  49. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (25,'王七','男
  50. ','1993-01-25','2011-09-01','江苏省南京市雨花台区');
  51. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (26,'王八','男
  52. ','1993-01-26','2011-09-01','江苏省南京市雨花台区');
  53. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (27,'王九','男
  54. ','1993-01-27','2011-09-01','江苏省南京市雨花台区');
  55. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (28,'钱一','男
  56. ','1993-01-28','2011-09-01','江苏省南京市雨花台区');
  57. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (29,'钱二','男
  58. ','1993-01-29','2011-09-01','江苏省南京市雨花台区');
  59. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (30,'钱三','男
  60. ','1993-01-30','2011-09-01','江苏省南京市雨花台区');
  61. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (31,'钱四','男
  62. ','1993-02-01','2011-09-01','江苏省南京市雨花台区');
  63. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (32,'钱五','男
  64. ','1993-02-02','2011-09-01','江苏省南京市雨花台区');
  65. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (33,'钱六','男
  66. ','1993-02-03','2011-09-01','江苏省南京市雨花台区');
  67. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (34,'钱七','男
  68. ','1993-02-04','2011-09-01','江苏省南京市雨花台区');
  69. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (35,'钱八','男
  70. ','1993-02-05','2011-09-01','江苏省南京市雨花台区');
  71. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (36,'钱九','男
  72. ','1993-02-06','2011-09-01','江苏省南京市雨花台区');
  73. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (37,'吴一','男
  74. ','1993-02-07','2011-09-01','江苏省南京市雨花台区');
  75. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (38,'吴二','男
  76. ','1993-02-08','2011-09-01','江苏省南京市雨花台区');
  77. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (39,'吴三','男
  78. ','1993-02-09','2011-09-01','江苏省南京市雨花台区');
  79. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (40,'吴四','男
  80. ','1993-02-10','2011-09-01','江苏省南京市雨花台区');
  81. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (41,'吴五','男
  82. ','1993-02-11','2011-09-01','江苏省南京市雨花台区');
  83. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (42,'吴六','男
  84. ','1993-02-12','2011-09-01','江苏省南京市雨花台区');
  85. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (43,'吴七','男
  86. ','1993-02-13','2011-09-01','江苏省南京市雨花台区');
  87. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (44,'吴八','男
  88. ','1993-02-14','2011-09-01','江苏省南京市雨花台区');
  89. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (45,'吴九','男
  90. ','1993-02-15','2011-09-01','江苏省南京市雨花台区');
  91. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (46,'柳一','男
  92. ','1993-02-16','2011-09-01','江苏省南京市雨花台区');
  93. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (47,'柳二','男
  94. ','1993-02-17','2011-09-01','江苏省南京市雨花台区');
  95. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (48,'柳三','男
  96. ','1993-02-18','2011-09-01','江苏省南京市雨花台区');
  97. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (49,'柳四','男
  98. ','1993-02-19','2011-09-01','江苏省南京市雨花台区');
  99. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (50,'柳五','男
  100. ','1993-02-20','2011-09-01','江苏省南京市雨花台区');
步骤 5 数据查询统计。
  1. openGauss=# select count(*) from student;
  2. count
  3. -------
  4. 50
  5. (1 row)
  6. openGauss=# select * from student order by std_id;
  7. std_id | std_name | std_sex | std_birth | std_in |
  8. std_address
  9. --------+----------+---------+---------------------+---------------------+----
  10. ------------------
  11. 1 | 张一 |+| 1993-01-01 00:00:00 | 2011-09-01 00:00:00 |
  12. 省南京市雨花台区
  13. | | | | |
  14. 2 | 张二 |+| 1993-01-02 00:00:00 | 2011-09-01 00:00:00 |
  15. 省南京市雨花台区
  16. | | | | |
  17. 3 | 张三 |+| 1993-01-03 00:00:00 | 2011-09-01 00:00:00 |
  18. 省南京市雨花台区
  19. | | | | |
  20. 4 | 张四 |+| 1993-01-04 00:00:00 | 2011-09-01 00:00:00 |
  21. 省南京市雨花台区
  22. | | | | |
  23. 5 | 张五 |+| 1993-01-05 00:00:00 | 2011-09-01 00:00:00 |
  24. 省南京市雨花台区
  25. | | | | |
  26. 6 | 张六 |+| 1993-01-06 00:00:00 | 2011-09-01 00:00:00 |
  27. 省南京市雨花台区
  28. | | | | |
  29. 7 | 张七 |+| 1993-01-07 00:00:00 | 2011-09-01 00:00:00 |
  30. 省南京市雨花台区
  31. | | | | |
  32. 8 | 张八 |+| 1993-01-08 00:00:00 | 2011-09-01 00:00:00 |
  33. 省南京市雨花台区
  34. | | | | |
  35. 9 | 张九 |+| 1993-01-09 00:00:00 | 2011-09-01 00:00:00 |
  36. 省南京市雨花台区
  37. | | | | |
  38. 10 | 李一 |+| 1993-01-10 00:00:00 | 2011-09-01 00:00:00 |
  39. 省南京市雨花台区
  40. | | | | |
  41. 11 | 李二 |+| 1993-01-11 00:00:00 | 2011-09-01 00:00:00 |
  42. 省南京市雨花台区
  43. | | | | |
  44. 12 | 李三 |+| 1993-01-12 00:00:00 | 2011-09-01 00:00:00 |
  45. 省南京市雨花台区
  46. | | | | |
  47. 13 | 李四 |+| 1993-01-13 00:00:00 | 2011-09-01 00:00:00 |
  48. 省南京市雨花台区
  49. | | | | |
  50. 14 | 李五 |+| 1993-01-14 00:00:00 | 2011-09-01 00:00:00 |
  51. 省南京市雨花台区
  52. | | | | |
  53. 15 | 李六 |+| 1993-01-15 00:00:00 | 2011-09-01 00:00:00 |
  54. 省南京市雨花台区
  55. ……(部分粘贴,有省略)
  56. //注:就是查询结果,我就不完全粘贴了(我尽量减少一些无用的代码,不然影响观看)

注:就是查询结果,我就不完全粘贴了(我尽量减少一些无用的代码,不然影响观看)

步骤 6 查看表信息。
  1. openGauss=# \d student
  2. Table "public.student"
  3. Column | Type | Modifiers
  4. -------------+--------------------------------+-----------
  5. std_id | integer | not null
  6. std_name | character varying(20) | not null
  7. std_sex | character varying(6) |
  8. std_birth | timestamp(0) without time zone |
  9. std_in | timestamp(0) without time zone | not null
  10. std_address | character varying(100) |
步骤 7 收集表的统计信息
  1. openGauss=# ANALYZE VERBOSE student;
  2. INFO: analyzing "public.student"(dn_6001 pid=3982)
  3. INFO: ANALYZE INFO : "student": scanned 1 of 1 pages, containing 50 live rows and 0 dead rows; 50 rows in sample, 50 estimated total rows(dn_6001 pid=3982)
  4. ANALYZE
使用 ANALYZE VERBOSE 语句更新统计信息,会同时输出表的相关信息。
步骤 8 查看语句的执行计划。
  1. openGauss=# explain select * from student where std_id = 30;
  2. QUERY PLAN
  3. --------------------------------------------------------
  4. Seq Scan on student (cost=0.00..1.62 rows=1 width=63)
  5. Filter: (std_id = 30)
  6. (2 rows)
Seq Scan on student 表示使用的是全表扫描。
步骤 9 给表添加主键
  1. openGauss=# alter table student add primary key(std_id);
  2. NOTICE: ALTER TABLE / ADD PRIMARY KEY will create implicit index "student_pkey" for table "student"
  3. ALTER TABLE
步骤 10 再次查看表信息。
确定主键是否建好。
  1. openGauss=# \d student
  2. Table "public.student"
  3. Column | Type | Modifiers
  4. -------------+--------------------------------+-----------
  5. std_id | integer | not null
  6. std_name | character varying(20) | not null
  7. std_sex | character varying(6) |
  8. std_birth | timestamp(0) without time zone |
  9. std_in | timestamp(0) without time zone | not null
  10. std_address | character varying(100) |
  11. Indexes:
  12. "student_pkey" PRIMARY KEY, btree (std_id) TABLESPACE pg_default
student_pkey 为主键名称。
步骤 11 通过 hint 来优化语句扫描方式。
通过加 hint 来使查询语句进行索引扫描,最后退出数据库连接。
  1. openGauss=# explain select /*+indexscan(student student_pkey)*/ * from student where std_id=30;
  2. QUERY PLAN
  3. -----------------------------------------------------------------------------
  4. [Bypass]
  5. Index Scan using student_pkey on student (cost=0.00..8.27 rows=1 width=63)
  6. Index Cond: (std_id = 30)
  7. (3 rows)
Index Scan using student_pkey on student 表示语句通过 student 表上的主键索引
student_pkey 进行了索引扫描。
EXPLAIN 进行 SQL 优化实验结束。

4 日志检查

4.1 实验介绍

数据库运行时,某些操作在执行过程中可能会出现错误,数据库依然能够运行。但是此时数据
库中的数据可能已经发生不一致的情况。建议检查 openGauss 运行日志,及时发现隐患。
openGauss 发生故障时,使用 gs_collector 此工具收集 OS 信息、日志信息以及配置文件
等信息,来定位问题。
本实验主要是先手工设置收集配置信息,然后通过 gs_collector 工具调整用配置来收集相关日
志信息。

4.2 通过 gs_collector 工具来收集日志信息

步骤 1 设置收集配置文件。
  1. openGauss=# \q
  2. [omm@node0 ~]$ pwd
  3. /home/omm
  4. [omm@node0 ~]$ vi collector.json
在用 vi collector.json 创建配置文件后,输入 ”i” 进入 INSERT 模式,并将以下文本内容添加至配
置文件中,具体如下:
  1. {
  2. "Collect":
  3. [
  4. {"TypeName": "System", "Content":"RunTimeInfo, HardWareInfo","Interval":"0", "Count":"1"},
  5. {"TypeName": "Log", "Content" : "Coordinator,DataNode,Gtm,ClusterManager",
  6. "Interval":"0", "Count":"1"},
  7. {"TypeName": "Database", "Content":
  8. "pg_locks,pg_stat_activity,pg_thread_wait_status","Interval":"0", "Count":"1"},
  9. {"TypeName": "Config", "Content": "Coordinator,DataNode,Gtm", "Interval":"0", "Count":"1"}
  10. ]
  11. }
内容添加好后,按下“ Esc ”键,然后输入“ :wq ”进行保存文件退出。
配置文件中
利用 TypeName 指定需要收集的信息类型;
利用 Content 指定每一类信息的具体内容;
利用 Count 指定此类信息收集的次数;
利用 Interval 指定收集间隔,单位为秒;
TypeName Content 不允许缺失或者内容为空;
Interval Count 可以不指定,如果没有指定 Count ,则默认收集一次;
如果没有指定 Interval 则表示间隔为 0 秒, Interval Count 的值不能小于 0
如果不指定则使用默认的配置文件;
可以根据 gs_collector 内容收集对照表进行个性化定制配置;
配置文件格式采用 json 格式。
步骤 2 收集 OS 信息及日志信息。
begin-time、 end-time 的值根据自己实际想收集的时间来设置。
  1. [omm@node0 ~]$ gs_collector --begin-time="20240301 23:00" --end-time="20240325 18:00"
  2. Successfully parsed the configuration file.
  3. create Dir.
  4. Successfully create dir.
  5. do system check interval 0 : count 1
  6. Collecting OS information.
  7. The cmd is source /home/omm/.bashrc; python3 '/opt/huawei/install/om/script/local/LocalCollect.py' -t system_check -U omm -l /var/log/omm/omm/om/gs_local.log -C '{#TypeName#: #System#, #Content#: #ps,ioStat,netFlow,spaceUsage,cpuInfo,memInfo,disk,#, #Interval#: #0#, #Count#: #1#}'
  8. Failed to collect OS information.
  9. do database check interval 0 : count 1
  10. Collecting catalog statistics.
  11. Successfully collected catalog statistics.
  12. do log check interval 0 : count 1
  13. Collecting Log files.
  14. Successfully collected Log files.
  15. do Config check 0:1
  16. Collecting Config files.
  17. Successfully collected Config files.
  18. Collecting files.
  19. Successfully collected files.
  20. All results are stored in /var/log/omm/omm/collector_20240328_213601.tar.gz.
收集完后,所有的结果存放在/var/log/omm/omm/collector_20240328_213601.tar.gz包中
步骤 3 查看日志信息。
先进入日志包所在的目录,然后将日志包进行解压。
  1. [omm@node0 ~]$ cd /var/log/omm/omm/
  2. [omm@node0 omm]$ ll
  3. total 324
  4. drwxr-x--- 3 omm dbgrp 4096 Mar 16 09:51 asp_data
  5. drwxr-x--- 7 omm dbgrp 4096 Mar 15 17:44 bin
  6. drwxr-x--- 3 omm dbgrp 4096 Mar 15 20:37 cm
  7. -rw------- 1 omm dbgrp 136455 Mar 25 19:02 collector_20240325_190144.tar.gz
  8. -rw------- 1 omm dbgrp 150982 Mar 28 21:36 collector_20240328_213601.tar.gz
  9. drwx------ 3 omm dbgrp 4096 Mar 16 09:51 gs_profile
  10. drwxr-x--- 3 omm dbgrp 4096 Mar 16 09:51 mem_log
  11. drwxr-x--- 2 omm dbgrp 4096 Mar 28 21:36 om
  12. drwxr-x--- 3 omm dbgrp 4096 Mar 15 17:44 pg_audit
  13. drwxr-x--- 3 omm dbgrp 4096 Mar 15 17:44 pg_log
  14. drwxr-x--- 3 omm dbgrp 4096 Mar 16 09:51 pg_perf
  15. drwxr-x--- 3 omm dbgrp 4096 Mar 16 09:51 sql_monitor
  16. [omm@node0 omm]$ tar -zxvf collector_20240328_213601.tar.gz
  17. collector_20240328_213601/
  18. collector_20240328_213601/node0.tar.gz
  19. collector_20240328_213601/Summary.log
  20. collector_20240328_213601/Detail.log

接下来,进入解压后的文件夹 collector_20240328_213601(这个每个人可能不一样,不要完全复制,观察一下,和你的解压时间挂钩,大家仔细看看),并对 node0.tar.gz (这个也是,和主机名挂钩)包进一步解压。

  1. [omm@node0 omm]$ cd collector_20240328_213601
  2. [omm@node0 collector_20240328_213601]$ ll
  3. total 156
  4. -rw------- 1 omm dbgrp 2870 Mar 28 21:36 Detail.log
  5. -rw------- 1 omm dbgrp 150043 Mar 28 21:36 node0.tar.gz
  6. -rw------- 1 omm dbgrp 1055 Mar 28 21:36 Summary.log
  7. [omm@node0 collector_20240328_213601]$ tar -zxvf node0.tar.gz
  8. node0/
  9. node0/gstackfiles/
  10. node0/configfiles/
  11. node0/configfiles/config_20240328_213613624181/
  12. node0/configfiles/config_20240328_213613624181/dn_6001/
  13. node0/configfiles/config_20240328_213613624181/dn_6001/pg_ident.conf
  14. node0/configfiles/config_20240328_213613624181/dn_6001/gaussdb.state
  15. node0/configfiles/config_20240328_213613624181/dn_6001/pg_replslot/
  16. node0/configfiles/config_20240328_213613624181/dn_6001/pg_hba.conf
  17. node0/configfiles/config_20240328_213613624181/dn_6001/postgresql.conf
  18. node0/systemfiles/
  19. node0/systemfiles/OS_information_20240328_213603621784.txt
  20. node0/systemfiles/database_system_info_20240328_213603672555.txt
  21. node0/coreDumpfiles/
  22. node0/planSimulatorfiles/
  23. node0/catalogfiles/
  24. node0/catalogfiles/dn_6001_pg_locks_20240328_213608752242.csv
  25. node0/catalogfiles/dn_6001_pg_stat_activity_20240328_213609154400.csv
  26. node0/catalogfiles/gs_clean_20240328_213610016028.txt
  27. node0/catalogfiles/dn_6001_pg_thread_wait_status_20240328_213609607570.csv
  28. node0/logfiles/
  29. node0/logfiles/log_20240328_213611730074.tar.gz
  30. node0/xlogfiles/

在解压的 node0(指的是服务器名/主机名,各自的不一样,请注意观察)下有各种定制收集的日志

  1. [omm@node0 collector_20240328_213601]$ cd node0
  2. [omm@node0 node0]$ ll
  3. total 32
  4. drwx------ 2 omm dbgrp 4096 Mar 28 21:36 catalogfiles
  5. drwx------ 3 omm dbgrp 4096 Mar 28 21:36 configfiles
  6. drwx------ 2 omm dbgrp 4096 Mar 28 21:36 coreDumpfiles
  7. drwx------ 2 omm dbgrp 4096 Mar 28 21:36 gstackfiles
  8. drwx------ 2 omm dbgrp 4096 Mar 28 21:36 logfiles
  9. drwx------ 2 omm dbgrp 4096 Mar 28 21:36 planSimulatorfiles
  10. drwx------ 2 omm dbgrp 4096 Mar 28 21:36 systemfiles
  11. drwx------ 2 omm dbgrp 4096 Mar 28 21:36 xlogfiles
  12. [omm@node0 node0]$ cd catalogfiles/
  13. [omm@node0 catalogfiles]$ ll
  14. total 16
  15. -rw------- 1 omm dbgrp 392 Mar 28 21:36 dn_6001_pg_locks_20240328_213608752242.csv
  16. -rw------- 1 omm dbgrp 1851 Mar 28 21:36 dn_6001_pg_stat_activity_20240328_213609154400.csv
  17. -rw------- 1 omm dbgrp 1945 Mar 28 21:36 dn_6001_pg_thread_wait_status_20240328_213609607570.csv
  18. -rw------- 1 omm dbgrp 286 Mar 28 21:36 gs_clean_20240328_213610016028.txt
  19. [omm@node0 catalogfiles]$
步骤 4 下载收集后的日志文件。
根据自己需要比如可以通过 WinSCP (我用的这个,这个工具主要是连接主机和虚拟机的) 或者 XFTP SSH 工具将日志文件下载至自己本地电脑,
如:

5 最大连接数设置

5.1 实验介绍

当应用程序与数据库的连接数超过最大值,则新的连接无法建立。建议对连接数进行监控,及
时释放空闲的连接或者增加最大连接数。
本实验主要是讲如何来设置数据库最大连接个数。

5.2 场景设置及操作步骤

步骤 1 ROOT 用户登录装有 openGauss 数据库服务的操作系统然后用 su – omm 命令切换至
OMM 用户环境,登录后信息如下。
  1. [root@node0 ~]# su - omm
  2. Last login: Thu Mar 28 21:10:18 CST 2024 on pts/0
  3. Welcome to 5.10.0-153.12.0.92.oe2203sp2.x86_64
  4. System information as of time: 20240328日 星期四 22:03:30 CST
  5. System load: 0.02
  6. Processes: 199
  7. Memory used: 39.1%
  8. Swap used: 21.8%
  9. Usage On: 25%
  10. IP address: 192.168.28.131
  11. Users online: 2
  12. To run a command as administrator(user "root"),use "sudo <command>".
步骤 2 确认 openGauss 数据库服务是否启动
  1. [omm@node0 ~]$ gs_om -t status;
  2. -----------------------------------------------------------------------
  3. cluster_name : dbCluster
  4. cluster_state : Normal
  5. redistributing : No
  6. -----------------------------------------------------------------------
cluster_state : Normal 表示已启动,可以正常使用。如果状态为非 Normal 表示不可用
为了实验场景设置,如果数据库服务没有启动,请执行步 gs_om -t start 命令启动服务。
步骤 3 登录数据库
使用 gsql 客户端以管理员用户身份连接 postgres 数据库,假设端口号为 15400
  1. [omm@node0 ~]$ gsql -d postgres -p 15400 -r
  2. gsql ((openGauss 5.0.0 build a07d57c3) compiled at 2023-03-29 03:37:13 commit 0 last mr )
  3. Non-SSL connection (SSL connection is recommended when requiring high-security)
  4. Type "help" for help.
步骤 4 查看当前数据库已使用的连接数
  1. openGauss=# select count(1) from pg_stat_activity;
  2. count
  3. -------
  4. 8
  5. (1 row)
8 表示当前有 8 个应用已连接到数据库
步骤 5 查看数据库设置的最大连接数
  1. openGauss=# SHOW max_connections;
  2. max_connections
  3. -----------------
  4. 5000
  5. (1 row)
5000 表示数据库设置的最大连接个数为 5000 。如果当前数据库已使用的连接数快接近于最大
连接数时,运维人员先要果断的增加最大连接数以防系统新的连接无法建立。
步骤 6 调整最大连接数参数
\q 退出数据库,然后在 omm 用户环境下通过 gs_guc 工具来增大参数值,如下:
  1. openGauss=# \q
  2. [omm@node0 ~]$ gs_guc reload -I all -c "max_connections= 6000";
  3. The gs_guc run with the following arguments: [gs_guc -I all -c max_connections= 6000 reload ].
  4. expected instance path: [/opt/huawei/install/data/dn/postgresql.conf]
  5. gs_guc reload: max_connections=6000: [/opt/huawei/install/data/dn/postgresql.conf]
  6. server signaled
  7. Total instances: 1. Failed instances: 0.
  8. Success to perform gs_guc!
步骤 7 重启数据库
gs_om -t stop 先关闭数据库 , 然后用 gs_om -t start 再启动数据库
  1. [omm@node0 ~]$ gs_om -t stop;
  2. Stopping cluster.
  3. =========================================
  4. Successfully stopped cluster.
  5. =========================================
  6. End stop cluster.
  7. [omm@node0 ~]$ gs_om -t start;
  8. Starting cluster.
  9. =========================================
  10. [SUCCESS] node0
  11. 2024-03-28 22:26:31.558 66057e17.1 [unknown] 140368399876032 [unknown] 0 dn_6001 01000 0 [BACKEND] WARNING: could not create any HA TCP/IP sockets
  12. 2024-03-28 22:26:31.558 66057e17.1 [unknown] 140368399876032 [unknown] 0 dn_6001 01000 0 [BACKEND] WARNING: could not create any HA TCP/IP sockets
  13. 2024-03-28 22:26:31.561 66057e17.1 [unknown] 140368399876032 [unknown] 0 dn_6001 01000 0 [BACKEND] WARNING: Failed to initialize the memory protect for g_instance.attr.attr_storage.cstore_buffers (1024 Mbytes) or shared memory (2314 Mbytes) is larger.
  14. =========================================
  15. Successfully started.
步骤 8 验证参数设置是否成功
使用 gsql 客户端以管理员用户身份连接 postgres 数据库,然后查看参数值,最后退出数据库。
  1. [omm@node0 ~]$ gsql -d postgres -p 15400 -r
  2. gsql ((openGauss 5.0.0 build a07d57c3) compiled at 2023-03-29 03:37:13 commit 0 last mr )
  3. Non-SSL connection (SSL connection is recommended when requiring high-security)
  4. Type "help" for help.
  5. openGauss=# SHOW max_connections;
  6. max_connections
  7. -----------------
  8. 6000
  9. (1 row)
这里显示 max_connections 6000 ,说明前面参数的修改已经生效。
最大连接数设置实验结束。

6 例行表、索引的维护

6.1 实验介绍

为了保证数据库的有效运行,数据库必须在插入 / 删除操作后,基于客户场景,定期做 VACUUM
FULL ANALYZE ,更新统计信息,以便获得更优的性能;
VACUUM FULL 可回收已更新或已删除的数据所占据的磁盘空间,同时将小数据文件合并;
VACUUM 对每个表维护了一个可视化映射来跟踪包含对别的活动事务可见的数组的页。
一个普通的索引扫描首先通过可视化映射来获取对应的数组,来检查是否对当前事务可见。
若无法获取,再通过堆数组抓取的方式来检查。因此更新表的可视化映射,可加速唯一索
引扫描;
ANALYZE 可收集与数据库中表内容相关的统计信息。统计结果存储在系统表
PG_STATISTIC 中。查询优化器会使用这些统计数据,生成最有效的执行计划。
数据库经过多次删除操作后,索引页面上的索引键将被删除,造成索引膨胀。例行重建索
引,可有效的提高查询效率。
本实验主要是通过使用 VACUUM VACUUM FULL FULL 来收缩表,用 ANALYZE 来收集表的
统计信息以及对表上的索引进行重建。

6.2 场景设置及操作步骤

步骤 1 ROOT 用户登录装有 openGauss 数据库服务的操作系统然后用 su – omm 命令切换至
OMM 用户环境,登录后信息如下。
  1. [root@node0 ~]# su - omm
  2. Last login: Thu Mar 28 22:03:30 CST 2024 on pts/0
  3. Welcome to 5.10.0-153.12.0.92.oe2203sp2.x86_64
  4. System information as of time: 20240328日 星期四 22:33:00 CST
  5. System load: 0.08
  6. Processes: 198
  7. Memory used: 37.1%
  8. Swap used: 9.4%
  9. Usage On: 25%
  10. IP address: 192.168.28.131
  11. Users online: 2
  12. To run a command as administrator(user "root"),use "sudo <command>".
步骤 2 启动服务器后,然后使用 gsql 客户端以管理员用户身份连接 postgres 数据库,假设端口号
15400
启动数据库服务。
  1. [omm@node0 ~]$ gs_om -t start;
  2. Starting cluster.
  3. =========================================
  4. [SUCCESS] node0
  5. 2024-03-28 22:35:55.148 6605804b.1 [unknown] 140256478302144 [unknown] 0 dn_6001 01000 0 [BACKEND] WARNING: could not create any HA TCP/IP sockets
  6. 2024-03-28 22:35:55.148 6605804b.1 [unknown] 140256478302144 [unknown] 0 dn_6001 01000 0 [BACKEND] WARNING: could not create any HA TCP/IP sockets
  7. 2024-03-28 22:35:55.150 6605804b.1 [unknown] 140256478302144 [unknown] 0 dn_6001 01000 0 [BACKEND] WARNING: Failed to initialize the memory protect for g_instance.attr.attr_storage.cstore_buffers (1024 Mbytes) or shared memory (2314 Mbytes) is larger.
  8. =========================================
  9. Successfully started.
连接 postgres 数据库。
  1. [omm@node0 ~]$ gsql -d postgres -p 15400 -r;
  2. gsql ((openGauss 5.0.0 build a07d57c3) compiled at 2023-03-29 03:37:13 commit 0 last mr )
  3. Non-SSL connection (SSL connection is recommended when requiring high-security)
  4. Type "help" for help.
步骤 3 创建 student
  1. openGauss=# drop table student;
  2. DROP TABLE
  3. openGauss=# CREATE TABLE student
  4. openGauss-# ( std_id INT NOT NULL,
  5. openGauss(# std_name VARCHAR(20) NOT NULL,
  6. openGauss(# std_sex VARCHAR(6),
  7. openGauss(# std_birth DATE,
  8. openGauss(# std_in DATE NOT NULL,
  9. openGauss(# std_address VARCHAR(100)
  10. openGauss(# );
  11. CREATE TABLE
步骤 4 表数据插入
  1. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (1,'张一','男
  2. ','1993-01-01','2011-09-01','江苏省南京市雨花台区');
  3. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (2,'张二','男
  4. ','1993-01-02','2011-09-01','江苏省南京市雨花台区');
  5. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (3,'张三','男
  6. ','1993-01-03','2011-09-01','江苏省南京市雨花台区');
  7. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (4,'张四','男
  8. ','1993-01-04','2011-09-01','江苏省南京市雨花台区');
  9. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (5,'张五','男
  10. ','1993-01-05','2011-09-01','江苏省南京市雨花台区');
  11. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (6,'张六','男
  12. ','1993-01-06','2011-09-01','江苏省南京市雨花台区');
  13. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (7,'张七','男
  14. ','1993-01-07','2011-09-01','江苏省南京市雨花台区');
  15. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (8,'张八','男
  16. ','1993-01-08','2011-09-01','江苏省南京市雨花台区');
  17. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (9,'张九','男
  18. ','1993-01-09','2011-09-01','江苏省南京市雨花台区');
  19. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (10,'李一','男
  20. ','1993-01-10','2011-09-01','江苏省南京市雨花台区');
  21. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (11,'李二','男
  22. ','1993-01-11','2011-09-01','江苏省南京市雨花台区');
  23. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (12,'李三','男
  24. ','1993-01-12','2011-09-01','江苏省南京市雨花台区');
  25. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (13,'李四','男
  26. ','1993-01-13','2011-09-01','江苏省南京市雨花台区');
  27. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (14,'李五','男
  28. ','1993-01-14','2011-09-01','江苏省南京市雨花台区');
  29. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (15,'李六','男
  30. ','1993-01-15','2011-09-01','江苏省南京市雨花台区');
  31. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (16,'李七','男
  32. ','1993-01-16','2011-09-01','江苏省南京市雨花台区');
  33. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (17,'李八','男
  34. ','1993-01-17','2011-09-01','江苏省南京市雨花台区');
  35. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (18,'李九','男
  36. ','1993-01-18','2011-09-01','江苏省南京市雨花台区');
  37. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (19,'王一','男
  38. ','1993-01-19','2011-09-01','江苏省南京市雨花台区');
  39. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (20,'王二','男
  40. ','1993-01-20','2011-09-01','江苏省南京市雨花台区');
  41. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (21,'王三','男
  42. ','1993-01-21','2011-09-01','江苏省南京市雨花台区');
  43. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (22,'王四','男
  44. ','1993-01-22','2011-09-01','江苏省南京市雨花台区');
  45. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (23,'王五','男
  46. ','1993-01-23','2011-09-01','江苏省南京市雨花台区');
  47. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (24,'王六','男
  48. ','1993-01-24','2011-09-01','江苏省南京市雨花台区');
  49. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (25,'王七','男
  50. ','1993-01-25','2011-09-01','江苏省南京市雨花台区');
  51. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (26,'王八','男
  52. ','1993-01-26','2011-09-01','江苏省南京市雨花台区');
  53. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (27,'王九','男
  54. ','1993-01-27','2011-09-01','江苏省南京市雨花台区');
  55. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (28,'钱一','男
  56. ','1993-01-28','2011-09-01','江苏省南京市雨花台区');
  57. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (29,'钱二','男
  58. ','1993-01-29','2011-09-01','江苏省南京市雨花台区');
  59. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (30,'钱三','男
  60. ','1993-01-30','2011-09-01','江苏省南京市雨花台区');
  61. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (31,'钱四','男
  62. ','1993-02-01','2011-09-01','江苏省南京市雨花台区');
  63. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (32,'钱五','男
  64. ','1993-02-02','2011-09-01','江苏省南京市雨花台区');
  65. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (33,'钱六','男
  66. ','1993-02-03','2011-09-01','江苏省南京市雨花台区');
  67. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (34,'钱七','男
  68. ','1993-02-04','2011-09-01','江苏省南京市雨花台区');
  69. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (35,'钱八','男
  70. ','1993-02-05','2011-09-01','江苏省南京市雨花台区');
  71. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (36,'钱九','男
  72. ','1993-02-06','2011-09-01','江苏省南京市雨花台区');
  73. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (37,'吴一','男
  74. ','1993-02-07','2011-09-01','江苏省南京市雨花台区');
  75. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (38,'吴二','男
  76. ','1993-02-08','2011-09-01','江苏省南京市雨花台区');
  77. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (39,'吴三','男
  78. ','1993-02-09','2011-09-01','江苏省南京市雨花台区');
  79. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (40,'吴四','男
  80. ','1993-02-10','2011-09-01','江苏省南京市雨花台区');
  81. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (41,'吴五','男
  82. ','1993-02-11','2011-09-01','江苏省南京市雨花台区');
  83. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (42,'吴六','男
  84. ','1993-02-12','2011-09-01','江苏省南京市雨花台区');
  85. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (43,'吴七','男
  86. ','1993-02-13','2011-09-01','江苏省南京市雨花台区');
  87. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (44,'吴八','男
  88. ','1993-02-14','2011-09-01','江苏省南京市雨花台区');
  89. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (45,'吴九','男
  90. ','1993-02-15','2011-09-01','江苏省南京市雨花台区');
  91. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (46,'柳一','男
  92. ','1993-02-16','2011-09-01','江苏省南京市雨花台区');
  93. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (47,'柳二','男
  94. ','1993-02-17','2011-09-01','江苏省南京市雨花台区');
  95. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (48,'柳三','男
  96. ','1993-02-18','2011-09-01','江苏省南京市雨花台区');
  97. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (49,'柳四','男
  98. ','1993-02-19','2011-09-01','江苏省南京市雨花台区');
  99. INSERT INTO student(std_id,std_name,std_sex,std_birth,std_in,std_address) VALUES (50,'柳五','男
  100. ','1993-02-20','2011-09-01','江苏省南京市雨花台区');
步骤 5 数据查询统计
  1. openGauss=# select count(*) from student;
  2. count
  3. -------
  4. 50
  5. (1 row)
  6. openGauss=# select * from student order by std_id;
  7. std_id | std_name | std_sex | std_birth | std_in |
  8. std_address
  9. --------+----------+---------+---------------------+---------------------+----
  10. ------------------
  11. 1 | 张一 |+| 1993-01-01 00:00:00 | 2011-09-01 00:00:00 |
  12. 省南京市雨花台区
  13. | | | | |
  14. 2 | 张二 |+| 1993-01-02 00:00:00 | 2011-09-01 00:00:00 |
  15. 省南京市雨花台区
  16. | | | | |
  17. 3 | 张三 |+| 1993-01-03 00:00:00 | 2011-09-01 00:00:00 |
  18. 省南京市雨花台区
  19. | | | | |
  20. 4 | 张四 |+| 1993-01-04 00:00:00 | 2011-09-01 00:00:00 |
  21. 省南京市雨花台区
  22. | | | | |
  23. 5 | 张五 |+| 1993-01-05 00:00:00 | 2011-09-01 00:00:00 |
  24. 省南京市雨花台区
  25. | | | | |
  26. 6 | 张六 |+| 1993-01-06 00:00:00 | 2011-09-01 00:00:00 |
  27. 省南京市雨花台区
步骤 6 查看表信息
  1. openGauss=# \d student
  2. Table "public.student"
  3. Column | Type | Modifiers
  4. -------------+--------------------------------+-----------
  5. std_id | integer | not null
  6. std_name | character varying(20) | not null
  7. std_sex | character varying(6) |
  8. std_birth | timestamp(0) without time zone |
  9. std_in | timestamp(0) without time zone | not null
  10. std_address | character varying(100) |
步骤 7 使用 VACUUM 命令,进行磁盘空间回收
  1. openGauss=# vacuum student;
  2. VACUUM
步骤 8 删除表中数据
  1. openGauss=# delete from student where std_id>30;
  2. DELETE 20
步骤 9 使用 VACUUM FULL 命令,进行磁盘空间回收
  1. openGauss=# vacuum full student;
  2. VACUUM
步骤 10 使用 ANALYZE 语句更新统计信息
  1. openGauss=# analyze student;
  2. ANALYZE
步骤 11 使用 ANALYZE VERBOSE 语句更新统计信息,并输出表的相关信息
  1. openGauss=# analyze verbose student;
  2. INFO: analyzing "public.student"(dn_6001 pid=3999)
  3. INFO: ANALYZE INFO : "student": scanned 1 of 1 pages, containing 30 live rows and 20 dead rows; 30 rows in sample, 30 estimated total rows(dn_6001 pid=3999)
  4. ANALYZE
步骤 12 执行 VACUUM ANALYZE 命令进行查询优化
  1. openGauss=# vacuum analyze student;
  2. VACUUM
步骤 13 查看特定表的统计信息
  1. openGauss=# select relname,n_tup_ins,n_tup_upd,n_tup_del,last_analyze,vacuum_count from PG_STAT_ALL_TABLES where relname='student';
  2. relname | n_tup_ins | n_tup_upd | n_tup_del | last_analyze |
  3. vacuum_count
  4. ---------+-----------+-----------+-----------+------------------------------+-
  5. -------------
  6. student | 0 | 0 | 0 | 2024-03-29 11:14:46.38435+08 |
  7. 1
  8. (1 row)
PG_STAT_ALL_TABLES 视图将包含当前数据库中每个表的一行统计信息,以上查询结果中各列
分别表示:
Relname 表名
n_tup_ins 插入行数
n_tup_upd 更新行数
n_tup_del 删除行数
last_analyze 上次手动分析该表的时间
vacuum_count 这个表被手动清理的次数
步骤 14 索引维护
说明:
  如果数据发生大量删除后,索引页面上的索引键将被删除,导致索引页面数量的减少,造
成索引膨胀。重建索引可回收浪费的空间。
  新建的索引中逻辑结构相邻的页面,通常在物理结构中也是相邻的,所以一个新建的索引
比更新了多次的索引访问速度要快。
  重建索引有以下两种方式:
1 、使用 REINDEX 语句重建索引;
2 、先删除索引( DROP INDEX ),再创建索引( CREATE INDEX )。
先在 student 表的 std_name 列上创建一个索引,如下:
  1. openGauss=# create index inx_stu01 on student(std_name);
  2. CREATE INDEX
方式 1 :使用 REINDEX 语句重建索引,具体如下:
  1. openGauss=# reindex table student;
  2. REINDEX
方式 2 :先删除索引( DROP INDEX ),再创建索引( CREATE INDEX ),具体如下
  1. openGauss=# drop index inx_stu01;
  2. DROP INDEX
  3. openGauss=# create index inx_stu01 on student(std_name);
  4. CREATE INDEX
查看表结构信息,具体如下:
  1. openGauss=# \d student;
  2. Table "public.student"
  3. Column | Type | Modifiers
  4. -------------+--------------------------------+-----------
  5. std_id | integer | not null
  6. std_name | character varying(20) | not null
  7. std_sex | character varying(6) |
  8. std_birth | timestamp(0) without time zone |
  9. std_in | timestamp(0) without time zone | not null
  10. std_address | character varying(100) |
  11. Indexes:
  12. "inx_stu01" btree (std_name) TABLESPACE pg_default
例行表、索引的维护实验结束。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/636067
推荐阅读
相关标签
  

闽ICP备14008679号