1. XuguDB概述与环境规划
XuguDB(虚谷数据库)是一款国产的高性能关系型数据库管理系统,由成都虚谷伟业科技有限公司自主研发。XuguDB具有高性能、高可用、高安全、易扩展等特点,支持SQL标准,兼容Oracle语法,广泛应用于政府、金融、电信、能源等行业。更多学习教程www.fgedu.net.cn
1.1 XuguDB版本说明
XuguDB目前主要版本为V12,本教程以XuguDB V12.1为例进行详细讲解。
$ xgconsole -v
XuguDB V12.1.0 Build 20240315
# 查看服务状态
$ xg_ctl status
xg_ctl: server is running (PID: 12345)
/usr/local/xugudb/bin/xugu -D /data/xugudb/data
# 查看集群状态
$ xg_ctl cluster status
Node ID | Node Name | IP Address | Port | Status
———|————-|—————|——–|———-
1 | xg_node1 | 192.168.1.51 | 5138 | Online
2 | xg_node2 | 192.168.1.52 | 5138 | Online
1.2 环境规划
本次安装环境规划如下:
IP地址:192.168.1.51
XuguDB端口:5138
管理端口:5139
数据目录:/data/xugudb/data
配置目录:/data/xugudb/conf
日志目录:/data/xugudb/log
备份目录:/backup/xugudb
存储规划:
数据库名:fgedudb
表名前缀:fgedu
表空间:fgedu_tbs
数据文件:/data/xugudb/data/fgedudb.dbf
1.3 XuguDB核心特性
1. 国产自主可控:完全自主研发,安全可靠
2. Oracle兼容:高度兼容Oracle语法和特性
3. 高性能:支持大规模并发访问
4. 高可用:支持主备复制、集群部署
5. 分布式架构:支持分布式部署和水平扩展
6. 多存储引擎:支持行存储和列存储
7. 完善的安全机制:支持审计、加密、访问控制
8. 丰富的管理工具:提供图形化管理界面
2. 硬件环境要求与检查
在安装XuguDB之前,需要对服务器硬件环境进行全面检查。学习交流加群风哥微信: itpux-com
2.1 最低硬件要求
CPU:4核心
内存:8GB
磁盘:100GB
推荐配置(生产环境):
CPU:16核心以上
内存:32GB以上
磁盘:500GB以上SSD
大规模部署配置:
CPU:32核心以上
内存:128GB以上
磁盘:2TB以上SSD
2.2 系统环境检查
# cat /etc/redhat-release
Red Hat Enterprise Linux release 8.8 (Ootpa)
# 检查内核版本
# uname -a
Linux fgedudb01 4.18.0-477.10.1.el8_8.x86_64 #1 SMP Fri Apr 4 10:00:00 CST 2026 x86_64 x86_64 x86_64
GNU/Linux
# 检查内存信息
# free -h
total used free shared buff/cache available
Mem: 31Gi 1.0Gi 30Gi 256Mi 1.0Gi 30Gi
Swap: 7Gi 0B 7Gi
# 检查磁盘空间
# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/vg_system-lv_root 50G 2.5G 48G 5% /
/dev/sda2 1014M 150M 865M 15% /boot
/dev/mapper/vg_data-lv_data 500G 50G 450G 10% /data
2.3 内核参数配置
# vi /etc/sysctl.d/99-xugudb.conf
# 添加以下参数
# 共享内存参数
kernel.shmmax = 17179869184
kernel.shmall = 4194304
kernel.shmmni = 4096
# 信号量参数
kernel.sem = 250 32000 100 128
# 文件描述符限制
fs.file-max = 6815744
# 网络参数
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 4194304
# 使内核参数生效
# sysctl -p /etc/sysctl.d/99-xugudb.conf
# 配置用户限制
# vi /etc/security/limits.conf
# 添加以下配置
xugudb soft nproc 16384
xugudb hard nproc 16384
xugudb soft nofile 65536
xugudb hard nofile 65536
xugudb soft stack 10240
xugudb hard stack 32768
3. XuguDB安装步骤
本节详细介绍XuguDB V12.1的安装过程。学习交流加群风哥QQ113257174
3.1 创建用户和目录
# groupadd -g 1001 xugudb
# useradd -u 1001 -g xugudb -d /home/xugudb -s /bin/bash xugudb
# passwd xugudb
# 创建安装目录
# mkdir -p /usr/local/xugudb
# mkdir -p /data/xugudb/{data,conf,log,backup}
# mkdir -p /backup/xugudb
# 设置目录权限
# chown -R xugudb:xugudb /usr/local/xugudb
# chown -R xugudb:xugudb /data/xugudb
# chown -R xugudb:xugudb /backup/xugudb
# 设置目录权限
# chmod 755 /usr/local/xugudb
# chmod 750 /data/xugudb
# chmod 750 /backup/xugudb
3.2 安装XuguDB软件
# su – xugudb
# 解压安装包
$ cd /usr/local/src
$ tar -xzf XuguDB_V12.1_Linux_x86_64.tar.gz
# 执行安装脚本
$ cd XuguDB_V12.1
$ ./install.sh
# 输出示例:
欢迎使用XuguDB安装程序
========================
安装目录 [/usr/local/xugudb]:
数据目录 [/data/xugudb/data]:
配置目录 [/data/xugudb/conf]:
日志目录 [/data/xugudb/log]:
正在安装XuguDB…
安装完成!
# 验证安装
$ ls -la /usr/local/xugudb/
总用量 0
drwxr-xr-x. 2 xugudb xugudb 6 4月 4 10:00 bin
drwxr-xr-x. 2 xugudb xugudb 6 4月 4 10:00 lib
drwxr-xr-x. 2 xugudb xugudb 6 4月 4 10:00 doc
drwxr-xr-x. 2 xugudb xugudb 6 4月 4 10:00 demo
# 配置环境变量
$ vi ~/.bash_profile
# 添加以下内容
export XUGU_HOME=/usr/local/xugudb
export PATH=$XUGU_HOME/bin:$PATH
export LD_LIBRARY_PATH=$XUGU_HOME/lib:$LD_LIBRARY_PATH
# 使环境变量生效
$ source ~/.bash_profile
3.3 初始化数据库
$ xg_ctl initdb -D /data/xugudb/data
# 输出示例:
属于此数据库系统的文件宿主为”xugudb”。
此用户也必须为服务器进程的宿主。
数据库簇将使用简体中文语言初始化。
默认的数据库编码为”UTF8″。
默认的数据库排序规则为”Chinese_PRC.UTF8″。
创建目录 /data/xugudb/data … 成功
正在创建子目录 … 成功
选择默认最大连接数 … 100
选择默认共享缓冲区 … 128MB
选择默认动态共享内存类型 … posix
创建配置文件 … 成功
运行引导脚本 … 成功
执行引导后初始化 … 成功
同步数据到磁盘 … 成功
警告:为本地连接启用”trust”身份验证。
你可以通过编辑xg_hba.conf更改或下次运行initdb时使用-A选项。
成功。你现在可以用下面的命令开启数据库服务器:
xg_ctl start -D /data/xugudb/data
3.4 启动数据库服务
$ xg_ctl start -D /data/xugudb/data
# 输出示例:
等待服务器进程启动…. 完成
服务器进程已经启动
# 检查服务状态
$ xg_ctl status
xg_ctl: server is running (PID: 12345)
/usr/local/xugudb/bin/xugu -D /data/xugudb/data
# 查看端口
$ netstat -tlnp | grep xugu
tcp6 0 0 :::5138 :::* LISTEN 12345/xugu
tcp6 0 0 :::5139 :::* LISTEN 12345/xugu
# 设置开机自启动
# vi /etc/systemd/system/xugudb.service
[Unit]
Description=XuguDB Database Server
After=network.target
[Service]
Type=forking
User=xugudb
Group=xugudb
Environment=XUGU_HOME=/usr/local/xugudb
ExecStart=/usr/local/xugudb/bin/xg_ctl start -D /data/xugudb/data
ExecStop=/usr/local/xugudb/bin/xg_ctl stop -D /data/xugudb/data
ExecReload=/usr/local/xugudb/bin/xg_ctl reload -D /data/xugudb/data
[Install]
WantedBy=multi-user.target
# 启用服务
# systemctl enable xugudb
# systemctl start xugudb
3.5 创建数据库和用户
$ xgconsole -h 192.168.1.51 -p 5138 -d system -u sysdba -w xugudb
# 输出示例:
XuguDB V12.1.0 控制台
输入 “help” 获取帮助信息。
# 创建数据库
SQL> CREATE DATABASE fgedudb;
# 输出示例:
CREATE DATABASE
# 创建用户
SQL> CREATE USER fgedu IDENTIFIED BY ‘fgedu123’ DEFAULT TABLESPACE fgedu_tbs;
# 输出示例:
CREATE USER
# 授权
SQL> GRANT DBA TO fgedu;
# 输出示例:
GRANT
# 查看数据库
SQL> SHOW DATABASES;
# 输出示例:
Database | Owner | Encoding | Collation
————|———|————|————-
system | sysdba | UTF8 | Chinese_PRC
fgedudb | sysdba | UTF8 | Chinese_PRC
4. XuguDB参数配置
XuguDB参数配置是数据库性能优化的关键步骤,直接影响系统性能。更多学习教程公众号风哥教程itpux_com
4.1 内存参数配置
$ vi /data/xugudb/conf/xugu.conf
# 共享缓冲区大小(建议设置为物理内存的25%-40%)
shared_buffers = 8GB
# 有效缓存大小(建议设置为物理内存的50%-75%)
effective_cache_size = 16GB
# 工作内存(用于排序和哈希操作)
work_mem = 256MB
# 维护工作内存(用于VACUUM、CREATE INDEX等)
maintenance_work_mem = 1GB
# 动态共享内存类型
dynamic_shared_memory_type = posix
4.2 连接和并发配置
$ vi /data/xugudb/conf/xugu.conf
# 最大连接数
max_connections = 500
# 超级用户保留连接
superuser_reserved_connections = 10
# 最大并行工作者数
max_parallel_workers = 8
max_parallel_workers_per_gather = 4
# 最大工作进程数
max_worker_processes = 16
# 重启数据库使配置生效
$ xg_ctl restart -D /data/xugudb/data
4.3 WAL和日志配置
$ vi /data/xugudb/conf/xugu.conf
# WAL缓冲区大小
wal_buffers = 64MB
# 检查点段大小
max_wal_size = 4GB
min_wal_size = 1GB
# 检查点完成目标
checkpoint_completion_target = 0.9
# 日志配置
logging_collector = on
log_directory = ‘/data/xugudb/log’
log_filename = ‘xugu-%Y-%m-%d_%H%M%S.log’
log_rotation_age = 1d
log_rotation_size = 100MB
log_min_duration_statement = 1000
# 重启数据库
$ xg_ctl restart -D /data/xugudb/data
5. 数据库管理
XuguDB支持标准的SQL操作,本节介绍常用的数据库管理命令。from:www.itpux.com
5.1 表空间管理
$ xgconsole -h 192.168.1.51 -p 5138 -d fgedudb -u fgedu -w fgedu123
# 创建表空间
SQL> CREATE TABLESPACE fgedu_tbs
DATAFILE ‘/data/xugudb/data/fgedu_tbs01.dbf’ SIZE 10G AUTOEXTEND ON NEXT 1G MAXSIZE 100G;
# 输出示例:
CREATE TABLESPACE
# 查看表空间
SQL> SELECT tablespace_name, file_name, bytes/1024/1024/1024 GB
FROM dba_data_files;
# 输出示例:
TABLESPACE_NAME | FILE_NAME | GB
—————-|—————————————-|—-
SYSTEM | /data/xugudb/data/system01.dbf | 10
_TBS | /data/xugudb/data/fgedu_tbs01.dbf | 10
# 扩展表空间
SQL> ALTER TABLESPACE fgedu_tbs
ADD DATAFILE ‘/data/xugudb/data/fgedu_tbs02.dbf’ SIZE 10G AUTOEXTEND ON;
# 输出示例:
ALTER TABLESPACE
5.2 表管理
SQL> CREATE TABLE fgedu_employees (
emp_id NUMBER PRIMARY KEY,
emp_name VARCHAR2(100) NOT NULL,
dept_id NUMBER,
salary NUMBER(10,2),
hire_date DATE DEFAULT SYSDATE,
status VARCHAR2(20) DEFAULT ‘ACTIVE’
) TABLESPACE fgedu_tbs;
# 输出示例:
CREATE TABLE
# 创建索引
SQL> CREATE INDEX idx_fgedu_emp_dept ON fgedu_employees(dept_id);
# 输出示例:
CREATE INDEX
# 插入数据
SQL> INSERT INTO fgedu_employees (emp_id, emp_name, dept_id, salary)
VALUES (1, ‘张三’, 10, 8000.00);
SQL> INSERT INTO fgedu_employees (emp_id, emp_name, dept_id, salary)
VALUES (2, ‘李四’, 20, 9000.00);
SQL> COMMIT;
# 查询数据
SQL> SELECT * FROM fgedu_employees;
# 输出示例:
EMP_ID | EMP_NAME | DEPT_ID | SALARY | HIRE_DATE | STATUS
——-|———-|———|———|————|——–
1 | 张三 | 10 | 8000.00 | 2026-04-04 | ACTIVE
2 | 李四 | 20 | 9000.00 | 2026-04-04 | ACTIVE
# 更新数据
SQL> UPDATE fgedu_employees SET salary = 8500 WHERE emp_id = 1;
SQL> COMMIT;
# 删除数据
SQL> DELETE FROM fgedu_employees WHERE emp_id = 2;
SQL> COMMIT;
5.3 用户和权限管理
SQL> CREATE USER app_user IDENTIFIED BY ‘app123456’
DEFAULT TABLESPACE fgedu_tbs
QUOTA 100M ON fgedu_tbs;
# 输出示例:
CREATE USER
# 授予权限
SQL> GRANT CREATE SESSION TO app_user;
SQL> GRANT CREATE TABLE TO app_user;
SQL> GRANT CREATE VIEW TO app_user;
SQL> GRANT CREATE SEQUENCE TO app_user;
SQL> GRANT CREATE TRIGGER TO app_user;
# 授予对象权限
SQL> GRANT SELECT, INSERT, UPDATE, DELETE ON fgedu_employees TO app_user;
# 查看用户权限
SQL> SELECT * FROM dba_sys_privs WHERE grantee = ‘APP_USER’;
# 输出示例:
GRANTEE | PRIVILEGE | ADMIN_OPTION
———-|—————-|————-
APP_USER | CREATE SESSION | NO
APP_USER | CREATE TABLE | NO
# 撤销权限
SQL> REVOKE DELETE ON fgedu_employees FROM app_user;
# 删除用户
SQL> DROP USER app_user CASCADE;
6. 网络连接配置
网络连接配置是客户端访问XuguDB的关键,需要正确配置监听和防火墙规则。更多学习教程www.fgedu.net.cn
6.1 配置监听
$ vi /data/xugudb/conf/xugu.conf
# 监听地址和端口
listen_addresses = ‘*’
port = 5138
# 最大连接数
max_connections = 500
# 重启数据库
$ xg_ctl restart -D /data/xugudb/data
# 查看监听状态
$ netstat -tlnp | grep xugu
tcp6 0 0 :::5138 :::* LISTEN 12345/xugu
tcp6 0 0 :::5139 :::* LISTEN 12345/xugu
# 配置防火墙
# firewall-cmd –permanent –add-port=5138/tcp
success
# firewall-cmd –permanent –add-port=5139/tcp
success
# firewall-cmd –reload
success
6.2 配置访问控制
$ vi /data/xugudb/conf/xg_hba.conf
# 添加以下配置
# TYPE DATABASE USER ADDRESS METHOD
# 本地连接
local all all trust
# IPv4本地连接
host all all 127.0.0.1/32 trust
# IPv6本地连接
host all all ::1/128 trust
# 允许192.168.1.0/24网段访问
host all all 192.168.1.0/24 md5
# 允许特定IP访问
host fgedudb fgedu 192.168.1.52/32 md5
# 重新加载配置
$ xg_ctl reload -D /data/xugudb/data
6.3 使用JDBC连接
//
//
//
//
//
// Java连接示例
import java.sql.*;
public class XuguDBExample {
public static void main(String[] args) {
String url = “jdbc:xugu://192.168.1.51:5138/fgedudb”;
String user = “fgedu”;
String password = “fgedu123”;
try (Connection conn = DriverManager.getConnection(url, user, password)) {
// 查询数据
String sql = “SELECT * FROM fgedu_employees”;
try (Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql)) {
while (rs.next()) {
System.out.println(“ID: ” + rs.getInt(“emp_id”) +
“, Name: ” + rs.getString(“emp_name”));
}
}
// 插入数据
String insertSql = “INSERT INTO fgedu_employees (emp_id, emp_name, dept_id, salary) VALUES (?, ?, ?, ?)”;
try (PreparedStatement pstmt = conn.prepareStatement(insertSql)) {
pstmt.setInt(1, 3);
pstmt.setString(2, “王五”);
pstmt.setInt(3, 30);
pstmt.setDouble(4, 10000.00);
pstmt.executeUpdate();
}
conn.commit();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
7. 备份恢复配置
备份恢复是数据库管理的重要环节,XuguDB提供了多种备份方式。学习交流加群风哥微信: itpux-com
7.1 逻辑备份
$ xg_dump -h 192.168.1.51 -p 5138 -d fgedudb -u fgedu -f /backup/xugudb/fgedudb_$(date +%Y%m%d).sql
# 输出示例:
— XuguDB database dump
— Dumped from database version 12.1.0
— Dumped by xg_dump version 12.1.0
SET client_encoding = ‘UTF8’;
— 备份特定表
$ xg_dump -h 192.168.1.51 -p 5138 -d fgedudb -t fgedu_employees -u fgedu -f /backup/xugudb/employees_$(date
+%Y%m%d).sql
# 备份整个数据库(包括创建语句)
$ xg_dump -h 192.168.1.51 -p 5138 -d fgedudb -u fgedu -C -c -f /backup/xugudb/fgedudb_full_$(date
+%Y%m%d).sql
# 压缩备份
$ gzip /backup/xugudb/fgedudb_$(date +%Y%m%d).sql
7.2 逻辑恢复
$ gunzip /backup/xugudb/fgedudb_20260404.sql.gz
# 恢复数据库
$ xgconsole -h 192.168.1.51 -p 5138 -d fgedudb -u fgedu -f /backup/xugudb/fgedudb_20260404.sql
# 或者使用命令行
$ xg_restore -h 192.168.1.51 -p 5138 -d fgedudb -u fgedu -f /backup/xugudb/fgedudb_20260404.sql
# 输出示例:
— 恢复完成
— 已恢复 10 个表
— 已恢复 1000 行数据
# 恢复到新数据库
$ xgconsole -h 192.168.1.51 -p 5138 -d system -u sysdba -w xugudb
SQL> CREATE DATABASE fgedudb_new;
SQL> \q
$ xg_restore -h 192.168.1.51 -p 5138 -d fgedudb_new -u sysdba -f /backup/xugudb/fgedudb_20260404.sql
7.3 物理备份
$ xg_basebackup -h 192.168.1.51 -p 5138 -D /backup/xugudb/base_$(date +%Y%m%d) -U fgedu -P
# 输出示例:
事务日志起始位置: 0/1000000
100000/100000 kB (100%), 表空间 1/1
事务日志结束位置: 0/1000100
xg_basebackup: 基础备份完成
# 压缩物理备份
$ tar -czf /backup/xugudb/base_$(date +%Y%m%d).tar.gz -C /backup/xugudb base_$(date +%Y%m%d)
# 清理临时目录
$ rm -rf /backup/xugudb/base_$(date +%Y%m%d)
7.4 自动备份脚本
$ vi /usr/local/bin/xugudb_backup.sh
#!/bin/bash
BACKUP_DIR=/backup/xugudb
DATE=$(date +%Y%m%d)
LOG_FILE=/data/xugudb/log/backup.log
echo “=== Backup started at $(date) ===” >> $LOG_FILE
# 逻辑备份
xg_dump -h 192.168.1.51 -p 5138 -d fgedudb -u fgedu -f ${BACKUP_DIR}/fgedudb_${DATE}.sql >> $LOG_FILE 2>&1
gzip ${BACKUP_DIR}/fgedudb_${DATE}.sql >> $LOG_FILE 2>&1
# 物理备份(每周日执行)
if [ $(date +%w) -eq 0 ]; then
xg_basebackup -h 192.168.1.51 -p 5138 -D ${BACKUP_DIR}/base_${DATE} -U fgedu -P >> $LOG_FILE 2>&1
tar -czf ${BACKUP_DIR}/base_${DATE}.tar.gz -C ${BACKUP_DIR} base_${DATE} >> $LOG_FILE 2>&1
rm -rf ${BACKUP_DIR}/base_${DATE}
fi
# 清理30天前的备份
find ${BACKUP_DIR} -name “*.gz” -mtime +30 -delete >> $LOG_FILE 2>&1
echo “=== Backup finished at $(date) ===” >> $LOG_FILE
echo “” >> $LOG_FILE
# 设置脚本权限
$ chmod +x /usr/local/bin/xugudb_backup.sh
# 配置定时任务
$ crontab -e
# 添加以下内容(每天凌晨2点执行备份)
0 2 * * * /usr/local/bin/xugudb_backup.sh
8. 升级与迁移
XuguDB升级和迁移是运维工作中的重要环节,需要仔细规划和执行。更多学习教程公众号风哥教程itpux_com
8.1 版本升级
$ xgconsole -V
xgconsole (XuguDB) 12.1.0
# 执行完整备份
# 参见7.1和7.3节备份步骤
# 停止数据库
$ xg_ctl stop -D /data/xugudb/data
# 备份数据目录
$ tar -czf /backup/xugudb/data_backup_$(date +%Y%m%d).tar.gz /data/xugudb/data
# 升级软件
$ cd /usr/local/src
$ tar -xzf XuguDB_V12.2_Linux_x86_64.tar.gz
$ cd XuguDB_V12.2
$ ./upgrade.sh -D /data/xugudb/data
# 输出示例:
正在升级数据库…
检查数据库版本… 12.1.0
执行升级脚本…
升级完成,当前版本: 12.2.0
# 启动数据库
$ xg_ctl start -D /data/xugudb/data
# 验证版本
$ xgconsole -V
xgconsole (XuguDB) 12.2.0
8.2 迁移到新服务器
$ xg_dump -h 192.168.1.51 -p 5138 -d fgedudb -u fgedu -f /backup/xugudb/fgedudb_migrate.sql
$ gzip /backup/xugudb/fgedudb_migrate.sql
# 传输备份文件
$ scp /backup/xugudb/fgedudb_migrate.sql.gz new-server:/backup/xugudb/
# 在新服务器安装XuguDB
# 参见3.1-3.4节安装步骤
# 创建数据库
$ xgconsole -h 192.168.1.52 -p 5138 -d system -u sysdba -w xugudb
SQL> CREATE DATABASE fgedudb;
SQL> CREATE USER fgedu IDENTIFIED BY ‘fgedu123’;
SQL> GRANT DBA TO fgedu;
SQL> \q
# 恢复数据
$ gunzip /backup/xugudb/fgedudb_migrate.sql.gz
$ xg_restore -h 192.168.1.52 -p 5138 -d fgedudb -u fgedu -f /backup/xugudb/fgedudb_migrate.sql
# 验证迁移
$ xgconsole -h 192.168.1.52 -p 5138 -d fgedudb -u fgedu -w fgedu123
SQL> SELECT COUNT(*) FROM fgedu_employees;
# 输出示例:
COUNT(*)
———-
1000
9. 生产环境实战案例
本节提供一个完整的生产环境配置案例,帮助读者更好地理解XuguDB的实际应用。from:www.itpux.com
9.1 高可用架构部署
# 主库: fgedudb01 (192.168.1.51)
# 备库: fgedudb02 (192.168.1.52)
# 主库配置
$ vi /data/xugudb/conf/xugu.conf
# 启用归档模式
archive_mode = on
archive_command = ‘cp %p /data/xugudb/archive/%f’
archive_timeout = 300
# 配置流复制
wal_level = replica
max_wal_senders = 10
wal_keep_size = 1GB
max_replication_slots = 10
# 创建复制用户
$ xgconsole -h 192.168.1.51 -p 5138 -d fgedudb -u sysdba
SQL> CREATE USER repl_user REPLICATION LOGIN ENCRYPTED PASSWORD ‘repl123’;
# 备库配置
$ vi /data/xugudb/conf/xugu.conf
# 配置主库连接
primary_conninfo = ‘host=192.168.1.51 port=5138 user=repl_user password=repl123’
recovery_target_timeline = ‘latest’
# 启动备库
$ xg_ctl start -D /data/xugudb/data
# 查看复制状态
SQL> SELECT * FROM pg_stat_replication;
9.2 性能监控
SQL> SELECT * FROM v$database;
# 查看表统计
SQL> SELECT table_name, num_rows, blocks
FROM user_tables
WHERE table_name LIKE ‘_%’;
# 查看当前连接
SQL> SELECT pid, usename, application_name, client_addr, state
FROM pg_stat_activity;
# 查看锁信息
SQL> SELECT * FROM pg_locks WHERE NOT granted;
# 查看慢查询
SQL> SELECT query, calls, total_time, mean_time
FROM pg_stat_statements
ORDER BY total_time DESC
LIMIT 10;
# 系统监控命令
# 查看进程
$ ps aux | grep xugu
# 查看资源使用
$ top -p $(pgrep xugu)
# 查看磁盘I/O
$ iostat -x 1
9.3 性能优化
SQL> ANALYZE fgedu_employees;
# 重建索引
SQL> REINDEX INDEX idx_fgedu_emp_dept;
# 清理表空间
SQL> VACUUM FULL fgedu_employees;
# 配置自动清理
$ vi /data/xugudb/conf/xugu.conf
autovacuum = on
autovacuum_max_workers = 3
autovacuum_naptime = 1min
autovacuum_vacuum_threshold = 50
autovacuum_analyze_threshold = 50
# 查询优化
# 使用EXPLAIN分析执行计划
SQL> EXPLAIN SELECT * FROM fgedu_employees WHERE dept_id = 10;
# 输出示例:
QUERY PLAN
————————————————–
Seq Scan on fgedu_employees (cost=0.00..35.50 rows=10 width=100)
Filter: (dept_id = 10)
# 创建合适的索引
SQL> CREATE INDEX idx_fgedu_emp_dept ON fgedu_employees(dept_id);
# 再次查看执行计划
SQL> EXPLAIN SELECT * FROM fgedu_employees WHERE dept_id = 10;
# 输出示例:
QUERY PLAN
————————————————–
Index Scan using idx_fgedu_emp_dept on fgedu_employees (cost=0.29..8.30 rows=10 width=100)
Index Cond: (dept_id = 10)
# 重启数据库使配置生效
$ xg_ctl restart -D /data/xugudb/data
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
