Postgresql
使用帶有 pg_restore 的並行恢復沒有加速
我需要一個像 Postgresql 中的 10TB-15TB 這樣的大型數據庫來進行基準測試。
我創建了一個較小的 ~100GB 範例數據庫,
pgbench
如下所示:pgbench -i -s 7000 --no-vacuum exampledb
custom
但是,在從格式(使用創建)進行並行恢復時,我觀察到沒有加速pg_dump -F c ...
。包括從.sql
轉儲中恢復:time psql -d pgbench7000 < pgbench7000.sql SET SET SET SET SET set_config ------------ (1 row) SET SET SET SET SET SET CREATE TABLE ALTER TABLE CREATE TABLE ALTER TABLE CREATE TABLE ALTER TABLE CREATE TABLE ALTER TABLE COPY 700000000 COPY 7000 COPY 0 COPY 70000 ALTER TABLE ALTER TABLE ALTER TABLE real 32m1.539s user 3m28.575s sys 1m40.125s #################### time pg_restore -d pgbench7000 pgbench7000.custom real 20m7.504s user 2m35.556s sys 0m35.750s #################### time pg_restore -j 16 -d pgbench7000 pgbench7000.custom real 20m56.565s user 2m57.547s sys 0m40.096s
我為 Postgresql 伺服器提供了大量資源:
max_connections = 1000 shared_buffers = 94GB # 25% of system's memory work_mem = 512MB maintenance_work_mem = 12GB effective_io_concurrency = 500 max_worker_processes = 50 max_parallel_maintenance_workers = 10 max_parallel_workers_per_gather = 10 max_parallel_workers = 50
這個盒子非常強大,它有 374GB 的 RAM、72 個 vCPU 和安裝在 NFS 上的快速 NAS 儲存(這是 PG 數據目錄所在的位置)。
pgbench
創建一個相當簡單的數據庫,大約有四張表,只有一張表很大,佔用了大部分空間。這可能是缺乏加速的原因嗎?誰能告訴瓶頸在哪裡?還是只是數據庫結構?
環境:Centos 7.9(這是我必須使用的),從項目 repo 安裝的 Postgres 11。
並行還原並行執行不同的操作,但不並行化單個操作。由於 pgbench 由一張表主導,因此在客戶端級別上沒有太多可以並行完成的事情。
使用一些 shell 腳本,您可以並行執行 pg_restore 多次,將每次指向不同的數據庫名稱。(但是您可以使用相同的腳本來
pgbench -i -s 7000 $DBNAME &
代替,跳過轉儲和重新載入步驟。)