1. 首页 > 国产数据库教程 > GaussDB教程 > 正文

GaussDB教程FG034-GaussDB日常巡检与健康检查

本教程详细介绍GaussDB数据库的日常巡检与健康检查方法,包括巡检内容、健康检查指标、巡检工具、问题处理流程等内容。风哥教程参考GaussDB官方文档GaussDB8系统管理员手册、GaussDB8监控与维护等相关内容。

通过本教程,您将学习如何制定和执行GaussDB的日常巡检计划,及时发现和解决潜在问题,确保数据库的稳定运行。

本教程适用于GaussDB数据库管理员和运维人员,帮助他们掌握日常巡检与健康检查的技能。

目录大纲

Part01-基础概念与理论知识

1.1 日常巡检与健康检查的重要性

日常巡检与健康检查是数据库运维的重要组成部分,具有以下重要性:

  • 及时发现问题:通过定期巡检,及时发现数据库的潜在问题,如性能下降、资源不足、配置异常等。
  • 预防故障:通过健康检查,预防数据库故障的发生,提高系统的可靠性和可用性。
  • 优化性能:通过巡检和分析,识别性能瓶颈,优化数据库性能。
  • 确保数据安全:检查数据备份、安全配置等,确保数据的安全性。
  • 合规性要求:满足企业内部和行业的合规性要求,如审计、安全检查等。

1.2 巡检内容与指标

日常巡检的内容与指标包括:

  • 系统状态:数据库服务状态、进程状态、连接状态等。
  • 资源使用:CPU使用率、内存使用量、磁盘空间、网络流量等。
  • 性能指标:查询响应时间、事务处理速度、缓存命中率等。
  • 存储空间:表空间使用情况、数据文件大小、索引大小等。
  • 日志状态:错误日志、警告日志、审计日志等。
  • 备份状态:备份是否成功、备份文件是否完整、备份策略是否合理等。
  • 安全配置:用户权限、密码策略、加密配置等。
  • 配置参数:数据库参数配置是否合理、是否需要调整等。

1.3 健康检查方法

健康检查的方法包括:

  • 命令行工具:使用psql、gs_ctl等命令行工具检查数据库状态。
  • SQL查询:使用SQL查询检查数据库的各种指标。
  • 监控工具:使用专业的监控工具,如Zabbix、Prometheus等。
  • 日志分析:分析数据库日志,发现异常信息。
  • 性能测试:定期进行性能测试,评估数据库的性能状况。

Part02-生产环境规划与建议

2.1 巡检计划制定

巡检计划制定包括:

  • 巡检频率:根据数据库的重要性和业务需求,确定巡检的频率,如每日、每周、每月等。
  • 巡检内容:根据数据库的特点和业务需求,确定巡检的具体内容。
  • 巡检人员:指定负责巡检的人员,明确职责。
  • 巡检工具:选择合适的巡检工具,提高巡检效率。
  • 巡检报告:制定巡检报告模板,记录巡检结果和发现的问题。

2.2 巡检工具选择

巡检工具选择包括:

  • 命令行工具:psql、gs_ctl、gs_check等GaussDB自带的命令行工具。
  • 监控工具:Zabbix、Prometheus、Grafana等第三方监控工具。
  • 脚本工具:使用Shell、Python等脚本语言编写的巡检脚本。
  • 云平台工具:如果使用云服务,可使用云平台提供的监控和巡检工具。

2.3 告警与处理机制

告警与处理机制包括:

  • 告警级别:根据问题的严重程度,设置不同的告警级别,如紧急、严重、警告、信息等。
  • 告警方式:设置多种告警方式,如邮件、短信、微信、电话等。
  • 处理流程:制定问题处理流程,包括问题确认、分析、解决、验证等步骤。
  • 责任分工:明确不同级别的问题由谁负责处理,确保问题能够及时得到解决。
  • 升级机制:当问题无法及时解决时,设置升级机制,确保问题能够得到高层关注和解决。

Part03-生产环境项目实施方案

3.1 日常巡检实施步骤

日常巡检的实施步骤包括:

  1. 准备工作:确定巡检内容、准备巡检工具、安排巡检人员。
  2. 执行巡检:按照巡检计划,执行各项巡检任务。
  3. 记录结果:记录巡检结果,包括正常项和异常项。
  4. 分析问题:分析巡检中发现的问题,确定问题的严重程度和影响范围。
  5. 解决问题:根据问题的严重程度,采取相应的解决措施。
  6. 验证结果:验证问题是否得到解决。
  7. 生成报告:生成巡检报告,总结巡检结果和问题处理情况。

3.2 健康检查实施步骤

健康检查的实施步骤包括:

  1. 准备工作:确定健康检查的范围和内容,准备检查工具。
  2. 系统状态检查:检查数据库服务状态、进程状态、连接状态等。
  3. 资源使用检查:检查CPU、内存、磁盘、网络等资源的使用情况。
  4. 性能检查:检查数据库的性能指标,如查询响应时间、事务处理速度等。
  5. 存储空间检查:检查表空间使用情况、数据文件大小等。
  6. 日志检查:检查数据库日志,发现异常信息。
  7. 备份检查:检查备份状态、备份文件是否完整等。
  8. 安全检查:检查用户权限、密码策略、加密配置等。
  9. 配置检查:检查数据库参数配置是否合理。
  10. 生成报告:生成健康检查报告,总结检查结果和发现的问题。

3.3 问题处理流程

问题处理流程包括:

  1. 问题确认:确认问题的存在,了解问题的具体表现。
  2. 问题分析:分析问题的原因,确定问题的严重程度和影响范围。
  3. 制定解决方案:根据问题的原因,制定相应的解决方案。
  4. 执行解决方案:按照解决方案,执行相应的操作。
  5. 验证结果:验证问题是否得到解决。
  6. 风哥提示:

  7. 记录问题:记录问题的原因、解决方案和处理结果。
  8. 预防措施:制定预防措施,避免类似问题再次发生。

Part04-生产案例与实战讲解

4.1 日常巡检实战

环境信息:

学习交流加群风哥微信: itpux-com

  • 数据库:GaussDB 8.0
  • 操作系统:Red Hat Enterprise Linux 7.6
  • 巡检频率:每日

巡检步骤:

# 1. 检查数据库服务状态
[fgedu@fgedu.net.cn ~]$ gs_ctl status -D /gauss/fgdata
gs_ctl: server is running (PID: 12345)
/gauss/app/bin/gaussdb “-D” “/gauss/fgdata”

# 2. 检查连接数
[fgedu@fgedu.net.cn ~]$ psql -h localhost -p 5432 -U fgedu -d fgedudb -c “SELECT count(*) FROM pg_stat_activity;”
count
——-
50

# 3. 检查资源使用情况
# CPU使用率
[fgedu@fgedu.net.cn ~]$ top -b -n 1 | grep Cpu
%Cpu(s): 5.0 us, 2.0 sy, 0.0 ni, 93.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

# 内存使用情况
[fgedu@fgedu.net.cn ~]$ free -h
total used free shared buff/cache available
Mem: 32G 10G 10G 2G 12G 20G

# 磁盘空间使用情况 学习交流加群风哥QQ113257174
[fgedu@fgedu.net.cn ~]$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 100G 50G 50G 50% /
/dev/sdb1 500G 200G 300G 40% /gauss

# 4. 检查表空间使用情况
[fgedu@fgedu.net.cn ~]$ psql -h localhost -p 5432 -U fgedu -d fgedudb -c ”
SELECT
tablespace_name,
round(sum(size) / 1024 / 1024 / 1024, 2) AS size_gb
FROM (
SELECT
tablespace_name,
pg_total_relation_size(quote_ident(schemaname) || ‘.’ || quote_ident(tablename)) AS size
FROM
pg_tables
WHERE
schemaname NOT IN (‘pg_catalog’, ‘information_schema’)
UNION ALL
SELECT
tablespace_name,
pg_indexes_size(quote_ident(schemaname) || ‘.’ || quote_ident(tablename)) AS size
FROM
pg_tables
WHERE
schemaname NOT IN (‘pg_catalog’, ‘information_schema’)
) AS sizes
GROUP BY
tablespace_name
ORDER BY 更多视频教程www.fgedu.net.cn
size_gb DESC;

tablespace_name | size_gb
—————-+———-
pg_default | 10.5
fgedutbs | 5.2

# 5. 检查备份状态
[fgedu@fgedu.net.cn ~]$ ls -la /gauss/backup/
total 204800
-rw-r–r– 1 fgedu fgedu 209715200 Sep 1 00:00 fgedudb_full_backup_20240901.backup

# 6. 检查日志文件
[fgedu@fgedu.net.cn ~]$ tail -n 50 /gauss/fgdata/log/postgresql-$(date +%Y-%m-%d).log
# 检查是否有错误或警告信息

# 7. 检查慢查询
[fgedu@fgedu.net.cn ~]$ psql -h localhost -p 5432 -U fgedu -d fgedudb -c ”
SELECT
pid,
usename,
datname,
query_start,
now() – query_start AS duration,
query
FROM
pg_stat_activity
WHERE
state = ‘active’ AND
now() – query_start > interval ‘5 seconds’ 更多学习教程公众号风哥教程itpux_com
ORDER BY
duration DESC;

# 检查是否有慢查询

4.2 健康检查实战

环境信息:

  • 数据库:GaussDB 8.0
  • 操作系统:Red Hat Enterprise Linux 7.6
  • 健康检查频率:每周

健康检查步骤:

# 1. 检查数据库版本
[fgedu@fgedu.net.cn ~]$ psql -h localhost -p 5432 -U fgedu -d fgedudb -c “SELECT version();”
version
———————————————————————————————————-
PostgreSQL 14.0 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 7.3.0, 64-bit
(1 row)

# 2. 检查数据库参数配置
[fgedu@fgedu.net.cn ~]$ psql -h localhost -p 5432 -U fgedu -d fgedudb -c “SHOW shared_buffers;”
shared_buffers
—————-
8GB
(1 row)

from DB视频:www.itpux.com
[fgedu@fgedu.net.cn ~]$ psql -h localhost -p 5432 -U fgedu -d fgedudb -c “SHOW work_mem;”
work_mem
———-
16MB
(1 row)

[fgedu@fgedu.net.cn ~]$ psql -h localhost -p 5432 -U fgedu -d fgedudb -c “SHOW maintenance_work_mem;”
maintenance_work_mem
———————
1GB
(1 row)

# 3. 检查索引使用情况
[fgedu@fgedu.net.cn ~]$ psql -h localhost -p 5432 -U fgedu -d fgedudb -c ”
SELECT
schemaname,
tablename,
indexname,
idx_scan,
idx_tup_read,
idx_tup_fetch
FROM
pg_stat_user_indexes
JOIN
pg_stat_user_tables ON pg_stat_user_indexes.schemaname = pg_stat_user_tables.schemaname AND pg_stat_user_indexes.tablename = pg_stat_user_tables.tablename
ORDER BY
idx_scan DESC
LIMIT 10;

schemaname | tablename | indexname | idx_scan | idx_tup_read | idx_tup_fetch
————+———–+———–+———-+————–+—————
public | fgedu_users | fgedu_users_pkey | 100000 | 100000 | 100000
public | fgedu_orders | fgedu_orders_pkey | 50000 | 50000 | 50000

# 4. 检查表统计信息
[fgedu@fgedu.net.cn ~]$ psql -h localhost -p 5432 -U fgedu -d fgedudb -c ”
SELECT
schemaname,
tablename,
n_live_tup,
n_dead_tup,
last_vacuum,
last_analyze
FROM
pg_stat_user_tables
ORDER BY
n_dead_tup DESC
LIMIT 10;

schemaname | tablename | n_live_tup | n_dead_tup | last_vacuum | last_analyze
————+———–+————+————+————-+—————
public | fgedu_orders | 100000 | 5000 | 2024-09-01 | 2024-09-01
public | fgedu_users | 50000 | 2000 | 2024-09-01 | 2024-09-01

# 5. 检查死锁情况
[fgedu@fgedu.net.cn ~]$ psql -h localhost -p 5432 -U fgedu -d fgedudb -c ”
SELECT
blocked_locks.pid AS blocked_pid,
blocked_activity.usename AS blocked_user,
blocking_locks.pid AS blocking_pid,
blocking_activity.usename AS blocking_user,
blocked_activity.query AS blocked_query,
blocking_activity.query AS blocking_query
FROM
pg_catalog.pg_locks blocked_locks
JOIN
pg_catalog.pg_stat_activity blocked_activity ON blocked_activity.pid = blocked_locks.pid
JOIN
pg_catalog.pg_locks blocking_locks ON blocking_locks.locktype = blocked_locks.locktype
AND blocking_locks.DATABASE IS NOT DISTINCT FROM blocked_locks.DATABASE
AND blocking_locks.relation IS NOT DISTINCT FROM blocked_locks.relation
AND blocking_locks.page IS NOT DISTINCT FROM blocked_locks.page
AND blocking_locks.tuple IS NOT DISTINCT FROM blocked_locks.tuple
AND blocking_locks.virtualxid IS NOT DISTINCT FROM blocked_locks.virtualxid
AND blocking_locks.transactionid IS NOT DISTINCT FROM blocked_locks.transactionid
AND blocking_locks.classid IS NOT DISTINCT FROM blocked_locks.classid
AND blocking_locks.objid IS NOT DISTINCT FROM blocked_locks.objid
AND blocking_locks.objsubid IS NOT DISTINCT FROM blocked_locks.objsubid
AND blocking_locks.pid != blocked_locks.pid
JOIN
pg_catalog.pg_stat_activity blocking_activity ON blocking_activity.pid = blocking_locks.pid
WHERE
NOT blocked_locks.GRANTED;

# 检查是否有死锁

# 6. 检查安全配置
[fgedu@fgedu.net.cn ~]$ psql -h localhost -p 5432 -U fgedu -d fgedudb -c ”
SELECT
usename,
usesuper,
passwd IS NOT NULL AS has_password
FROM
pg_user;

usename | usesuper | has_password
———+———-+————–
postgres | t | t
fgedu | f | t
fgedu01 | f | t

4.3 问题处理实战

环境信息:

  • 数据库:GaussDB 8.0
  • 操作系统:Red Hat Enterprise Linux 7.6
  • 问题:表空间使用率过高

问题处理步骤:

# 1. 确认问题
[fgedu@fgedu.net.cn ~]$ psql -h localhost -p 5432 -U fgedu -d fgedudb -c ”
SELECT
tablespace_name,
round(sum(size) / 1024 / 1024 / 1024, 2) AS size_gb,
round(sum(size) / (SELECT pg_tablespace_size(tablespace_name)) * 100, 2) AS usage_percent
FROM (
SELECT
tablespace_name,
pg_total_relation_size(quote_ident(schemaname) || ‘.’ || quote_ident(tablename)) AS size
FROM
pg_tables
WHERE
schemaname NOT IN (‘pg_catalog’, ‘information_schema’)
UNION ALL
SELECT
tablespace_name,
pg_indexes_size(quote_ident(schemaname) || ‘.’ || quote_ident(tablename)) AS size
FROM
pg_tables
WHERE
schemaname NOT IN (‘pg_catalog’, ‘information_schema’)
) AS sizes
GROUP BY
tablespace_name
ORDER BY
usage_percent DESC;

tablespace_name | size_gb | usage_percent
—————-+———-+—————
fgedutbs | 45.0 | 90.0
pg_default | 10.5 | 21.0

# 2. 分析问题
# 查看占用空间最大的表
[fgedu@fgedu.net.cn ~]$ psql -h localhost -p 5432 -U fgedu -d fgedudb -c ”
SELECT
schemaname,
tablename,
round(pg_total_relation_size(quote_ident(schemaname) || ‘.’ || quote_ident(tablename)) / 1024 / 1024 / 1024, 2) AS size_gb
FROM
pg_tables
WHERE
tablespace_name = ‘fgedutbs’
ORDER BY
size_gb DESC
LIMIT 5;

schemaname | tablename | size_gb
————+———–+———-
public | fgedu_logs | 40.0
public | fgedu_data | 5.0

# 3. 制定解决方案
# 方案1:清理fgedu_logs表中的历史数据
# 方案2:扩展表空间

# 4. 执行解决方案
# 清理历史数据
[fgedu@fgedu.net.cn ~]$ psql -h localhost -p 5432 -U fgedu -d fgedudb -c “DELETE FROM fgedu_logs WHERE log_time < '2024-08-01';" DELETE 1000000
# 执行VACUUM回收空间
[fgedu@fgedu.net.cn ~]$ psql -h localhost -p 5432 -U fgedu -d fgedudb -c “VACUUM FULL fgedu_logs;”
VACUUM

# 5. 验证结果
[fgedu@fgedu.net.cn ~]$ psql -h localhost -p 5432 -U fgedu -d fgedudb -c ”
SELECT
tablespace_name,
round(sum(size) / 1024 / 1024 / 1024, 2) AS size_gb,
round(sum(size) / (SELECT pg_tablespace_size(tablespace_name)) * 100, 2) AS usage_percent
FROM (
SELECT
tablespace_name,
pg_total_relation_size(quote_ident(schemaname) || ‘.’ || quote_ident(tablename)) AS size
FROM
pg_tables
WHERE
schemaname NOT IN (‘pg_catalog’, ‘information_schema’)
UNION ALL
SELECT
tablespace_name,
pg_indexes_size(quote_ident(schemaname) || ‘.’ || quote_ident(tablename)) AS size
FROM
pg_tables
WHERE
schemaname NOT IN (‘pg_catalog’, ‘information_schema’)
) AS sizes
WHERE
tablespace_name = ‘fgedutbs’
GROUP BY
tablespace_name;

tablespace_name | size_gb | usage_percent
—————-+———-+—————
fgedutbs | 15.0 | 30.0

日常巡检脚本:

#!/bin/bash
# daily_inspection.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`

# 日常巡检脚本

# 数据库信息
DB_HOST=”localhost”
DB_PORT=”5432″
DB_USER=”fgedu”
DB_NAME=”fgedudb”

# 日志文件
LOG_FILE=”/gauss/logs/inspection_$(date +%Y%m%d).log”

echo “开始日常巡检…” > $LOG_FILE
echo “巡检时间: $(date)” >> $LOG_FILE
echo “====================================” >> $LOG_FILE

# 1. 检查数据库服务状态
echo “1. 检查数据库服务状态…” >> $LOG_FILE
gs_ctl status -D /gauss/fgdata >> $LOG_FILE 2>&1
echo “” >> $LOG_FILE

# 2. 检查连接数
echo “2. 检查连接数…” >> $LOG_FILE
psql -h $DB_HOST -p $DB_PORT -U $DB_USER -d $DB_NAME -c “SELECT count(*) FROM pg_stat_activity;” >> $LOG_FILE 2>&1
echo “” >> $LOG_FILE

# 3. 检查资源使用情况
echo “3. 检查资源使用情况…” >> $LOG_FILE

# CPU使用率
echo “CPU使用率:” >> $LOG_FILE
top -b -n 1 | grep Cpu >> $LOG_FILE

# 内存使用情况
echo “内存使用情况:” >> $LOG_FILE
free -h >> $LOG_FILE

# 磁盘空间使用情况
echo “磁盘空间使用情况:” >> $LOG_FILE
df -h >> $LOG_FILE
echo “” >> $LOG_FILE

# 4. 检查表空间使用情况
echo “4. 检查表空间使用情况…” >> $LOG_FILE
psql -h $DB_HOST -p $DB_PORT -U $DB_USER -d $DB_NAME -c ”
SELECT
tablespace_name,
round(sum(size) / 1024 / 1024 / 1024, 2) AS size_gb
FROM (
SELECT
tablespace_name,
pg_total_relation_size(quote_ident(schemaname) || ‘.’ || quote_ident(tablename)) AS size
FROM
pg_tables
WHERE
schemaname NOT IN (‘pg_catalog’, ‘information_schema’)
UNION ALL
SELECT
tablespace_name,
pg_indexes_size(quote_ident(schemaname) || ‘.’ || quote_ident(tablename)) AS size
FROM
pg_tables
WHERE
schemaname NOT IN (‘pg_catalog’, ‘information_schema’)
) AS sizes
GROUP BY
tablespace_name
ORDER BY
size_gb DESC;
” >> $LOG_FILE 2>&1
echo “” >> $LOG_FILE

# 5. 检查备份状态
echo “5. 检查备份状态…” >> $LOG_FILE
ls -la /gauss/backup/ >> $LOG_FILE
echo “” >> $LOG_FILE

# 6. 检查日志文件
echo “6. 检查日志文件…” >> $LOG_FILE
tail -n 50 /gauss/fgdata/log/postgresql-$(date +%Y-%m-%d).log | grep -E ‘ERROR|WARNING’ >> $LOG_FILE
echo “” >> $LOG_FILE

# 7. 检查慢查询
echo “7. 检查慢查询…” >> $LOG_FILE
psql -h $DB_HOST -p $DB_PORT -U $DB_USER -d $DB_NAME -c ”
SELECT
pid,
usename,
datname,
query_start,
now() – query_start AS duration,
query
FROM
pg_stat_activity
WHERE
state = ‘active’ AND
now() – query_start > interval ‘5 seconds’
ORDER BY
duration DESC;
” >> $LOG_FILE 2>&1
echo “” >> $LOG_FILE

echo “====================================” >> $LOG_FILE
echo “日常巡检完成!” >> $LOG_FILE

# 发送邮件通知
echo “发送巡检报告邮件…”
mail -s “GaussDB日常巡检报告 $(date +%Y%m%d)” admin@fgedu.net.cn < $LOG_FILE
echo “日常巡检脚本执行完成!”

运行日常巡检脚本:

[fgedu@fgedu.net.cn ~]$ chmod +x daily_inspection.sh
[fgedu@fgedu.net.cn ~]$ ./daily_inspection.sh
开始日常巡检…
发送巡检报告邮件…
日常巡检脚本执行完成!

Part05-风哥经验总结与分享

5.1 日常巡检最佳实践

  • 制定合理的巡检计划:根据数据库的重要性和业务需求,制定合理的巡检计划,包括巡检频率、内容和人员。
  • 使用自动化工具:使用脚本或监控工具自动化巡检过程,提高巡检效率和准确性。
  • 定期分析巡检结果:定期分析巡检结果,识别趋势和潜在问题,及时采取措施。
  • 建立巡检报告制度:建立巡检报告制度,记录巡检结果和问题处理情况,便于追溯和分析。
  • 持续优化巡检内容:根据业务需求和数据库的变化,持续优化巡检内容,确保巡检的有效性。

5.2 健康检查最佳实践

  • 全面检查:进行全面的健康检查,包括系统状态、资源使用、性能指标、存储空间、日志状态、备份状态、安全配置等。
  • 定期检查:定期进行健康检查,如每周或每月一次,及时发现和解决潜在问题。
  • 使用专业工具:使用专业的监控和健康检查工具,提高检查的效率和准确性。
  • 分析历史数据:分析历史健康检查数据,识别趋势和潜在问题,预测可能出现的问题。
  • 制定改进计划:根据健康检查结果,制定改进计划,优化数据库的性能和可靠性。

5.3 常见问题与解决方案

  • 问题1:表空间使用率过高
    解决方案:清理历史数据,执行VACUUM回收空间,扩展表空间。
  • 问题2:连接数过多
    解决方案:检查应用程序连接池配置,调整max_connections参数,关闭空闲连接。
  • 问题3:慢查询过多
    解决方案:优化SQL语句,创建适当的索引,调整查询计划。
  • 问题4:备份失败
    解决方案:检查备份路径权限,确保磁盘空间充足,检查备份配置。
  • 问题5:资源使用过高
    解决方案:优化SQL语句,调整数据库参数,增加系统资源。

日常巡检与健康检查是数据库运维的重要组成部分,通过定期的巡检和健康检查,可以及时发现和解决潜在问题,确保数据库的稳定运行,。

在实际生产环境中,一定要重视日常巡检与健康检查,建立完善的巡检制度和健康检查机制,。

通过本教程的学习,您应该已经掌握了GaussDB日常巡检与健康检查的方法和最佳实践,能够在实际生产环境中制定和执行巡检计划,及时发现和解决问题,。

在实际应用中,还需要根据具体的数据库环境和业务需求,灵活调整巡检内容和健康检查方法,以达到最佳的效果,。

日常巡检与健康检查是一个持续的过程,需要不断地优化和改进,以适应数据库的变化和业务的发展,from GaussDB视频:www.itpux.com。

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息