关联博客:windows通用网线连接ubuntu实现ssh登录、桌面控制、文件共享
背景:
在个人ubuntu机器上安装了pgsql,新建了一张表插入了2000w+数据用于模拟大批量数据分页查询用,但是发现查询也不慢(在公司测试环境查询1700w+总数需要16s
左右),由于当前pgsql数据默认安装在SSD
中,怀疑由于SSD
的读取速度较高,体现不出查询慢,于是计划挂载一张机械硬盘,将pg数据迁移至机械盘,验证查询是否会变慢

实践:
1、挂载HDD
1-1、ubuntu界面操作
准备一张空闲的HDD硬盘,连接至ubuntu(本文使用一张1T的希捷HDD)
格式化,卷名设置为HDD
设置完后为未挂载状态
由于在界面上挂载,默认会将HDD挂载到/media
目录下,所以下面执行指令
1-2、查看未挂载的磁盘,从大到小排序
可以看第一个为我们需要挂载的磁盘,LABEL
为HDD
,UUID
为7639aea6-7668-4bc3-ae22-b48c96377e8f
bash
lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT,LABEL,UUID | grep -v " /" | sort -hrk2
sda 931.5G ext4 HDD 7639aea6-7668-4bc3-ae22-b48c96377e8f
nvme0n1 931.5G
└─nvme0n1p3 609.2G ntfs material 6CB69233B691FDB0
1-2、创建挂载点目录
bash
sudo mkdir -p /mnt/pgdata
1-3、执行挂载
此文演示基于LABEL
进行挂载,-L
后面 填写标签
临时挂载测试
bash
sudo mount -L HDD /mnt/pgdata
检查挂载状态
bash
df -h /mnt/pgdata
文件系统 大小 已用 可用 已用% 挂载点
/dev/sda 916G 28K 870G 1% /mnt/pgdata
设置永久挂载(编辑/etc/fstab)
bash
sudo nano /etc/fstab
## 添加配置
LABEL=HDD /mnt/pgdata ext4 defaults,nofail 0 2
验证fstab配置
bash
# 没有错误消息,表示配置正确
sudo mount -a
设置权限
bash
sudo chown -R postgres:postgres /mnt/pgdata
sudo chmod 700 /mnt/pgdata
2、迁移PG数据
2-1、停止pg服务
bash
sudo systemctl stop postgresql
2-2、迁移存量数据
查看当前pgsql的数据目录
bash
grep data_directory /etc/postgresql/*/main/postgresql.conf
data_directory = '/var/lib/postgresql/15/main' # use data in another directory
移动数据至刚才挂载的目录【需要等待一定时间,具体看需要转移多少存量数据】
bash
sudo mv /var/lib/postgresql/15/main /mnt/pgdata
2-3、修改配置&确认修改
修改postgresql.conf
bash
sudo nano /etc/postgresql/15/main/postgresql.conf
data_directory = '/mnt/pgdata/main' # use data in another directory
重启pgsql
bash
sudo systemctl start postgresql
检查数据目录是否修改
bash
sudo systemctl status postgresql
sudo -u postgres psql
postgres=# SHOW data_directory;
data_directory
------------------
/mnt/pgdata/main
(1 row)
3、问题汇总
3-1、执行迁移指令后,HDD磁盘容量没有变化
执行sudo mv /var/lib/postgresql/15/main /mnt/pgdata
前,请确认需要HDD挂载的目录是否为/mnt/pgdata
,博主先前设置HDD挂载目录为/mnt/pgdata
,但是迁移时执行sudo mv /var/lib/postgresql/15/main /mnt/pg_data
,多了下划线
,导致实际没有迁移成功。
3-2、登录pgsql提示:连接到套接字"/var/run/postgresql/.s.PGSQL.5432"上的服务器失败:没有那个文件或目录
关注postgresql.conf
配置中的data_directory
与当前pgsql的实际数据目录地址是否一致。博主执行sudo mv /var/lib/postgresql/15/main /mnt/pgdata
指令后,pg数据实际上迁移至了/mnt/pgdata/main
中,一开始postgresql.conf
设置data_directory
为/mnt/pgdata
,出现了这个问题,调整成/mnt/pgdata/main
后解决
验证:
在挂载HDD和pg数据迁移过后,再次执行
sql
SELECT COUNT(*) FROM t_common_work_order_log;
首次查询很慢,约20分钟
,用SSD的话首次查询约为16s
但是后续查询就比较快了,插入了新数据后再次查询也很快,甚至先前比用SSD
还快😳