【PostgreSQL的WAL日志解析工具pg_waldump/pg_xlogdump】

PostgreSQL利用日志文件来防止断电之类的故障导致的数据丢失,任何试图修改数据库的操作都会写一份日志记录到磁盘,这个日志称为XLOG/WAL。在数据库定位问题时,就可以使用pg_xlogdump/pg_waldump来解析XLOG/WAL日志,包括日志类型、对应的事务号、修改的文件等等。

pg_xlogdump/pg_waldump是查不出数据的,要查出数据,首先要有数据结构,然后要有数据。
数据结构是需要查数据库的元数据才能查到,pg_xlogdump没办法做到。PostgreSQL基于XLOG的恢复并不是逻辑恢复,而是物理块的恢复。所以不需要解读数据。

pg_waldump decodes and displays PostgreSQL write-ahead logs for debugging.Usage:pg_waldump [OPTION]... [STARTSEG [ENDSEG]]Options:-b, --bkp-details      output detailed information about backup blocks-B, --block=N          with --relation, only show records that modify block N-e, --end=RECPTR       stop reading at WAL location RECPTR-f, --follow           keep retrying after reaching end of WAL-F, --fork=FORK        only show records that modify blocks in fork FORK;valid names are main, fsm, vm, init-n, --limit=N          number of records to display-p, --path=PATH        directory in which to find WAL segment files or adirectory with a ./pg_wal that contains such files(default: current directory, ./pg_wal, $PGDATA/pg_wal)-q, --quiet            do not print any output, except for errors-r, --rmgr=RMGR        only show records generated by resource manager RMGR;use --rmgr=list to list valid resource manager names-R, --relation=T/D/R   only show records that modify blocks in relation T/D/R-s, --start=RECPTR     start reading at WAL location RECPTR-t, --timeline=TLI     timeline from which to read WAL records(default: 1 or the value used in STARTSEG)-V, --version          output version information, then exit-w, --fullpage         only show records with a full page write-x, --xid=XID          only show records with transaction ID XID-z, --stats[=record]   show statistics instead of records(optionally, show per-record statistics)--save-fullpage=DIR    save full page images to DIR-?, --help             show this help, then exitReport bugs to <pgsql-bugs@lists.postgresql.org>.
PostgreSQL home page: <https://www.postgresql.org/>

中文解释:
-b, --bkp-details 输出有关备份块的细节。
-B, --block=N ,带上–relation仅显示修改块N的记录
-e, --end=RECPTR 在指定的日志位置停止读取,而不是一直读取到日志流的末尾。
-f, --follow 在到达可用 WAL 的末尾之后,保持每秒轮询一次是否有新的 WAL 出现。
-F, --fork=FORK 只显示fork fork中修改块的记录;有效名称为main、fsm、vm、init
-n, --limit=N 显示指定数量的记录,然后停止。
-p, --path=PATH 要在哪个目录中寻找日志段文件。默认是在当前目录的pg_xlog 子目录中搜索。
-r, --rmgr=RMGR 只显示由指定资源管理器生成的记录。如果把list作为资源管理器名称 传递给这个选项,则打印出可用资源管理器名称的列表然后退出。
-R, --relation=T/D/R 仅显示修改T/D/R关系中的块的记录
-s, --start=RECPTR 要从哪个日志位置开始读取。默认是从找到的最早的文件的第一个可用日志记录开始。
-t, --timeline=TLI 要从哪个时间线读取日志记录。默认是使用startseg(如果指定) 中的值,否则默认为 1
-V, --version 打印pg_xlogdump版本并且退出。
-w, --fullpage 只显示full page write写入的记录
-x, --xid=XID 只显示用给定事务 ID 标记的记录。
-z, --stats[=record] 显示概括统计信息(记录的数量和尺寸以及全页镜像)而不是显示 每个记录。可以选择针对每个记录生成统计信息,而不是针对每个 资源管理器生成。
–save-fullpage=DIR 将full page image保存到DIR

一、常规用法

1.根据txid定位xlog里的相关记录

当每个新记录被写入时,WAL记录被追加到WAL日志中。 插入位置由日志序列号(LSN)描述,该日志序列号是日志中的字节偏移量, 随每个新记录单调递增。而txid表示事物id,一个txid可以对应多个lsn,insert操作会记录一次lsn号,commit操作会记录一次lsn号,即每次操作记录都会生成lsn。

postgres=# select xmin,xmax,ctid,* from text_waldump;xmin | xmax | ctid  | id | name |           times
------+------+-------+----+------+----------------------------1016 |    0 | (0,1) |  1 | ysl  | 2023-12-18 10:32:52.0541721019 |    0 | (0,4) |  2 | ysl2 | 2023-12-18 10:33:01.112948
(2 rows)postgres=# select pg_relation_filenode('text_waldump');pg_relation_filenode
----------------------57978
(1 row)postgres@ubuntu-linux-22-04-desktop:~/data-16beta1/pg_wal$ pg_waldump  000000010000000000000004 -x 1019
rmgr: Heap        len (rec/tot):     71/    71, tx:       1019, lsn: 0/04FD80D8, prev 0/04FD80A0, desc: HOT_UPDATE old_xmax: 1019, old_off: 2, old_infobits: [], flags: 0x60, new_xmax: 0, new_off: 4, blkref #0: rel 1663/5/57978 blk 0
rmgr: Transaction len (rec/tot):     34/    34, tx:       1019, lsn: 0/04FD8120, prev 0/04FD80D8, desc: COMMIT 2023-12-18 10:33:37.837373 CST
pg_waldump: error: error in WAL record at 0/4FD83D8: invalid record length at 0/4FD8410: expected at least 24, got 0

如下是解析内容的部分解释:

rmgr : Heap
内部将WAL日志归类到20多种不同的资源管理器,使用pg_waldump --rmgr=list可以查看支持的类型:XLOG, Transaction, Storage, CLOG, Database, Tablespace, MultiXact, RelMap, Standby, Heap2, Heap, Btree, Hash, Gin, Gist, Sequence, SPGist, BRIN, CommitTs, ReplicationOrigin, Generic, LogicalMessage

len (rec/tot): 71/ 71 :
WAL记录的总长度是71字节,其中main data部分是71字节

tx: 1019
事物id

lsn: 0/04FD80D8
本WAL记录的LSN

prev 0/04FD80D8
上条WAL记录的LSN

desc: HOT_UPDATE
这条记录的类型:HOT更新 (HOT update) 一个UPDATE,其中新的元组成为仅堆元组,并且不创建新的索引条目。

old_xmax:1019
记录update旧元组的xmax,redo时用以填充元组头数据

old_off: 2
记录旧元组在其page中的相对位置

old_infobits: []
记录旧元组的t_infomask和t_infomask2的值,redo时用以填充元组头数据

flags: 0x60
标志位

new_xmax: 0
记录新元组的xmax

new_off: 4
记录新元组在其page中的相对位置

blkref #0: rel 1663/5/57978 blk 0
引用的第一个page所属的对表文件为1663/5/57978,块号为0(即ctid的前半部分)

2.获取xlog里的记录的统计信息

命令加 -z

postgres@ubuntu-linux-22-04-desktop:~/data-16beta1/pg_wal$ pg_waldump  000000010000000000000004 -z
WAL statistics between 0/4000028 and 0/4FD8410:
Type                                           N      (%)          Record size      (%)             FPI size      (%)        Combined size      (%)
----                                           -      ---          -----------      ---             --------      ---        -------------      ---
XLOG                                        1953 (  2.86)               100233 (  2.02)              8546456 ( 74.66)              8646689 ( 52.66)
Transaction                                  133 (  0.19)                74913 (  1.51)                    0 (  0.00)                74913 (  0.46)
Storage                                      631 (  0.92)                26502 (  0.53)                    0 (  0.00)                26502 (  0.16)
CLOG                                           0 (  0.00)                    0 (  0.00)                    0 (  0.00)                    0 (  0.00)
Database                                       3 (  0.00)                  106 (  0.00)                    0 (  0.00)                  106 (  0.00)
Tablespace                                     6 (  0.01)                  208 (  0.00)                    0 (  0.00)                  208 (  0.00)
MultiXact                                      0 (  0.00)                    0 (  0.00)                    0 (  0.00)                    0 (  0.00)
RelMap                                         2 (  0.00)                 1130 (  0.02)                    0 (  0.00)                 1130 (  0.01)
Standby                                      321 (  0.47)                15638 (  0.31)                    0 (  0.00)                15638 (  0.10)
Heap2                                        730 (  1.07)               131215 (  2.64)               313228 (  2.74)               444443 (  2.71)
Heap                                       61623 ( 90.14)              4413499 ( 88.76)              1102820 (  9.63)              5516319 ( 33.60)
Btree                                       2964 (  4.34)               208841 (  4.20)              1484564 ( 12.97)              1693405 ( 10.31)
Hash                                           0 (  0.00)                    0 (  0.00)                    0 (  0.00)                    0 (  0.00)
Gin                                            0 (  0.00)                    0 (  0.00)                    0 (  0.00)                    0 (  0.00)
Gist                                           0 (  0.00)                    0 (  0.00)                    0 (  0.00)                    0 (  0.00)
Sequence                                       0 (  0.00)                    0 (  0.00)                    0 (  0.00)                    0 (  0.00)
SPGist                                         0 (  0.00)                    0 (  0.00)                    0 (  0.00)                    0 (  0.00)
BRIN                                           0 (  0.00)                    0 (  0.00)                    0 (  0.00)                    0 (  0.00)
CommitTs                                       0 (  0.00)                    0 (  0.00)                    0 (  0.00)                    0 (  0.00)
ReplicationOrigin                              0 (  0.00)                    0 (  0.00)                    0 (  0.00)                    0 (  0.00)
Generic                                        0 (  0.00)                    0 (  0.00)                    0 (  0.00)                    0 (  0.00)
LogicalMessage                                 0 (  0.00)                    0 (  0.00)                    0 (  0.00)                    0 (  0.00)--------                      --------                      --------                      --------
Total                                      68366                       4972285 [30.28%]             11447068 [69.72%]             16419353 [100%]
pg_waldump: error: error in WAL record at 0/4FD83D8: invalid record length at 0/4FD8410: expected at least 24, got 0

命令加行–stats=record

postgres@ubuntu-linux-22-04-desktop:~/data-16beta1/pg_wal$ pg_waldump  000000010000000000000004 --stats=record
WAL statistics between 0/4000028 and 0/4FD8410:
Type                                           N      (%)          Record size      (%)             FPI size      (%)        Combined size      (%)
----                                           -      ---          -----------      ---             --------      ---        -------------      ---
XLOG/CHECKPOINT_SHUTDOWN                      26 (  0.04)                 2964 (  0.06)                    0 (  0.00)                 2964 (  0.02)
XLOG/CHECKPOINT_ONLINE                        47 (  0.07)                 5358 (  0.11)                    0 (  0.00)                 5358 (  0.03)
XLOG/NEXTOID                                  11 (  0.02)                  330 (  0.01)                    0 (  0.00)                  330 (  0.00)
XLOG/FPI                                    1869 (  2.73)                91581 (  1.84)              8546456 ( 74.66)              8638037 ( 52.61)
Transaction/COMMIT                           103 (  0.15)                73889 (  1.49)                    0 (  0.00)                73889 (  0.45)
Transaction/ABORT                             30 (  0.04)                 1024 (  0.02)                    0 (  0.00)                 1024 (  0.01)
Storage/CREATE                               631 (  0.92)                26502 (  0.53)                    0 (  0.00)                26502 (  0.16)
Database/CREATE_WAL_LOG                        2 (  0.00)                   68 (  0.00)                    0 (  0.00)                   68 (  0.00)
Database/DROP                                  1 (  0.00)                   38 (  0.00)                    0 (  0.00)                   38 (  0.00)
Tablespace/CREATE                              4 (  0.01)                  148 (  0.00)                    0 (  0.00)                  148 (  0.00)
Tablespace/DROP                                2 (  0.00)                   60 (  0.00)                    0 (  0.00)                   60 (  0.00)
RelMap/UPDATE                                  2 (  0.00)                 1130 (  0.02)                    0 (  0.00)                 1130 (  0.01)
Standby/LOCK                                  85 (  0.12)                 3582 (  0.07)                    0 (  0.00)                 3582 (  0.02)
Standby/RUNNING_XACTS                        231 (  0.34)                11606 (  0.23)                    0 (  0.00)                11606 (  0.07)
Standby/INVALIDATIONS                          5 (  0.01)                  450 (  0.01)                    0 (  0.00)                  450 (  0.00)
Heap2/PRUNE                                   84 (  0.12)                 5960 (  0.12)               101844 (  0.89)               107804 (  0.66)
Heap2/VISIBLE                                275 (  0.40)                16250 (  0.33)                40960 (  0.36)                57210 (  0.35)
Heap2/MULTI_INSERT                           355 (  0.52)                86376 (  1.74)               170424 (  1.49)               256800 (  1.56)
Heap2/MULTI_INSERT+INIT                       16 (  0.02)                22629 (  0.46)                    0 (  0.00)                22629 (  0.14)
Heap/INSERT                                60029 ( 87.81)              4280871 ( 86.09)               455304 (  3.98)              4736175 ( 28.85)
Heap/DELETE                                  957 (  1.40)                51993 (  1.05)               322344 (  2.82)               374337 (  2.28)
Heap/UPDATE                                   51 (  0.07)                12277 (  0.25)                95116 (  0.83)               107393 (  0.65)
Heap/HOT_UPDATE                              145 (  0.21)                15107 (  0.30)                67440 (  0.59)                82547 (  0.50)
Heap/LOCK                                     47 (  0.07)                 2573 (  0.05)                56736 (  0.50)                59309 (  0.36)
Heap/INPLACE                                  39 (  0.06)                 5442 (  0.11)               105880 (  0.92)               111322 (  0.68)
Heap/INSERT+INIT                             353 (  0.52)                43734 (  0.88)                    0 (  0.00)                43734 (  0.27)
Heap/UPDATE+INIT                               2 (  0.00)                 1502 (  0.03)                    0 (  0.00)                 1502 (  0.01)
Btree/INSERT_LEAF                           2927 (  4.28)               201356 (  4.05)              1481200 ( 12.94)              1682556 ( 10.25)
Btree/INSERT_UPPER                             6 (  0.01)                  366 (  0.01)                 2212 (  0.02)                 2578 (  0.02)
Btree/SPLIT_R                                  6 (  0.01)                 4648 (  0.09)                    0 (  0.00)                 4648 (  0.03)
Btree/INSERT_POST                              3 (  0.00)                  185 (  0.00)                 1152 (  0.01)                 1337 (  0.01)
Btree/DEDUP                                    1 (  0.00)                  208 (  0.00)                    0 (  0.00)                  208 (  0.00)
Btree/DELETE                                   8 (  0.01)                  908 (  0.02)                    0 (  0.00)                  908 (  0.01)
Btree/NEWROOT                                 13 (  0.02)                 1170 (  0.02)                    0 (  0.00)                 1170 (  0.01)--------                      --------                      --------                      --------
Total                                      68366                       4972285 [30.28%]             11447068 [69.72%]             16419353 [100%]
pg_waldump: error: error in WAL record at 0/4FD83D8: invalid record length at 0/4FD8410: expected at least 24, got 0

各个列的解释:

Type:xlog中的日志类型
N: 次数及占比
Record size:记录的大小及占比
FPI size: full page image大小及占比
combined size: 记录和FPI的大小总和

开启了full_page_writes会导致wal中的FPI占比大

3.指定开始和结束的lsn

-s和-e分别指定wal里开始和结束的lsn

postgres@ubuntu-linux-22-04-desktop:~/data-16beta1/pg_wal$ pg_waldump  -s 0/4000028 -e 0/4000185
rmgr: Standby     len (rec/tot):     50/    50, tx:          0, lsn: 0/04000028, prev 0/03000100, desc: RUNNING_XACTS nextXid 887 latestCompletedXid 886 oldestRunningXid 887
rmgr: Standby     len (rec/tot):     50/    50, tx:          0, lsn: 0/04000060, prev 0/04000028, desc: RUNNING_XACTS nextXid 887 latestCompletedXid 886 oldestRunningXid 887
rmgr: XLOG        len (rec/tot):    114/   114, tx:          0, lsn: 0/04000098, prev 0/04000060, desc: CHECKPOINT_ONLINE redo 0/4000060; tli 1; prev tli 1; fpw true; xid 0:887; oid 41399; multi 1; offset 0; oldest xid 722 in DB 24587; oldest multi 1 in DB 5; oldest/newest commit timestamp xid: 0/0; oldest running xid 887; online
rmgr: Standby     len (rec/tot):     50/    50, tx:          0, lsn: 0/04000110, prev 0/04000098, desc: RUNNING_XACTS nextXid 887 latestCompletedXid 886 oldestRunningXid 887

4.根据数据库对象查询xlog的记录

使用 --relation=关键字或者-R,后边跟的格式应该是"tablespace OID/database OID/relation filenode",否则会报错。


postgres=# select oid from pg_tablespace where spcname='pg_default';oid
------1663
(1 row)postgres=# select oid from pg_database where datname='postgres';oid
-----5
(1 row)postgres=# select pg_relation_filenode('text_waldump');pg_relation_filenode
----------------------57978
(1 row)postgres@ubuntu-linux-22-04-desktop:~/data-16beta1/pg_wal$ pg_waldump  000000010000000000000004  -R 1663/5/57978
rmgr: Heap        len (rec/tot):     71/    71, tx:       1016, lsn: 0/04FD7EB8, prev 0/04FD7E80, desc: INSERT+INIT off: 1, flags: 0x00, blkref #0: rel 1663/5/57978 blk 0
rmgr: Heap        len (rec/tot):     79/    79, tx:       1017, lsn: 0/04FD7F60, prev 0/04FD7F28, desc: INSERT off: 2, flags: 0x00, blkref #0: rel 1663/5/57978 blk 0
rmgr: Heap        len (rec/tot):     79/    79, tx:       1018, lsn: 0/04FD8028, prev 0/04FD7FD8, desc: INSERT off: 3, flags: 0x00, blkref #0: rel 1663/5/57978 blk 0
rmgr: Heap        len (rec/tot):     71/    71, tx:       1019, lsn: 0/04FD80D8, prev 0/04FD80A0, desc: HOT_UPDATE old_xmax: 1019, old_off: 2, old_infobits: [], flags: 0x60, new_xmax: 0, new_off: 4, blkref #0: rel 1663/5/57978 blk 0
rmgr: Heap        len (rec/tot):     54/    54, tx:       1020, lsn: 0/04FD8148, prev 0/04FD8120, desc: DELETE xmax: 1020, off: 3, infobits: [KEYS_UPDATED], flags: 0x00, blkref #0: rel 1663/5/57978 blk 0
pg_waldump: error: error in WAL record at 0/4FD83D8: invalid record length at 0/4FD8410: expected at least 24, got 0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/596276.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python】线程和多线程的使用

原文作者&#xff1a;我辈李想 版权声明&#xff1a;文章原创&#xff0c;转载时请务必加上原文超链接、作者信息和本声明。 文章目录 前言一、基本概念二、python线程1.函数调用2.类的调用 三、共享全局变量四、守护线程五、线程锁六、杀死进程 前言 一、基本概念 线程是计算…

java数据结构与算法刷题-----LeetCode70. 爬楼梯

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 很多人觉得动态规划很难&#xff0c;但它就是固定套路而已。其实动态规划只…

巨杉数据库荣登2023胡润全球猎豹企业榜

胡润研究院与广州南沙联合发布《2023胡润全球猎豹企业榜》&#xff0c;这是胡润研究院首次发布“全球猎豹企业”。榜单列出了全球成立于2000年后&#xff0c;五年内最有可能达到独角兽级十亿美金估值的高成长性企业。巨杉数据库凭借在分布式文档型数据库领域的创新突破&#xf…

理解机器学习中的术语

文章目录 求导&#xff0c;梯度代码实现 求导&#xff0c;梯度 高等数学中一个函数 y f ( x ) y f(x) yf(x)假设这个函数表示求出速度 &#xff0c; y ( 速度 k m / h ) 1000 ( m ) x ( 小时 h ) y(速度km/h) \frac{1000(m)}{x(小时 h)} y(速度km/h)x(小时h)1000(m)​那么…

「HarmonyOS」验证码多TextInput输入框焦点自动跳转问题

需求背景&#xff1a;需要做一个多输入框的验证码模块&#xff0c;输入验证码时输入后光标会自动跳转至下一个输入框&#xff0c;删除验证码时会自动删除上一个输入框内容&#xff0c;并且光标跳转至上一个输入框内。6位验证码全部输完后进行登录请求 具体样式如下图&#xff1…

mysql:SQL按时间查询方法总结

查询当天数据: select * from 表名 where to_days(时间字段名) = to_days(now()); 查询昨天数据: SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ) - TO_DAYS( 时间字段名) = 1 查询近7天数据: SELECT * FROM 表名 where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(时…

Android 收集崩溃(crash)日志并输出到本地

DefaultUncaughtExceptionHandler 是 Android 中的一个接口&#xff0c;用于处理未捕获异常。默认情况下&#xff0c;Android 系统有一个默认的未捕获异常处理器&#xff08;Thread.defaultUncaughtExceptionHandler&#xff09;当程序抛出未捕获的异常时&#xff0c;系统会调用…

通信网络(2)——DAI技术

一、简介 在今天的测试脚本过程中&#xff0c;遇到了ARP防攻击基于VLAN的DAI防攻击知识点&#xff0c;因此本篇文章将用于介绍为何DAI技术 二、DAI技术介绍 DAI技术是思科的一种技术&#xff0c;全称为Dynamic ARP Inspection&#xff0c;顾名思义动态ARP选择&#xff0c;这…

快速跳闸中间继电器 RXMS1-RK216 066-AD 24V 柜内安装,板后接线带中座

系列型号 RXMS1 RK 216 437快速跳闸继电器&#xff1b;RXMS1 RK 216 237快速跳闸继电器&#xff1b; RXMS1 RK 216 449快速跳闸继电器&#xff1b;RXMS1 RK 216 249快速跳闸继电器&#xff1b; RXMS1 RK 216 450快速跳闸继电器&#xff1b;RXMS1 RK 216 250快速跳闸继电器&…

three.js Raycaster(鼠标点击选中模型)

效果&#xff1a; 代码&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red"></div><div class"box-right"…

搜索与人工智能

前言 第一&#xff1a;通过博弈树搜索和启发式搜索的例子 了解基于搜索的通用问题求解方法 第二&#xff1a;了解人工智能发展的历程和社会影响 第三&#xff1a;了解机器学习的基本思想和典型应用 第四&#xff1a;了解人工智能应用开发的基本模式 内容 1.博弈树与剪纸…

URLConnection()和openStream()两个方法产生SSRF的原理和修复方法

今年是自主研发的第三个年份&#xff0c;也是重视安全的年份。 转一篇小文章&#xff1a; 0x00 前言 SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。比如从指定 URL 地址获取网页文本内容&#xff0c;加载指定地址的图…

Redis 过期策略

我们在set key的时候可以设置key的过期时间&#xff0c;哪redis是怎么处理过期的key的呢&#xff1f; 有三种过期策略 定时过期&#xff1a;每个设置过期时间的key会创建一个定时器&#xff0c;到过期时间就会立即对key进行清除。该策略可以立即清除过期的数据&#xff0c;对…

*JavaScript

*JavaScript ECMAScript: 数据类型和变量&#xff0c;选择结构&#xff0c;循环结构&#xff0c;对象&#xff0c;数组&#xff0c;函数&#xff0c;运算符(ES6特性) DOM: 文档对象模型 -Document:每个载入浏览器的 HTML 文档都会成为 Document 对象 节点获取&#xff1a; …

VR云游开启智慧旅游新纪元,打造“云旅游”新模式

元旦假期&#xff0c;全国文化和旅游市场平稳有序&#xff0c;家人和亲友的出游趋势稳步增加&#xff0c;演唱会、音乐节、跨年等活动的叠加让元旦出游更加吸引游客。在冰雪旅游热度持续攀升的时候&#xff0c;许多年轻群体已经开始使用VR云游进行智慧景区旅游&#xff0c;身临…

项目代码生成心得

1、如果一直ctrl B 生成不了代码&#xff0c;可能是卡住了&#xff0c;要run一下才行 2、sub chart里面千万不要加上内部自转移和en,du:不然里面的内容压根不会生成代码&#xff0c;Matlab认为它可以自己在里面自己转。 3、生成的代码跟设计图是不一样的&#xff01;&#xff…

Databend 的算力可扩展性

作者&#xff1a;尚卓燃&#xff08;PsiACE&#xff09; 澳门科技大学在读硕士&#xff0c;Databend 研发工程师实习生 Apache OpenDAL(Incubating) Committer PsiACE (Chojan Shang) GitHub 对于大规模分布式数据处理系统&#xff0c;为了更好应对数据、流量、和复杂性的增长…

CRYPTO现代密码学学习

CRYPTO现代密码学学习 RC4 加密算法RSA加密解密DES加密解密详解密钥的生成密文的生成 RC4 加密算法 简单介绍&#xff1a;RC4加密算法是一种对称加密算法&#xff0c;加密和解密使用同一个函数 初始化分为以下几个步骤 初始化存储0-255字节的Sbox(其实就是一个数组)填充key到…

爬虫工具(tkinter+scrapy+pyinstaller)

需求介绍输入&#xff1a;关键字文件&#xff0c;每一行数据为一爬取单元。若一行存在多个and关系的关键字 &#xff0c;则用|隔开处理&#xff1a;爬取访问6个网站的推送&#xff0c;获取推送内容的标题&#xff0c;发布时间&#xff0c;来源&#xff0c;正文第一段&#xff0…

Linux Kdump和Crash工具

Kdump Kdump是一种基于kexec的Linux内核崩溃捕获机制&#xff0c;简单来说系统启动时会预留一块内存&#xff0c;当系统崩溃调用命令kexec(kdump kernel)在预留的内存中启动kdump内核&#xff0c; 该内核会将此时内存中的所有运行状态和数据信息收集到一个coredump文件中以便…