pg /c database 通过。似乎是pg使用 open/write 写入了某个文件,通过 fopen/fscanf 绕过了hook路径导致的。出现了新的段错误。
This commit is contained in:
@@ -15,10 +15,14 @@ dynamic_shared_memory_type = sysv
|
||||
|
||||
# 4. 重启 PostgreSQL
|
||||
|
||||
## 清理旧空间
|
||||
sudo systemctl stop postgresql
|
||||
pkill -9 -u postgres postgres || true
|
||||
rm -rf /home/lian/pg/pgdata
|
||||
rm -rf /zvfs/pg_ts_bench
|
||||
rm -rf /tmp/pg.log
|
||||
|
||||
## 初始化
|
||||
sudo chown -R postgres:postgres /home/lian/pg
|
||||
sudo -u postgres mkdir -p /home/lian/pg/pgdata
|
||||
sudo chown -R postgres:postgres /home/lian/pg/pgdata
|
||||
@@ -26,36 +30,42 @@ sudo chown -R postgres:postgres /home/lian/pg/pgdata
|
||||
sudo -u postgres env LD_PRELOAD=/home/lian/try/zvfs/src/libzvfs.so \
|
||||
/usr/lib/postgresql/12/bin/initdb -D /home/lian/pg/pgdata
|
||||
|
||||
## 修改配置文件
|
||||
cp ./postgresql.conf /home/lian/pg/pgdata/
|
||||
sudo chown -R postgres:postgres /home/lian/pg/pgdata/postgresql.conf
|
||||
|
||||
sudo -u postgres env LD_PRELOAD=/home/lian/try/zvfs/src/libzvfs.so \
|
||||
/usr/lib/postgresql/12/bin/pg_ctl -D /home/lian/pg/pgdata -l /tmp/pg.log start
|
||||
|
||||
sudo -u postgres env LD_PRELOAD=/home/lian/try/zvfs/src/libzvfs.so \
|
||||
/usr/lib/postgresql/12/bin/psql
|
||||
|
||||
sudo -u postgres env LD_PRELOAD=/home/lian/try/zvfs/src/libzvfs.so \
|
||||
/usr/lib/postgresql/12/bin/pg_ctl -D /home/lian/pg/pgdata -l /tmp/pg.log restart
|
||||
|
||||
# 创建测试环境
|
||||
## 创建测试环境
|
||||
sudo -u postgres mkdir -p /zvfs/pg_ts_bench
|
||||
sudo chown -R postgres:postgres /zvfs/pg_ts_bench
|
||||
sudo chmod 700 /zvfs/pg_ts_bench
|
||||
|
||||
CREATE TABLESPACE zvfs_ts LOCATION '/zvfs/pg_ts_bench';
|
||||
DROP DATABASE IF EXISTS benchdb;
|
||||
CREATE DATABASE benchdb TABLESPACE zvfs_ts;
|
||||
|
||||
DROP TABLE IF EXISTS hook_probe;
|
||||
CREATE TABLE hook_probe(id int) TABLESPACE zvfs_ts;
|
||||
INSERT INTO hook_probe VALUES (1);
|
||||
INSERT INTO hook_probe VALUES (2);
|
||||
INSERT INTO hook_probe VALUES (3);
|
||||
INSERT INTO hook_probe VALUES (4);
|
||||
SELECT * FROM hook_probe;
|
||||
DELETE FROM hook_probe WHERE id = 1;
|
||||
UPDATE hook_probe SET id = 11 WHERE id = 2;
|
||||
SELECT * FROM hook_probe;
|
||||
|
||||
## 启动服务
|
||||
sudo -u postgres env LD_PRELOAD=/home/lian/try/zvfs/src/libzvfs.so \
|
||||
/usr/lib/postgresql/12/bin/pg_ctl -D /home/lian/pg/pgdata -l /tmp/pg.log start
|
||||
|
||||
sudo -u postgres env \
|
||||
LD_PRELOAD=/home/lian/try/zvfs/src/libzvfs.so \
|
||||
ZVFS_DEBUG_OPEN=1 \
|
||||
ZVFS_DEBUG_OPEN_MATCH=PG_VERSION \
|
||||
ZVFS_DEBUG_RW=1 \
|
||||
/usr/lib/postgresql/12/bin/pg_ctl -D /home/lian/pg/pgdata -l /tmp/pg.log start
|
||||
|
||||
## 打开命令行工具
|
||||
sudo -u postgres env LD_PRELOAD=/home/lian/try/zvfs/src/libzvfs.so \
|
||||
/usr/lib/postgresql/12/bin/psql
|
||||
|
||||
|
||||
sudo -u postgres env LD_PRELOAD=/home/lian/try/zvfs/src/libzvfs.so \
|
||||
ZVFS_DEBUG_OPEN=1 \
|
||||
ZVFS_DEBUG_OPEN_MATCH=PG_VERSION \
|
||||
ZVFS_DEBUG_RW=1 \
|
||||
/usr/lib/postgresql/12/bin/psql
|
||||
|
||||
## 重启服务
|
||||
sudo -u postgres env LD_PRELOAD=/home/lian/try/zvfs/src/libzvfs.so \
|
||||
/usr/lib/postgresql/12/bin/pg_ctl -D /home/lian/pg/pgdata -l /tmp/pg.log restart
|
||||
|
||||
|
||||
# 5. 验证配置生效
|
||||
@@ -63,15 +73,76 @@ pid=$(pgrep -u postgres -xo postgres)
|
||||
echo "pid=$pid"
|
||||
sudo grep libzvfs /proc/$pid/maps
|
||||
|
||||
sudo -u postgres psql -p 5432 -c "show data_directory;"
|
||||
sudo -u postgres psql -c "SHOW shared_memory_type;"
|
||||
sudo -u postgres psql -c "SHOW dynamic_shared_memory_type;"
|
||||
show data_directory;
|
||||
SHOW shared_memory_type;
|
||||
SHOW dynamic_shared_memory_type;
|
||||
```
|
||||
|
||||
# 6. 创建测试库(如未创建)
|
||||
## 简易功能测试
|
||||
```shell
|
||||
# 1. 创建 tablespace
|
||||
DROP TABLESPACE IF EXISTS zvfs_ts;
|
||||
CREATE TABLESPACE zvfs_ts LOCATION '/zvfs/pg_ts_bench';
|
||||
|
||||
sudo -u postgres createdb benchdb
|
||||
# 2. 创建数据库
|
||||
DROP DATABASE IF EXISTS benchdb;
|
||||
CREATE DATABASE benchdb TABLESPACE zvfs_ts;
|
||||
|
||||
# 7. 运行你的 bench 脚本
|
||||
## 3. 连接数据库
|
||||
\c benchdb
|
||||
|
||||
# -- 查看数据库默认 tablespace
|
||||
SHOW default_tablespace;
|
||||
|
||||
# 4. 创建表(默认 tablespace)
|
||||
DROP TABLE IF EXISTS hook_probe;
|
||||
CREATE TABLE hook_probe(
|
||||
id int,
|
||||
val text
|
||||
);
|
||||
|
||||
INSERT INTO hook_probe VALUES (1,'a');
|
||||
INSERT INTO hook_probe VALUES (2,'b');
|
||||
INSERT INTO hook_probe VALUES (3,'c');
|
||||
INSERT INTO hook_probe VALUES (4,'d');
|
||||
|
||||
SELECT * FROM hook_probe;
|
||||
|
||||
# 5. UPDATE / DELETE 测试
|
||||
DELETE FROM hook_probe WHERE id = 1;
|
||||
UPDATE hook_probe SET id = 11 WHERE id = 2;
|
||||
SELECT * FROM hook_probe;
|
||||
|
||||
|
||||
# 6. 批量 INSERT 测试
|
||||
INSERT INTO hook_probe
|
||||
SELECT generate_series(100,10000), 'bulk';
|
||||
|
||||
SELECT count(*) FROM hook_probe;
|
||||
|
||||
# 7. 创建索引(测试 index file)
|
||||
CREATE INDEX idx_hook_probe_id ON hook_probe(id);
|
||||
|
||||
# 8. 大对象测试(TOAST)
|
||||
INSERT INTO hook_probe VALUES (99999, repeat('zvfs_test_',1000));
|
||||
|
||||
# 9. VACUUM 测试
|
||||
VACUUM hook_probe;
|
||||
|
||||
# 10. ANALYZE
|
||||
ANALYZE hook_probe;
|
||||
|
||||
# 11. 查看物理文件位置
|
||||
SELECT
|
||||
relname,
|
||||
pg_relation_filepath(oid)
|
||||
FROM pg_class
|
||||
WHERE relname='hook_probe';
|
||||
|
||||
# 12. 删表
|
||||
DROP TABLE IF EXISTS hook_probe;
|
||||
|
||||
|
||||
# 13. 压测
|
||||
bash /home/lian/try/zvfs/scripts/run_pgbench_no_mmap.sh
|
||||
```
|
||||
Reference in New Issue
Block a user