Avatar

Organizations

README.md
  • 15年移动互联网产研经验,10年团队管理经验。
  • 经历过公司从0到1的创业过程,深知创业难点。
  • 拥有软件开发、运营商服务、大数据业务等多领域的工作经验。
  • 熟练使用 Office, Project, Visio, Axure, JsutinMind等产品管理工具。
  • 熟练使用 Linux, Docker, Python, H5, Javascript, MySQL, PostgreSQL 等开发工具。
  • 熟悉网络架构,拥有CCNA证书。

Popular posts

  1. PostgreSQL 频繁读写数据库的定期维护

    是的,频繁读写的 PostgreSQL 数据库绝对需要定期维护。这是保证数据库长期稳定运行、维持高性能和避免数据损坏的关键措施。

    🔧 必须的定期维护任务

    1. VACUUM 维护(最重要)

    -- 常规VACUUM(推荐每日执行)
    VACUUM ANALYZE;
    
    -- 针对特定表的VACUUM
    VACUUM ANALYZE your_busiest_table;
    
    -- 彻底的VACUUM(建议每周或每月)
    VACUUM FULL VERBOSE;
    

    2. ANALYZE 统计信息更新

    -- 更新统计信息(查询优化器需要)
    ANALYZE VERBOSE;
    
    -- 针对特定表
    ANALYZE VERBOSE your_busiest_table;
    

    3. 索引维护

    -- 重建碎片化严重的索引
    REINDEX INDEX your_index_name;
    REINDEX TABLE your_table_name;
    
    -- 并发重建(PostgreSQL 12+)
    REINDEX INDEX CONCURRENTLY your_index_name;
    

    📅 推荐维护计划

    每日维护

    -- 自动VACUUM通常足够,但可以补充
    VACUUM ANALYZE;
    

    每周维护

    -- 更彻底的维护
    VACUUM FULL ANALYZE;
    CHECKPOINT;
    

    每月维护

    -- 全面维护
    REINDEX DATABASE your_database;
    VACUUM FULL VERBOSE;
    ANALYZE VERBOSE;
    

    ⚙️ 自动化维护配置

    1. 调整 autovacuum 设置(postgresql.conf)

    # 针对频繁读写数据库的优化设置
    autovacuum = on
    autovacuum_vacuum_scale_factor = 0.1
    autovacuum_analyze_scale_factor = 0.05
    autovacuum_vacuum_cost_delay = 10ms
    autovacuum_vacuum_cost_limit = 1000
    

    2. 使用 pg_cron 扩展定时任务

    -- 安装pg_cron
    CREATE EXTENSION pg_cron;
    
    -- 每天凌晨3点执行VACUUM
    SELECT cron.schedule('0 3 * * *', 'VACUUM ANALYZE');
    
    -- 每周日凌晨2点执行维护
    SELECT cron.schedule('0 2 * * 0', 'VACUUM FULL ANALYZE');
    

    3. 操作系统定时任务(crontab)

    # 每天执行维护
    0 2 * * * psql -d your_db -c "VACUUM ANALYZE"
    
    # 每周执行全面维护
    0 3 * * 0 psql -d your_db -c "VACUUM FULL ANALYZE; REINDEX DATABASE your_db"
    

    📊 监控和维护检查

    1. 监控数据库状态

    -- 检查表膨胀情况
    SELECT schemaname, tablename, 
           n_dead_tup, n_live_tup,
           round(n_dead_tup::numeric/n_live_tup::numeric*100, 2) as dead_ratio
    FROM pg_stat_user_tables
    ORDER BY dead_ratio DESC;
    
    -- 检查索引状态
    SELECT schemaname, tablename, indexname,
           idx_scan, idx_tup_read, idx_tup_fetch
    FROM pg_stat_user_indexes;
    

    2. 检查 autovacuum 效果

    -- 查看autovacuum统计信息
    SELECT relname, last_vacuum, last_autovacuum, 
           last_analyze, last_autoanalyze
    FROM pg_stat_user_tables;
    

    🚨 维护注意事项

    1. 维护时间窗口:选择业务低峰期进行
    2. VACUUM FULL 谨慎使用:会锁表,影响业务
    3. 监控维护影响:使用 VERBOSE 选项查看详细情况
    4. 备份优先:重要维护前先备份数据

    🎯 针对频繁读写数据库的特殊维护

    -- 针对热点表增加维护频率
    ALTER TABLE your_busy_table SET (
        autovacuum_vacuum_scale_factor = 0.05,
        autovacuum_analyze_scale_factor = 0.02
    );
    
    -- 监控长事务和锁
    SELECT * FROM pg_locks WHERE granted = false;
    SELECT * FROM pg_stat_activity WHERE state <> 'idle';
    

    💡 维护最佳实践

    1. 定期检查:每周检查数据库状态
    2. 自动化:尽可能自动化维护任务
    3. 文档化:记录维护历史和问题
    4. 测试:在测试环境验证维护脚本
    5. 容量规划:定期评估存储增长趋势

    总结:对于频繁读写的 PostgreSQL 数据库,定期维护不是可选项,而是必需品。通过合理的维护计划,可以确保数据库的性能稳定性和数据完整性。

    postgresql database

  2. Debian 12 只安装VNC及i3桌面,就可以低成本的实现远程桌面环境

    安装

    # 安装通用工具
    apt-get install -y nano net-tools bzip2 procps apt-utils iputils-ping netcat-openbsd
    # 安装中文字体
    apt-get install -y locales fonts-wqy-microhei fonts-wqy-zenhei xfonts-wqy && \
        sed -i -e "s/# zh_CN.UTF-8 UTF-8/zh_CN.UTF-8 UTF-8/" /etc/locale.gen && \
        locale-gen zh_CN.UTF-8 &&\
        update-locale LANG=zh_CN.UTF-8 LANGUAGE=zh_CN:zh LC_ALL=zh_CN.UTF-8
    # 安装VNC
    apt-get install -y tigervnc-standalone-server
    # 安装i3桌面
    apt-get install -y i3-wm i3status i3blocks dmenu xfonts-base terminator dbus-x11 libdbus-glib-1-2 ; apt-get purge -y pm-utils *screensaver*
    
    apt-get clean
    

    配置i3桌面

    ~/.config/i3/config

    linux vnc tigerVNC i3 debian

  3. 修改CT虚拟机

    修改特权容器

    nano /etc/pve/lxc/<CTID>.conf
    
    • 删除或注释掉 unprivileged: 1 这一行。
    • 确保没有 lxc.idmap 相关的UID/GID映射配置(如有则删除)。

    CT虚拟机必须是特权容器,但创建CT虚拟机时,默认为非特权容器,要特别注意!!!

    安装

    apt update
    # 安装 Podman
    apt install -y podman pipx iptables # iptables必须安装,否则netavark无法运行
    # 安装 podman-compose
    apt install pipx \
        && pipx install podman-compose \
        && echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc \
        && . ~/.bashrc
    
    # 验证安装
    podman version ; podman-compose version
    # 防火墙一定要加这条,否则容器之间的名称解析无法工作
    iptables -A INPUT -p udp -m udp --dport 53 -j ACCEPT
    

    配置

    # 配置国内镜像源
    sed -E -i.bak \
        -e 's/^# (unqualified-search-registries = ).+$/\1["docker.io"]/' \
        -e 's/^# (\[\[registry\]\])$/\1/' \
        -e 's/^# (prefix = ).+"$/\1"docker.io"/' \
        -e '0,\/^# (location = ).+"$/s//\1"docker.1ms.run"/' \
        -e '0,\/^# (\[\[registry.mirror\]\])$/s//\1/' \
        -e '0,\/^# (location = ).*"$/s//\1"registry.cn-hangzhou.aliyuncs.com"/' \
        /etc/containers/registries.conf
    
    # nano /etc/containers/registries.conf
    unqualified-search-registries = ["docker.io"]
    
    [[registry]]
    prefix = "docker.io"
    location = "docker.1ms.run"
    
    [[registry.mirror]]
    location = "registry.cn-hangzhou.aliyuncs.com"  # 可选备用
    

    其实命令与Docker一致,非常方便好用。

    linux podman container

    1. 安装 OpenSSH 客户端
    # 检查是否已安装 OpenSSH 客户端
    > Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH.Client*'
    
    # 安装 OpenSSH 客户端
    > Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
    
    # 验证安装
    > ssh -V
    
    1. 安装 OpenSSH 服务器
    # 检查是否已安装 OpenSSH 服务器
    > Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH.Server*'
    
    # 安装 OpenSSH 服务器
    > Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
    
    # 启动 SSH 服务并设置为自动启动
    > Start-Service sshd
    > Set-Service -Name sshd -StartupType Automatic
    
    # 检查服务状态
    > Get-Service sshd
    # 重启服务
    > Restart-Service sshd
    
    1. 配置防火墙(允许 SSH 端口 22)
    # 允许入站 SSH 连接
    > New-NetFirewallRule -Name "OpenSSH-Server" -DisplayName "OpenSSH Server (sshd)" -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
    

    windows openssh

  4. 安装

    Windows

    1. 下载

    推荐使用 PowerShell1

    # 下载并安装 VC++ Redistributable,需要管理员模式
    Invoke-WebRequest -Uri "https://aka.ms/vs/17/release/vc_redist.x64.exe" -OutFile "$env:TEMP\vc_redist.x64.exe"
    Start-Process -Wait -FilePath "$env:TEMP\vc_redist.x64.exe" -ArgumentList "/install", "/quiet", "/norestart"
    # 下载micromamba
    Invoke-Webrequest -URI https://micro.mamba.pm/api/micromamba/win-64/latest -OutFile micromamba.tar.bz2
    # 使用7z解压
    & "C:\Program Files\7-Zip\7z.exe" x "micromamba.tar.bz2" -o"tmp"
    # 使用tar解压,系统内置不用安装
    mkdir micromamba
    tar -xvf .\tmp\micromamba.tar -C .\micromamba\
    .\micromamba\Library\bin\micromamba.exe --help
    # 查看输出
    

    2. 安装2

    .\micromamba\Library\bin\micromamba.exe shell init -s powershell -r C:\Your\Root\Prefix
    

    默认位置为 $HOME/micromamba,也就是 C:\Users\username\micromamba 。

    同时会在 PowerShell 的 Profile 文件中(相当于 Bash 的 .bashrc)添加以下代码,保证每次启动 PowerShell 时,都会自动初始化 Micromamba 。

    $HOME/Documents/WindowsPowerShell/profile.ps1

    #region mamba initialize
    # !! Contents within this block are managed by 'mamba shell init' !!
    $Env:MAMBA_ROOT_PREFIX = "C:\Users\username\micromamba"
    $Env:MAMBA_EXE = "C:\Users\username\micromamba\Library\bin\micromamba.exe"
    (& $Env:MAMBA_EXE 'shell' 'hook' -s 'powershell' -p $Env:MAMBA_ROOT_PREFIX) | Out-String | Invoke-Expression
    #endregion
    

    加入设置 micromamba 别名的命令。 设置别名后,即方便使用,也可配合 VSCode 的配置,实现自动启动开发环境。

    micromamba python windows

  5. 安装

    1. 环境准备

    # PowerShell 版本:≥5.0
    > $PSVersionTable.PSVersion
    
    # .NET Framework:≥4.5
    > $PSVersionTable.CLRVersion
    

    2. 安装

    > Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
    # 普通用户安装
    > Invoke-RestMethod -Uri https://blog.cuile.com/attachments/scripts/scoop_install.ps1 | Invoke-Expression
    # 管理员用户安装
    > irm blog.cuile.com/attachments/scripts/scoop_install.ps1 -outfile 'install.ps1'
    > .\install.ps1 -RunAsAdmin
    # 默认安装到 C:\Users\<user>\scoop
    # 验证安装
    > scoop help
    # 安装aria2,提升下载速度
    > scoop install aria2
    # 安装7zip,提升解压成功率
    > scoop install 7zip
    

    强制使用7zip解压

    // ~\.config\scoop\config.json
    {
      "7ZIPEXTRACT_USE_EXTERNAL": true
    }
    

    3. 使用

    windows scoop

    Post activity