PostgreSQL笔记24: Background Writer 后台写进程的原理、参数调优与可观测性演进

并发的本质:不是同时干活,而是高效调度等待时间 并发(Concurrency)是一种应对I/O等待、用户交互和定时任务等不确定事件的系统设计范式,其核心原理在于通过协作式调度将阻塞操作显式化,实现单资源多任务的高效复用。它区别于并行(Parallelism),不依赖硬件扩展,而强调状态管理与执行时机控制。技术价值体现在提升吞吐量、降低延迟、增强响应性与资源利用率,广泛应用于高并发Web服务、实时消息系统、微服务网关及云原生后端开发。本文以咖啡店类比切入,深入解析goroutine、async/await、asyncio等主流模型的共性本质,并聚焦取消机制 阅读详情

纲要

  • Background Writer 进程概述
    • 核心职责:定期将 shared_buffers 中的脏页写入 Page Cache
    • 设计目标:分摊 Checkpoint 的 I/O 压力,减少后端进程(Backend)主动刷脏
  • 核心参数
    • bgwriter_delay
    • bgwriter_lru_maxpages
    • bgwriter_lru_multiplier
    • bgwriter_flush_after
  • 监控视图
    • pg_stat_bgwriter(PG 16 及更早)
      • buffers_clean
      • buffers_backend
      • maxwritten_clean
    • pg_stat_io(PG 16+)
    • pg_stat_checkpointer(PG 17+)
  • PG 17 的重大变更
    • buffers_backend 与 buffers_backend_fsync 从 pg_stat_bgwriter 中移除
    • 可观测性向 pg_stat_io 迁移
  • 多语言示例
    • Node.js(pg)
    • Go(pgx)
    • Python(psycopg2)
    • Java(JDBC)
  • 调优策略与最佳实践

一、Background Writer 的设计背景与核心职责

PostgreSQL 使用 shared_buffers 作为共享缓冲区缓存,所有数据页的读写都经过这一层。Checkpoint 进程负责将 shared_buffers 中的所有脏页刷入磁盘,但若两次 Checkpoint 间隔较长且写负载较高,累积的大量脏页会在单一 Checkpoint 瞬间触发巨大的 I/O 突发(I/O Spike),直接影响查询响应时间。

为解决这一问题,PostgreSQL 引入了独立的 Background Writer 后台写进程。其核心职责包括:

  1. 周期性扫描 shared_buffers :以固定间隔唤醒,扫描缓冲区中的脏页。
  2. 将脏页写入 Page Cache :Background Writer 仅将数据写入操作系统 Page Cache,实际的 fsync 落盘由 Checkpoint 进程负责。
  3. 为 Checkpoint 分摊压力:提前将部分脏页写出,Checkpoint 执行时可跳过已写入的数据块,从而减少 I/O 突发。
  4. 减少后端进程主动刷脏:当 shared_buffers 空闲缓冲区不足时,后端进程需自行选择脏页淘汰并刷盘(称为 buffers_backend)。Background Writer 若能及时释放缓冲区,可显著降低后端进程的查询延迟。

定期扫描脏页

fsync

Backend 主动刷脏

用户查询

Backend Process

shared_buffers

Background Writer

Page Cache

Checkpoint

磁盘

shared_buffers 不足

二、Background Writer 核心参数详解

以下参数均在 postgresql.conf 中配置,修改后需重新加载(pg_reload_conf() 或 SELECT pg_reload_conf();)或重启生效。

2.1 bgwriter_delay

含义:Background Writer 两次活动轮次之间的延迟时间(毫秒)。

默认值:200ms。

说明:每轮中 Background Writer 会写入若干脏页(由后续参数控制),然后休眠 bgwriter_delay 毫秒后重复。若某次扫描未发现任何脏页,进程将进入更长的休眠。注意,许多系统上睡眠延迟的有效分辨率仅为 10 毫秒,设置为非 10 的倍数将向上取整。

调优建议:写入密集型工作负载可适当降低该值(如 100ms),使 Background Writer 更频繁地工作,分散 I/O 负载。

2.2 bgwriter_lru_maxpages

含义:每轮中 Background Writer 最多写入的缓冲区数量。

默认值:100 个缓冲区。

说明:设置为 0 将禁用背景写入(Checkpoint 活动不受影响)。该参数与 bgwriter_lru_multiplier 共同决定每轮实际写入量。

调优建议:I/O 能力充足的系统可适当提高该值(如 200 或更高),让 Background Writer 每轮处理更多脏页。

2.3 bgwriter_lru_multiplier

含义:每轮写入脏页数量的乘数因子。

默认值:2.0。

说明:每轮写入量基于“最近几轮中后端进程所需的新缓冲区数量”的平均值乘以该乘数。设置 1.0 代表“准时制”策略——恰好写入预测所需的数量;更大的值提供应对突发需求的缓冲,更小的值则有意将写入工作留给后端进程。

调优建议:

  • 若 buffers_backend 过高,可适当提高 bgwriter_lru_multiplier(如 2.5 或 3.0),使 Background Writer 更积极地清理脏页。
  • 若 I/O 资源紧张,可降低该值以减少背景写带来的额外 I/O 开销。

2.4 bgwriter_flush_after

含义:Background Writer 写入超过此字节数后,强制操作系统将写入下发到底层存储。

默认值:512kB(Linux)。

说明:该参数控制 Background Writer 调用 posix_fadvise 等接口的频率,避免 Page Cache 中积累过多脏页。

三、监控视图与指标解读

3.1 pg_stat_bgwriter(PG 16 及更早)

该视图始终包含单行全局统计数据。核心字段如下:

字段类型说明
buffers_checkpointbigintCheckpoint 期间写入的缓冲区数
buffers_cleanbigintBackground Writer 写入的缓冲区数
maxwritten_cleanbigintBackground Writer 因写入过多而停止清理扫描的次数
buffers_backendbigint后端进程直接写入的缓冲区数
buffers_backend_fsyncbigint后端进程执行 fsync 的次数
buffers_allocbigint分配的缓冲区数
-- 查询 Background Writer 相关统计(PG 16 及更早)
SELECT
    buffers_clean,
    buffers_backend,
    buffers_backend_fsync,
    maxwritten_clean,
    buffers_alloc
FROM pg_stat_bgwriter;

指标解读:

  • buffers_clean 应远大于 buffers_backend,表明大多数刷脏工作由 Background Writer 完成。
  • 若 buffers_backend 过高,说明后端进程频繁主动刷脏,应调优 Background Writer 参数使其更积极地工作。
  • maxwritten_clean 过高说明 Background Writer 每轮写入量达到 bgwriter_lru_maxpages 上限,可考虑提高该值。

3.2 pg_stat_io(PG 16+)

PG 16 引入了 pg_stat_io 视图,按后端类型、对象类型和 I/O 上下文细粒度统计 I/O 操作。这是 PostgreSQL 可观测性的一次重大提升。

-- 查询后端进程直接写入的统计(PG 16+)
SELECT
    backend_type,
    object,
    context,
    writes,
    write_bytes
FROM pg_stat_io
WHERE backend_type = 'client backend'
   OR backend_type = 'background writer';

3.3 pg_stat_checkpointer(PG 17+)

PG 17 将 Checkpoint 相关统计从 pg_stat_bgwriter 中剥离,独立为 pg_stat_checkpointer 视图。

-- PG 17+ 查询 Checkpoint 统计
SELECT
    checkpoints_timed,
    checkpoints_req,
    checkpoint_write_time,
    checkpoint_sync_time,
    buffers_checkpoint
FROM pg_stat_checkpointer;

四、PG 17 的重大变更:buffers_backend 的移除与可观测性演进

4.1 变更内容

PostgreSQL 17 对 pg_stat_bgwriter 视图进行了重要重构:

  1. 移除的字段:buffers_backend 和 buffers_backend_fsync。
  2. 迁移路径:这些信息现已通过 pg_stat_io 视图提供。
  3. Checkpoint 统计独立:checkpoints_timed、checkpoints_req、checkpoint_write_time、checkpoint_sync_time、buffers_checkpoint 迁移至 pg_stat_checkpointer。

4.2 为什么 buffers_backend 是“误导人的指标”

原素材中提到的“buffers_backend 是一个误导人的指标”,其根本原因在于:

buffers_backend 不仅统计普通后端进程因缓冲区不足而主动刷脏的次数,还统计了 autovacuum 等后台进程的写入操作。这意味着该指标混杂了多种来源的写入,无法准确反映“查询后端因 Background Writer 工作不及时而被迫刷脏”的真实情况。

PG 17 通过 pg_stat_io 的 backend_type 字段实现了精确区分,运维人员可按需过滤:

-- PG 17+ 精确查询 client backend 的主动写入
SELECT
    writes AS backend_direct_writes,
    write_bytes AS backend_direct_write_bytes
FROM pg_stat_io
WHERE backend_type = 'client backend'
  AND context = 'normal';

4.3 版本兼容建议

PostgreSQL 版本pg_stat_bgwriter 可用字段后端写入统计来源
≤ 16buffers_backend, buffers_backend_fsyncpg_stat_bgwriter
≥ 17移除 buffers_backendpg_stat_io

若需编写跨版本兼容的监控脚本,可先检查 PostgreSQL 主版本号,再选择对应的查询语句。

五、多语言示例

以下示例演示如何通过不同编程语言连接 PostgreSQL,查询 Background Writer 相关统计信息。所有示例均使用原生驱动,并附有对应的 PostgreSQL 原生 SQL 注释。

5.1 Node.js(pg 库)

import { Client } from 'pg';

async function getBgWriterStats() {
    const client = new Client({
        host: 'localhost',
        port: 5432,
        database: 'postgres',
        user: 'postgres',
        password: 'your_password',
    });

    await client.connect();

    try {
        // 查询 pg_stat_bgwriter(PG 16 及更早)
        // SELECT buffers_clean, buffers_backend, maxwritten_clean
        // FROM pg_stat_bgwriter;
        const res = await client.query(`
            SELECT
                buffers_clean,
                buffers_backend,
                maxwritten_clean
            FROM pg_stat_bgwriter
        `);

        console.log('Background Writer Stats:');
        console.log(`  buffers_clean: ${res.rows[0].buffers_clean}`);
        console.log(`  buffers_backend: ${res.rows[0].buffers_backend}`);
        console.log(`  maxwritten_clean: ${res.rows[0].maxwritten_clean}`);
    } finally {
        await client.end();
    }
}

getBgWriterStats().catch(console.error);

5.2 Go(pgx 库)

package main

import (
    "context"
    "fmt"
    "log"

    "github.com/jackc/pgx/v5"
)

func main() {
    conn, err := pgx.Connect(context.Background(), "postgres://postgres:your_password@localhost:5432/postgres")
    if err != nil {
        log.Fatal(err)
    }
    defer conn.Close(context.Background())

    // 查询 pg_stat_bgwriter(PG 16 及更早)
    // SELECT buffers_clean, buffers_backend, maxwritten_clean
    // FROM pg_stat_bgwriter;
    var buffersClean, buffersBackend, maxwrittenClean int64
    err = conn.QueryRow(context.Background(), `
        SELECT
            buffers_clean,
            buffers_backend,
            maxwritten_clean
        FROM pg_stat_bgwriter
    `).Scan(&buffersClean, &buffersBackend, &maxwrittenClean)
    if err != nil {
        log.Fatal(err)
    }

    fmt.Printf("Background Writer Stats:\n")
    fmt.Printf("  buffers_clean: %d\n", buffersClean)
    fmt.Printf("  buffers_backend: %d\n", buffersBackend)
    fmt.Printf("  maxwritten_clean: %d\n", maxwrittenClean)
}

5.3 Python(psycopg2 库)

import psycopg2

def get_bgwriter_stats():
    conn = psycopg2.connect(
        host="localhost",
        port=5432,
        database="postgres",
        user="postgres",
        password="your_password"
    )

    try:
        with conn.cursor() as cur:
            # 查询 pg_stat_bgwriter(PG 16 及更早)
            # SELECT buffers_clean, buffers_backend, maxwritten_clean
            # FROM pg_stat_bgwriter;
            cur.execute("""
                SELECT
                    buffers_clean,
                    buffers_backend,
                    maxwritten_clean
                FROM pg_stat_bgwriter
            """)
            row = cur.fetchone()

            print("Background Writer Stats:")
            print(f"  buffers_clean: {row[0]}")
            print(f"  buffers_backend: {row[1]}")
            print(f"  maxwritten_clean: {row[2]}")
    finally:
        conn.close()

if __name__ == "__main__":
    get_bgwriter_stats()

5.4 Java(JDBC)

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class BgWriterStats {
    public static void main(String[] args) {
        String url = "jdbc:postgresql://localhost:5432/postgres";
        String user = "postgres";
        String password = "your_password";

        try (Connection conn = DriverManager.getConnection(url, user, password);
             Statement stmt = conn.createStatement()) {

            // 查询 pg_stat_bgwriter(PG 16 及更早)
            // SELECT buffers_clean, buffers_backend, maxwritten_clean
            // FROM pg_stat_bgwriter;
            String sql = """
                SELECT
                    buffers_clean,
                    buffers_backend,
                    maxwritten_clean
                FROM pg_stat_bgwriter
            """;

            try (ResultSet rs = stmt.executeQuery(sql)) {
                if (rs.next()) {
                    System.out.println("Background Writer Stats:");
                    System.out.println("  buffers_clean: " + rs.getLong("buffers_clean"));
                    System.out.println("  buffers_backend: " + rs.getLong("buffers_backend"));
                    System.out.println("  maxwritten_clean: " + rs.getLong("maxwritten_clean"));
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

5.5 多语言对比

维度Node.js (pg)Go (pgx)Python (psycopg2)Java (JDBC)
驱动pgpgx/v5psycopg2org.postgresql.Driver
连接方式连接字符串 / 对象DSN 连接字符串关键字参数JDBC URL
查询接口client.query()QueryRow() / Query()cursor.execute()Statement.executeQuery()
结果处理rows[0].columnScan(&var)fetchone()[idx]rs.getLong("column")
资源管理手动 end()defer Close()try-finallytry-with-resources
类型安全弱类型(JS)强类型弱类型(Python)强类型
适用场景快速原型、Web 后端高性能微服务数据科学、自动化运维企业级应用

六、调优策略与最佳实践

6.1 判断 Background Writer 是否“懒惰”

通过对比 buffers_clean 与 buffers_backend 可判断 Background Writer 的工作效率:

  • 健康状态:buffers_clean >> buffers_backend,表明刷脏工作主要由 Background Writer 完成。
  • 需调优状态:buffers_backend 接近或超过 buffers_clean,表明后端进程频繁主动刷脏,应考虑:
    1. 降低 bgwriter_delay(如 100ms),提高唤醒频率。
    2. 提高 bgwriter_lru_maxpages(如 200),增加每轮写入量。
    3. 提高 bgwriter_lru_multiplier(如 2.5 或 3.0),使 Background Writer 更积极。

6.2 注意 PG 17 的监控变更

若使用 PG 17 及以上版本:

  • 使用 pg_stat_io 替代 buffers_backend 监控后端写入。
  • 使用 pg_stat_checkpointer 监控 Checkpoint 相关指标。
  • 编写监控脚本时需做版本适配。

6.3 Checkpoint 与 Background Writer 的协同

Background Writer 的目标是减少而非消除 Checkpoint 的 I/O 压力。过度激进的 Background Writer 可能增加整体 I/O 负载(因为同一脏页可能被多次写出)。调优时需在“减少 Checkpoint 突发”与“控制背景写额外开销”之间取得平衡。

七、官方文档

八、参考链接

总结

Background Writer 是 PostgreSQL 中负责将 shared_buffers 脏页定期写入 Page Cache 的后台进程,其核心价值在于为 Checkpoint 分摊 I/O 压力并减少后端进程主动刷脏带来的查询延迟。关键调优参数包括 bgwriter_delay、bgwriter_lru_maxpages、bgwriter_lru_multiplier 和 bgwriter_flush_after,需根据 buffers_clean 与 buffers_backend 的比例进行动态调整。

PG 17 将 buffers_backend 从 pg_stat_bgwriter 中移除并迁移至 pg_stat_io,同时将 Checkpoint 统计独立为 pg_stat_checkpointer,显著提升了可观测性的精细度。多语言 Demo 展示了 Node.js、Go、Python、Java 四种主流技术栈访问 pg_stat_bgwriter 的实践方式,便于运维与开发团队快速集成监控能力。

多智能体系统架构实战:从单体Agent到Sol与Luna的舰队协同 在人工智能领域,多智能体系统(Multi-Agent System)是一种通过多个自主或半自主的智能体(Agent)协同工作来解决复杂问题的架构范式。其核心原理在于将复杂任务分解,由多个专业化智能体分工协作,并通过中央协调器进行任务调度与状态管理,从而实现比单体智能体更高的效率、鲁棒性和可扩展性。这种架构的技术价值在于,它解决了单体智能体在维护成本、资源利用和功能瓶颈上的固有局限,使得AI应用能够像工业化流水线一样高效运作。其典型应用场景包括复杂的客服系统、自动化工作流、游戏NPC群体以及分布式决策支持系统 阅读详情

相关推荐

【信息科学与工程学】计算机科学与自动化 第二百三十三篇 凤凰架构02

① Firecracker 为每个 microVM 提供极简设备模型:virtio-net, virtio-blk, serial console。:① BB84:Alice 随机选择基矢(+ 或 ×)发送单光子,Bob 随机测量基矢,比对后保留一致位的子集作为原始密钥。:密度 1 EB/mm³;:① Parquet 文件:行组(Row Group)→ 列块(Column Chunk)→ 页(Page)。

weixin_49199313的博客 137

PostgreSQL 后台工作进程 BackgroundWorker

PostgreSQL 的 Background Worker 是一种实现使用独立进程运行自定义代码的机制,它生命周期与数据库密切相关,具备共享内存访问和在内部进行数据库连接等能力;bgworker 通过 WaitLatch 实现高效事件等待,结合信号处理实现优雅退出,适用于自动清理、逻辑复制、实时监控等关键功能,显著扩展了 PostgreSQL 的可维护性和性能表现

王清欢的博客 3162

Python 实战:构建动态仪表盘快照与 Diff 平台,实现周期采集、结构变化检测与异常波动留证

我长期专注 Python 爬虫工程化实战,主理专栏 👉 《Python爬虫实战》:从采集策略到反爬对抗,从数据清洗到分布式调度,持续输出可复用的方法论与可落地案例。内容主打一个“能跑、能用、能扩展”,让数据价值真正做到——抓得到、洗得净、用得上。

喵手的博客 113

从模型到系统:构建Agentic AI规模化应用的Harness框架实践

在人工智能领域,大语言模型(LLM)通过模型规模化实现了能力突破,但其在复杂任务处理、可靠性和成本控制方面仍面临挑战。为解决这些问题,系统规模化成为关键演进方向,其核心在于构建一套工程化框架来约束、引导和编排智能体行为。这种框架通常被称为Harness,它通过编排层、工具管理和状态持久化等机制,将智能体能力整合为稳定、可扩展的服务。从技术价值看,系统规模化能显著提升AI应用的可靠性、可观测性和成本效益,适用于自动化工作流、复杂决策支持等场景。本文以DeepSeek Harness为例,结合Python实践,

weixin_30338497的博客 776

【信息科学与工程学】计算机科学与自动化——第三百零五篇 数据中心 Scale-Up、Scale-Out、Scale-Across 100

密码法》《商用密码管理条例》《网络安全法》《数据安全法》《国家政务信息化项目建设管理办法》;《网络安全法》《数据安全法》《个人信息保护法》《反恐怖主义法》《反有组织犯罪法》;反洗钱可疑交易规则判定。《个人信息保护法》《网络安全法》《数据安全法》《反不正当竞争法》《生成式人工智能服务管理暂行办法》;《中国共产党纪律处分条例》《党内监督条例》《巡视工作条例》《审计法》《公职人员政务处分法》《反腐败/反有组织犯罪相关》《档案法》《电子签名法》《会计法》(原始凭证数字化要求)、《网络安全法》;

weixin_49199313的博客 497

编译原理考试大题分析【太原理工大学】

看完本篇大题拿 85% 的分应该没问题,TYUT 太原理工大学编译原理期末考试。

m0_52861684的博客 1万+

lucide-react 完整实战:10 个关键决策搞定 React 图标

Meta Title:lucide-react 完整实战:10 个关键决策搞定 React 图标 Meta Description:lucide-react 把每个 Lucide 图标做成独立 React 组件,渲染可定制的内联 SVG。本文按"选型 → 接入 → 打磨 → 迁移"四个阶段,带你一次吃透 size、color、strokeWidth 定制、全局换肤、无障碍与迁移避坑。 写过 Re

gitblog_00568的博客 188

EPLAN电气设计精华 -模拟量传感器画法全解

本文介绍了EPLAN中模拟量压力传感器的标准画法要点,重点解析了电流型(4-20mA)、电压型(0-10V/0-5V)和特定应用型三种传感器的核心特点、典型符号、接线方式及应用场景。文章提供了EPLAN设备标识符示例,并分享了一个实际项目案例(XJC-Y01-20-4M传感器配合XJC-608T-F变送器和GSEE.GXLK-AI4S-I模块的应用),强调绘制前查阅技术资料的重要性。内容简明实用,有助于规范电气设计中的传感器绘制。

Qinmingyue13的博客 1185

基于LangGraph与FastAPI构建多智能体协同系统:Luna舰队与Sol管理器实战

在分布式系统和自动化流程中,管理者-工作者(Manager-Worker)架构是一种经典的设计模式,它通过中心化调度器协调多个工作节点,实现任务的高效并行与协同。这一原理在AI智能体开发领域同样适用,为解决单个智能体能力有限、复杂任务处理困难的问题提供了工程化方案。通过引入工作流编排和状态管理机制,多智能体系统能够实现任务分发、通信协调和资源调度,显著提升复杂场景下的自动化水平与可靠性。具体到技术实现,LangGraph框架为构建有状态的多智能体工作流提供了强大支持,而FastAPI则能快速搭建中心化管理器

weixin_30448603的博客 504

蓝牙开发实战:如何用Wireshark抓取HCI协议包(附完整分析步骤)

本文详细介绍了如何使用Wireshark抓取和分析蓝牙HCI协议包,包括环境搭建、过滤器配置技巧、数据包深度解析及高级调试方法。通过实战案例,帮助开发者快速定位蓝牙连接问题,提升调试效率。

cuda7parallel的博客 1150

RTL代码生成智能体构建指南:从规格到可综合Verilog的闭环实践

大语言模型与智能体技术正在向芯片设计领域渗透,其中RTL代码生成是EDA工具链智能化的重要方向。其核心原理在于将自然语言规格解析为结构化中间表示,再通过模板与LLM混合生成、语法检查、功能仿真和逻辑综合形成闭环反馈,从而自动修正代码错误。技术价值在于把重复性的模块骨架、接口定义和测试平台初稿自动化,让工程师聚焦架构权衡与时序收敛。典型应用场景包括计数器、状态机、FIFO等常规模块开发,以及跨模块接口一致性管理。本文围绕RTL代码生成智能体的分层架构、IR设计、验证反馈与迭代修正,拆解一套可跑通的工程化构建方

weixin_28292761的博客 153

IPED 元数据查看器完全指南:3步核实文件时间戳、定位伪造痕迹

IPED 元数据查看器是 IPED 数字取证软件里做文件属性分析的核心组件:一个案例里每个文件的创建/修改/访问时间、哈希值、删除标记,以及 Tika 解析器从文件内部提取出的 EXIF、文档作者等嵌入信息,都能在同一个界面里直接看。不用挨个打开文件比对时间,这一篇讲清楚从单文件核查到批量筛选的完整操作。 ## 嫌疑人说"这文件早于事发时间":先看文件自己的"户口" 数字取证里有个绕不开的矛盾

gitblog_09732的博客 293

YOLOv9分割改进 ,YOLOv9分割改进主干网络为华为EfficientNet,助力涨点

EfficientNet论文中研究了卷积网络的缩放和,并证明对深度,宽度和分辨率复合缩放的重要性,因此精度和效率更好。为了阐述相关的原理,我们提出了简单有效的复合缩放方法,使得模型缩放具有一定设计准则,同时兼顾了模型的效率。我下文将 YOLOv9 分割模型改进主干网络为 EfficientNet 融合网络结构。论文地址代码地址下文都是手把手教程,跟着操作即可添加成功把环境配置好,数据集处理好,训练基本能成功,创作不易,请帮忙点一个爱心,关注我,带你不挂科!

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 942

Mac下MySQL的配置和修改密码以及忘记密码后的重置密码

1 ) Mac下MySQL的配置和修改密码 2 ) 忘记并重置密码 启动MySQL服务,通过 $ps aux | grep mysql 判断是否启动该服务,若未启动,则到 系统偏好设置/MySQL面板 启动服务 软件默认会安装到:/usr/local/mysql 目录,进入这个目录下的bin目录:$cd /usr/local/mysql/bin 执行 $./mysql -u root -p 通过初始密码登录MySQL 通...

Wang的专栏 6259

【人工智能论文发表】基于医学病例文本和多模态大模型的医疗影像分割方法研究

摘要:本研究提出MMS-Former,一种基于级联多模态Transformer的文本引导医学图像分割框架。该模型创新性地将临床文本信息深度融入图像分割全过程,通过SwinUNETR提取视觉特征,ClinicalBERT编码病历文本,并在解码器的每个上采样阶段通过交叉注意力模块实现多级文本特征融合。实验表明,相比纯视觉模型,MMS-Former在Dice系数和IoU指标上分别提升3%以上,在处理边界模糊目标时表现尤为突出。模型还设计了结合Dice损失和图文对比损失的复合目标函数,确保分割精度与语义对齐。代码实

u012133341的博客 142

交货单冲销发货过账的正确姿势:用 VL09 与 ABAP 批量反冲 Goods Issue

摘要 本文详细解析了SAP系统中VL09事务码的技术实现与业务应用。VL09用于反冲发货的货物移动,通过标准冲销路径(移动类型602冲销601)确保单据链路一致、状态机正确回退和业务规则生效。文章对比了经典VL09与Fiori应用在不同SAP产品形态中的位置,并针对STO场景提供了ME23N验证方法。核心内容包括WS_REVERSE_GOODS_ISSUE函数模块的调用要点、必须COMMIT的原因(SAP LUW机制),以及处理Handling Unit等限制条件的注意事项。最后给出了将VL09工程化的项目

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 595

mysql数据库的一些简单的sql语句 内连接 - 表的关联查询

# 创建一个user表 create table users( id int primary key auto_increment, name varchar(20), dpt_id int ); # 向user表中插入数据 insert into users values (null,'刘备',1), (null,'关羽',2), (null,'赵

Wang的专栏 4264

硬件学习手册【总目录】

欢迎大家来到《硬件学习手册》,专栏主要包括 《硬件经验手册》《电子元器件器件手册》《PCB手册》《CPU手册》《元器件选型手册》五个分册。在开始专栏的更新前,博主先列出专栏的大纲,以供大家参考。大家直接点击大纲中的蓝色标题即可轻松传送。

fydar的博客 5861

数据库、数据库类型、RDBMS以及MySQL

什么是数据库 数据库 就是按一定的结构来组织、存储和管理数据的仓库 可以很方便的进行crud, 能提供多个用户共享、具有尽可能小的冗余度、与应用程序批次独立的数据集合。 其他持久储存缺点:文件操作(不灵活) 数据库类型 包括 : 关系型 和 非关系型 【关系型】 MySQL MariaDB PostgreSQL Microsoft SQL Server Oracle数据库 Sybase 【...

Wang的专栏 4039

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

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

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

Eggjs笔记:Eggjs集成ElasticSearch及CRUD操作

相关文档 https://www.elastic.co/guide/index.html https://www.elastic.co/guide/en/elasticsearch/client https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/configuration.html https://www.elastic.co/guide/en/elasticsearch/client/javascrip

Wang的专栏 3530

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Redis: 集群高可用之故障转移和集群迁移

若要检查源和目标是否数据统一,还可选择阿里配套工具RedisFullCheck。3.4 使用 RedisFullCheck 工具检查。下载官方编译好的工具包,直接解压后就能使用。故障转移,包括自动故障转移和手动故障转移。运行之后,就给一个反馈结果,如果是。1.2 原集群与目标集群结构不一致。1.1 原集群与目标集群结构一致。2 ) 手动故障转移。

Wang的专栏 2918

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Python笔记:基于Django框架的数据库设计

概述 需要根据《项目建议书》、《需求说明书》、界面原型、各种标准规范对数据库进行设计, 我们目前先参考这一设计图 结构设计 1 ) 找实体 实体是实体-关系模型的基本对象, 是现实世界中各种事物的抽象。 凡是可以相互区 开并可以被识 的事、物、概念等对象均可认为是实体。 基本的实体列表如下: 会员 类别 商品 订单 订单详情 收货地址 商品评论 商品图片 友情链接 站内公告 … ...

Wang的专栏 2772

Elastic Stack梳理:集群搭建指南之高可用架构与实战部署

本文介绍了Elasticsearch分布式架构和Cerebro监控工具的部署策略。主要内容包括: ES集群角色划分(主节点、数据节点、协调节点)及功能说明 Cerebro监控工具的独立部署方法和访问方式 集群拓扑规划示例,包含节点IP分配和架构拓扑图 各类型节点的配置原则和数量计算公式 高可用主节点配置要点及示例配置 生产环境优化建议,包括分片规划、硬件配置和安全措施 文章提供了完整的集群部署方案,涵盖从基础概念到具体实施的各个环节,适用于不同规模的ES集群建设。

Wang的专栏 2545

Redis: 集群环境搭建,集群状态检查,分析主从日志,查看集群信息

当从节点获得足够多的选票时,它就会成为新的主节点,并增加自己的configEpoch来更新槽位配置。在Redis集群中,纪元的更新通常是由节点间的通信和状态变更触发的。例如,当某个节点接收到来自其他节点的状态变更通知时,它会比较通知中的纪元与自己的纪元。如果通知中的纪元更大,则更新自己的纪元。确保集群状态的一致性:通过递增的纪元,集群中的节点可以确保它们对集群状态的认知是一致的。通过递增的纪元版本号,集群中的节点可以确保它们对集群状态的认知是一致的,并解决可能出现的配置冲突问题。4 )纪元的更新机制。

Wang的专栏 2466

MySQL: 数据库性能的决定性因素之从双十一大促高并发场景看系统瓶颈与优化路径

电商大促期间,数据库面临高并发写入、连接数暴增、慢查询积压等核心挑战。本文分析了锁竞争、主从延迟等关键性能瓶颈,并提出多种优化方案:1)使用乐观锁通过版本号控制库存超卖;2)CAS机制实现无锁并发;3)分布式锁协调多节点操作。这些方案在保证数据一致性的同时提升吞吐量,适用于库存扣减、订单创建等典型场景,有效解决数据库扩展难题。

Wang的专栏 2426

Redis: Sentinel哨兵监控架构及环境搭建

在主从模式下,我们通过从节点只读模式提高了系统的并发能力并发不断增加,只需要扩展从节点即可,只要主从服务器之间,网络连接正常主服务器就会将写入自己的数据同步更新给从服务器,从而保证主从服务器的数据相同在这种架构下,它仍然是有一些缺点的,比如说它的可靠性保证不是很好,因为主从模式下,主节点故障了便无法提供写入的服务现在,我们通过哨兵来解决这个问题然后,主节点其实写的压力也是并没有被释放的包括主从之间的数据是相同的,它还有数据冗余一个问题后面集群也会解决这个问题。

Wang的专栏 2181
上一篇: PostgreSQL笔记23:Checkpoint机制与脏页处理深度解析
下一篇: PostgreSQL笔记25:数据写入与读取流程及IO模型演进
Wang's Blog
博客等级 码龄12年 7438粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

Wang's Blog

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

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

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

打赏作者

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

抵扣说明:

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

余额充值