单台 PostgreSQL 数据库如何处理性能瓶颈

在 PostgreSQL 里如何实现数据的实时监控和性能瓶颈的快速定位? 在 PostgreSQL 中实现数据的实时监控和性能瓶颈的快速定位是保证数据库高效稳定运行的关键。通过使用 PostgreSQL 提供的监控工具和指标,我们可以实时了解数据库的运行状态,及时发现潜在的问题。当发现性能问题时,我们可以通过分析查询语句的执行计划、检查索引的使用情况、优化内存和磁盘 I/O 等方面来快速定位性能瓶颈,并采取相应的措施进行优化。数据的实时监控和性能瓶颈的快速定位就像是给数据库做了一次全面的体检,让我们能够及时发现问题并解决问题,保证数据库的健康运行。 阅读详情

这是一个非常关键的问题。虽然 PostgreSQL 功能强大、性能优秀,但在实际项目中,单台 PostgreSQL 实例在高并发、大数据量或复杂查询场景下,依然会出现性能瓶颈。

作为 Java 后端开发程序员,你需要提前识别这些瓶颈,并掌握应对策略,避免线上服务因数据库拖累而响应缓慢甚至宕机。


🚨 一、单台 PostgreSQL 何时会出现性能瓶颈?

以下是 6 种典型场景,一旦出现,就说明你的单台 PostgreSQL 已经“扛不住”了:


1. 高并发连接数(Connection Overload)

🔍 表现:
  • 应用报错:FATAL: sorry, too many clients already
  • max_connections 达到上限(默认 100)
  • 响应延迟飙升,但 CPU/内存不高
📌 原因:
  • 每个连接占用内存(work_mem × 连接数)
  • 连接池配置过大(如 HikariCP maximumPoolSize=50 × 多个服务)
  • 存在连接泄漏(未正确关闭)

⚠️ 典型场景:微服务集群 + 每个服务连接池 20,共 10 个服务 → 200 连接,超过默认限制。


2. CPU 瓶颈(高负载查询)

🔍 表现:
  • CPU 使用率持续 > 80%
  • 慢查询增多,接口超时
  • EXPLAIN ANALYZE 显示大量 Seq Scan、Hash Join、排序操作
📌 原因:
  • 缺少索引,全表扫描
  • 复杂聚合查询(GROUP BY、WINDOW FUNCTION)
  • N+1 查询导致大量小查询
  • work_mem 不足,被迫磁盘排序

⚠️ 典型场景:报表页面执行 SELECT COUNT(*) FROM 100万行表


3. I/O 瓶颈(磁盘读写慢)

🔍 表现:
  • 查询响应慢,但 CPU 不高
  • iostat 显示磁盘 await 高、%util 接近 100%
  • shared_buffers 命中率低(pg_stat_database 中 blks_read 高)
📌 原因:
  • 数据量大,缓存命中率低
  • 频繁 VACUUM 或 CHECKPOINT 写入 WAL
  • 使用机械硬盘(HDD)而非 SSD
  • 缺少索引,导致大量随机 I/O

⚠️ 典型场景:日志表每天新增 100 万条,未分区,查询缓慢。


4. 内存不足(内存交换 Swap)

🔍 表现:
  • 系统开始使用 swap,性能急剧下降
  • shared_buffers 和 work_mem 设置不合理
  • 大查询导致内存溢出
📌 原因:
  • shared_buffers 设置过大(超过物理内存 25%)
  • work_mem 设置过高(每个排序操作都分配)
  • 并发查询多,总内存需求超过物理内存

⚠️ 典型场景:work_mem = 64MB,100 个并发排序 → 理论内存需求 6.4GB


5. 锁竞争与长事务(Lock Contention)

🔍 表现:
  • 查询卡住,pg_stat_activity 显示 state = active 且 wait_event 为 Lock
  • VACUUM 无法清理死元组
  • 更新操作超时
📌 原因:
  • 长时间未提交的事务(如 Spring 事务未关闭)
  • 缺少索引导致 UPDATE/DELETE 扫全表,加锁范围大
  • 高频 UPDATE 同一记录(如库存扣减)

⚠️ 典型场景:@Transactional 方法中调用了远程 HTTP 接口,耗时 30 秒 → 事务持有锁 30 秒


6. WAL 写入瓶颈(Write-Ahead Log)

🔍 表现:
  • 写入延迟高,INSERT/UPDATE 变慢
  • checkpoint 频繁,影响性能
  • 磁盘 I/O 高(尤其是 WAL 文件目录)
📌 原因:
  • 高频写入(如日志、监控数据)
  • max_wal_size 太小,频繁 checkpoint
  • WAL 存储在慢速磁盘上

⚠️ 典型场景:每秒 1 万条日志写入,WAL 写满 → 性能下降


🛠️ 二、如何解决单台 PostgreSQL 的性能瓶颈?

✅ 解决方案分类

问题解决方案
连接过多连接池优化 + 连接池中间件
CPU 高索引优化 + SQL 重写 + 读写分离
I/O 高SSD + 分区表 + 物化视图
内存不足调整 work_mem + 增加物理内存
锁竞争优化事务 + 索引 + 避免长事务
WAL 写入慢提升磁盘性能 + 调整 WAL 参数

✅ 三、具体解决方案与实施建议

1. 【连接瓶颈】优化连接管理

✅ 推荐做法:
# application.yml(Spring Boot)
spring:
  datasource:
    hikari:
      maximum-pool-size: 20        # 每个服务最多 20 连接
      minimum-idle: 5
      connection-timeout: 30000
      validation-timeout: 3000
      leak-detection-threshold: 60000  # 检测连接泄漏
✅ 高级方案:
  • 使用 PgBouncer(轻量级连接池中间件)
    • 一个 PgBouncer 可为多个应用提供连接池
    • 支持 session / transaction / statement 模式
    • 减少 PostgreSQL 实际连接数
# PgBouncer 配置示例
[pgbouncer]
listen_port = 6432
listen_addr = 0.0.0.0
auth_type = md5
admin_users = postgres

[databases]
myapp_db = host=127.0.0.1 port=5432 dbname=myapp_db

[users]
myapp_user = pool_mode=session

✅ 应用连接 PgBouncer:6432,PgBouncer 再连接 PostgreSQL。


2. 【CPU/IO 瓶颈】优化查询与索引

✅ 关键措施:
  • 使用 EXPLAIN ANALYZE 分析慢查询
  • 为高频 WHERE、ORDER BY 字段建索引
  • 避免 SELECT *、N+1 查询
  • 使用 游标分页 替代 OFFSET
  • 大表使用 分区表(Partitioning)
-- 按时间分区
CREATE TABLE logs_2024_06 PARTITION OF logs
    FOR VALUES FROM ('2024-06-01') TO ('2024-07-01');

3. 【内存瓶颈】合理配置内存参数

# postgresql.conf
shared_buffers = 2GB                    # 物理内存的 25%
work_mem = 16MB                         # 每个排序操作内存
maintenance_work_mem = 512MB            # VACUUM、CREATE INDEX
effective_cache_size = 6GB              # OS + DB 缓存预估

✅ 建议:使用 PGTune 生成推荐配置。


4. 【锁竞争】减少事务持有时间

✅ Java 层优化:
@Service
public class OrderService {

    @Transactional(timeout = 5)  // 限制事务最长 5 秒
    public void createOrder(Order order) {
        // 避免在事务中调用远程接口
        orderRepository.save(order);
        // ✅ 正确:远程调用移出事务
    }
}
✅ 数据库层:
  • 为 UPDATE 字段建索引,减少扫描行数
  • 使用 NOWAIT 或 SKIP LOCKED 避免等待
-- 抢占任务(避免锁等待)
UPDATE tasks 
SET status = 'processing' 
WHERE id IN (
    SELECT id FROM tasks 
    WHERE status = 'pending' 
    LIMIT 1 
    FOR UPDATE SKIP LOCKED
);

5. 【WAL 瓶颈】优化写入性能

# postgresql.conf
max_wal_size = 2GB
min_wal_size = 1GB
checkpoint_completion_target = 0.9
# 将 WAL 放在独立的高速 SSD 上

✅ 建议:WAL 目录(pg_wal)使用单独的 SSD。


6. 【终极方案】架构升级(不再依赖单机)

方案说明
读写分离主库写,多个从库读(流复制 + Hot Standby)
分库分表使用 pg_shard 或应用层分片
连接池中间件PgBouncer + PgPool-II
迁移到云数据库AWS RDS、阿里云 RDS、Google Cloud SQL,支持自动扩展

✅ 四、监控与预警(提前发现问题)

工具用途
pg_stat_statements查看最耗时 SQL
pg_stat_activity查看当前连接和等待
EXPLAIN ANALYZE分析执行计划
iostat, vmstat监控系统 I/O、内存
Prometheus + Grafana可视化监控数据库性能
-- 查看当前长事务
SELECT pid, query, now() - pg_stat_activity.query_start AS duration
FROM pg_stat_activity
WHERE state = 'active'
  AND now() - pg_stat_activity.query_start > interval '5 minutes';

✅ 总结:单台 PostgreSQL 瓶颈应对策略

瓶颈类型识别方式解决方案
连接过多too many clients连接池优化 + PgBouncer
CPU 高top 显示 CPU 高索引、SQL 优化、分区表
I/O 高iostat 显示磁盘忙SSD、分区、物化视图
内存不足free -h 显示 swap 使用调整 work_mem、增加内存
锁竞争pg_stat_activity 显示等待锁优化事务、加索引
WAL 写入慢写入延迟高提升磁盘性能、调优 WAL

🎁 附加建议

  1. 不要等到出问题才优化:上线前做压测,模拟高并发。
  2. 建立慢查询监控机制:每天邮件发送 TOP 10 慢 SQL。
  3. 定期 VACUUM ANALYZE:保持统计信息准确。
  4. 考虑从单机走向高可用架构:主从复制 + 读写分离是第一步。
PostgreSQL 如何应对因复杂的关联条件导致的查询性能瓶颈? 在面对 PostgreSQL 中因复杂的关联条件导致的查询性能瓶颈时,我们可以采取多种方法来解决问题。通过优化查询计划、创建合适的索引、分解复杂查询、使用临时表、调整数据库参数和定期维护数据库等方法,我们可以提高数据库的查询性能,让数据库查询重新恢复高效运行。🎉相关推荐🍅关注博主🎗️带你畅游技术世界,不错过每一次成长机会!📚领书:PostgreSQL 入门到精通.pdf📙PostgreSQL 中文手册📘PostgreSQL 技术专栏🍅优快云社区-墨松科技。 阅读详情

相关推荐

云原生数据库海山(He3DB)PostgreSQL版核心设计理念

薛港,移动云高级研发工程师,负责云原生数据库海山PostgreSQL版架构设计。拥有逾十年数据库内核开发经验,在云计算基础设施与数据库整合领域具备丰富的实践知识。

weixin_42744640的博客 930

HTAP数据库 PostgreSQL 场景与性能测试之 45 - (OLTP) 数据量与性能的线性关系(10亿+无衰减), 暨单表多大需要分区...

标签 PostgreSQL , HTAP , OLTP , OLAP , 场景与性能测试 背景 PostgreSQL是一个历史悠久的数据库,历史可以追溯到1973年,最早由2014计算机图灵奖得主,关系数据库的鼻祖Michael_Stonebraker操刀设计,PostgreSQL具备与Oracle类似的功能、性能、架构以及稳定性。 Postgr...

weixin_33795093的博客 759

【大模型】PostgreSQL是向量数据库吗

PostgreSQL 本身不是一个向量数据库,但通过插件和扩展(如。

m0_74823364的博客 1190

POSTGRESQL 提高POSTGRESQL性能的一些习惯 (1)

PostgreSQL 是一个很有意思的数据库,在使用中有一些习惯可以在同等的硬件下,更加有效的使用硬件提供的资源,让管理和使用POSTGRESQL 获得更多的性能。下面就说说一些使用POSTGRESQL 的习惯。1 是否需要降低文件的数量POSTGRESQL 的文件很多,这里指的文件的数量,主要指两方面的的文件,数据文件与日志文件,降低文件的数量有两个方式1 降低产生数据的量2提高单体文...

sql server的专栏 705

Stm32L0 STM32CUBE中UART和使用LPUART1以及串口不进中断问题解决

/* 开启串口1中断 */ LL_USART_EnableIT_RXNE(LPUART1); /* 开启串口2中断 */ LL_USART_EnableIT_RXNE(USART2);

シ❤゛甜虾的个人博客 7686

SBP依赖计算中的蝴蝶效应:一个Prefab修改如何触发全量重建?

本文深入探讨了Unity中SBP(Scriptable Build Pipeline)依赖计算的蝴蝶效应,解析了Prefab修改如何触发全量重建的机制。通过分析Asset与Object的层级关系、依赖计算的三种维度及CacheEntry系统,揭示了全量重建的根本原因,并提供了依赖可视化工具开发、优化策略与最佳实践,帮助开发者提升构建效率。

weixin_29015051的博客 444

PostgreSQL 数据库性能

1:数据库性能常用的度量指标 (1)运行时间 run time (2)QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。 (3)TPS:是TransactionsPerSecond的缩写,也就是事务数/秒。它是软件测试结果的测量单位。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数..

Melo琦 7881

手把手教你用TJA1145A实现CAN节点智能唤醒(含数据帧过滤技巧)

本文详细介绍了如何使用TJA1145A收发器实现CAN节点的智能唤醒功能,包括数据帧过滤技巧和超低功耗设计。通过硬件级帧过滤和双条件唤醒机制,TJA1145A在保持微安级休眠电流的同时,能对特定报文做出毫秒级响应,显著提升电池供电设备的续航能力。

weixin_28721917的博客 249

PostgreSQL 分区表性能优化-分区键

目录前言优化过程数据库版本总体思路分区键 前言 近期优化SQL的次数越来越多了,优化的思路可以从SQL结构、执行计划、统计信息、执行计划缓存、索引合理性(数据离散度、联合索引等)、程序的数据库连接池参数、数据库自身参数、数据库部署架构等方面看。 这次优化涉及了PostgreSQL的分区表,和单表不同,分区表有一些特性,导致它和普通表有一些区别,例如数据库版本(影响分区表特性)、分区类型(Hash分区、range分区、List分区等)。 本次优化的都是Hash分区的,亿级别的基础数据,根据Hash分区 优化过

Oxye 3333

【25届数字IC秋招总结】面试经验13——豪威科技面试

25届数字ic面试记录———豪威科技

lalala0635的博客 362

uniapp - 解决报错 canvasToTempFilePath: fail canvas is empty 画布为空错误,生成海报相册、二维码、条码、裁剪/拼合操作图片报错,加了this还是报错

uni-app,h5移动端网页,微信小程序,支付宝小程序,Android安卓,苹果ios,app,nvue,canvasToTempFilePath:失败画布为空,报错,canvasToTempFilePath:failcanvasisempty,不支持2d,还是报错,this,加上this还是报错,vue3没有this怎么办?海报,保存到手机相册,生成二维码,显示条码,图像裁切,图片处理,canvas报错,无法解决,还是fail,依然报错,传了this也不好使,Uniapp小程序,如何解决这个问题

🏆 前端领域优质创作者 4706

postgresql中文社区:性能极限值

http://www.postgres.cn/about post性能介绍 http://www.postgres.cn/about 极限值: 最大单个数据库大小 不限 最大数据单表大小 32 TB 单条记录最大 1.6 TB 单字段最大允许 1 GB 单表允许最大记录数 不限 单表最大字段数 250 - 1600 (取决于字段类型) 单表最大索引数 不限 ...

weixin_45419744的博客 1542

windows版vCenter STS证书替换步骤说明

windows版vCenter STS证书,手动更新步骤

技术是手段,服务才是目的。开源与协作是创新的活水,而核心技术的自主可控是立足之本。身处黄金时代,唯持续学习,方能不惧变化。从使用者到创造者,中国技术的未来,正待你们接过火炬,走得更远、更稳、更好。 1041

处理PostgreSQL中的磁盘I/O瓶颈

PostgreSQL磁盘I/O瓶颈解决方案 当PostgreSQL遭遇磁盘I/O瓶颈时,会导致查询响应缓慢、等待时间增加。解决方案需要综合诊断和优化: 诊断工具:使用iostat、pg_stat_activity等工具定位瓶颈 短期优化: 调整内存配置(shared_buffers/work_mem) 优化检查点设置(checkpoint_timeout等) 启用WAL压缩 优化查询(使用索引、批量写入) 长期方案: 升级SSD/NVMe存储 实施RAID 10配置 数据分区和归档 使用Redis等缓存层

知识的力量 1481

芒果YOLO11改进106:检测头篇DynamicHead动态检测头:基于DynamicHead,二次原创提出SATNeXt模块,提出全新的动态DynamicSatDetect

检测头篇DynamicHead动态检测头:基于DynamicHead,二次原创提出SATNeXt模块,提出全新的动态DynamicSatDetect

包括YOLOv5、YOLOv7、YOLOv8等模型改进 772

【异常】OpenClaw提示异常 1302:您的账户已达到速率限制,请您控制请求频率

摘要:系统返回1302错误码提示"账户已达到速率限制",表明请求频率超过服务阈值。主要原因是并发请求数达上限或请求过于密集。解决方案包括:降低并发请求量、引入请求队列机制平滑流量,或根据服务规则提升账户权益等级以获取更高并发额度。建议优先优化请求频率控制策略,避免触发系统限流机制。

奶爸的编程之路,也就一周冷个三天 1141

单台 PostgreSQL 数据库要使用读写分离或者分库分表的判断标准是什么?

摘要: 在单台PostgreSQL数据库上实施读写分离或分库分表需根据业务场景、数据量和性能需求综合判断。读写分离适用于读多写少(如内容展示系统)、查询延迟高或主库负载大的场景,但需部署主从架构(至少2台)。分库分表适用于单表超500万行、写入瓶颈或存储不足的情况,但需权衡跨库事务和复杂度。 单库优化优先方案: 优化SQL与索引,避免全表扫描; 引入Redis缓存热点数据; 使用连接池(如HikariCP); 定期执行VACUUM维护。 架构演进路径: 单库→主从读写分离(如ShardingSphere-J

python15397的博客 1082

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

PostgreSQL 高并发下的性能瓶颈识别与优化

PostgreSQL 在 OLTP 系统中因其事务一致性强、扩展能力好,被广泛用于金融、支付、电商等高并发业务系统。然而在实际部署中,一旦并发量提升,性能瓶颈往往难以定位:到底是行锁?WAL?IO?还是执行计划错误?本篇文章将基于 PostgreSQL 15/16 的最新监控机制与调优参数,从系统资源、数据库内部状态到 SQL 优化三个层面,系统拆解在高并发场景下的瓶颈识别与调优路径,并结合典型实战案例提供完整解决方案。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1404

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

pgx vs database/sql:PostgreSQL性能对决

你是否在Go项目中面临PostgreSQL数据库操作的性能瓶颈?当数据量增长到百万级,传统`database/sql`接口是否让你的应用响应时间急剧增加?本文将通过**12组性能基准测试**、**5类核心场景对比**和**3种架构流程图**,全面解析pgx与database/sql的性能差异,帮助你在项目选型中做出最优决策。 读完本文你将获得: - 不同数据规模下的性能对比(1行到10万行操作耗...

gitblog_00869的博客 1248

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Greenplum数据库与PostgreSQL数据库使用以及性能调优

Greenplum数据库与PostgreSQL数据库使用以及性能调优 一、PostgreSQL简介 1、PostgreSQL教程 2、postgresql与mysql比较 3、阿里云德哥:PostgreSQL 数据库的前世今生 4、PostgreSQL 好评如潮,它是如何做到的? - 开源中国 二、greenplum简介 GreenPlum是面向数据仓库应用的关系型数据库,基于PostgreSQL开发,跟PostgreSQL的兼容性非常好,大部分PostgreSQL客户端工具及Postg..

eagle89的专栏 1827

如何优化 PostgreSQL 在处理大规模数据插入时的性能?

在处理大规模数据插入的场景中,PostgreSQL 的性能优化是一个至关重要的课题。以下我们将详细探讨如何优化 PostgreSQL 在处理大规模数据插入时的性能,并提供相应的解决方案和具体示例代码。通过以上综合的优化策略和方法,可以显著提高 PostgreSQL 在处理大规模数据插入时的性能。但需要注意的是,每个系统的环境和需求都有所不同,因此需要根据实际情况进行针对性的优化和调整。在进行优化过程中,持续监控系统的性能指标,如插入速度、资源使用情况等,并进行性能测试来验证优化效果。

2401_86074221的博客 2396

突破PostgreSQL性能瓶颈:pgx pipeline模式异步查询实战指南

你是否还在为PostgreSQL数据库查询性能不佳而困扰?尤其是在需要执行大量并发查询时,传统的同步查询方式往往会因为频繁的网络往返而导致性能瓶颈。本文将详细介绍如何使用pgx的pipeline模式来实现异步查询,显著提升数据库操作效率。读完本文后,你将能够掌握pipeline模式的基本使用方法、实现原理以及在实际项目中的应用技巧,轻松应对高并发查询场景。 ## pipeline模式简介 pi...

gitblog_00797的博客 1030

Apache Arrow与数据库集成:PostgreSQL性能优化案例

在数据处理领域,PostgreSQL作为一款强大的开源关系型数据库,广泛应用于各类业务系统。然而,当面对海量数据查询和分析时,传统的数据交互方式往往成为性能瓶颈。Apache Arrow([README.md](https://link.gitcode.com/i/c75e8717c76b4f601522f0eb50951f92))作为多语言数据加速工具集,通过其高效的内存数据格式和零拷贝技术,为...

gitblog_00917的博客 1035

在 PostgreSQL 里如何实现数据的分布式事务的性能瓶颈诊断与优化?

在深入探讨性能瓶颈诊断与优化之前,让我们先来了解一下什么是分布式事务。打个比方,分布式事务就像是一个复杂的团队项目,其中涉及到多个成员(数据库节点)在不同的地点(服务器)上协同工作,共同完成一个目标(事务处理)。在这个过程中,需要确保所有成员的操作要么全部成功,要么全部失败,以保持数据的一致性。分布式事务通常面临着一些挑战,比如网络延迟、数据一致性、并发控制等。这些因素都可能导致分布式事务的性能下降,就像团队成员之间的沟通不畅会影响项目的进度一样。因此,诊断和优化分布式事务的性能是非常重要的。

发现生活,分享智慧,一起成长! 858

为什么你的PHP+PostgreSQL应用变慢?这3个性能瓶颈必须排查

掌握PHP+PostgreSQL性能优化关键,快速定位应用变慢根源。通过真实PHP PostgreSQL示例,解析连接管理、查询优化与索引策略,提升响应速度。适用于高并发Web应用,显著降低数据库负载。值得收藏

GatherTide的博客 1081
上一篇: 1、Redis 数据库的基本介绍和特点说明
下一篇: PostgreSQL 数据库的性能优化方向和实现方式
龙茶清欢
博客等级 码龄7年 3720粉丝 375原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙茶清欢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值