前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >--Postgresql 检测表大小 与 PG13 安装pycopg 问题

--Postgresql 检测表大小 与 PG13 安装pycopg 问题

作者头像
AustinDatabases
发布2021-11-26 15:01:45
6400
发布2021-11-26 15:01:45
举报
文章被收录于专栏:AustinDatabases

PG13 上安装pycopg2后,报找不到 libpq.so.5 的问题,之前在PG11 PG12上没有此问题,解决问题的方案为在使用 pycopg2的机器上安装 PostgreSQL 13 x86_64

https://centos.pkgs.org/7/postgresql-13-x86_64/postgresql13-libs-13.5-1PGDG.rhel7.x86_64.rpm.html

可以下载rpm包进行安装,也可以直接 sudo yum -y install postgresql13-libs

主要的问题原因在于,找不到libpg.so.5 ,安装libs 库即可。

下面这段程序主要的起因是,大表更新,在公司DBA接到开发的工单要对PG数据库的表进行批量的数据UPDATE, 在通过工具的执行中,发现磁盘空间急速的降低,从剩余700G 在不到 5分钟的情况下就损失了20G ,并且还在持续,工具中包含的任务比较多,在这样的情况下,直接和DBA 告知,紧急叫停,因为如果触发磁盘空间爆满,业务停止,事情就大了。

通过pg_terminate_backend 将程序自动执行的业务停止,后面告知DBA将剩余没有做的表都查一遍空间,包含索引,然后将空间* 2.5 后发现当前剩余的磁盘空间可以HOLD住后续的UPDATE 操作。

这里就随即写了一个程序(比较简陋)可以将制定的表的占用的空间进行累加,这边也给DB建议,在以后的UPDATE 操作中,先执行程序将需要UPDATE的表的空间进行计算,如果操作完毕后,剩余的磁盘空间不足约定的磁盘空间,则操作不能进行,必须添加磁盘空间后才能操作。

#!/usr/bin/python3

import os

import sys

import psycopg2

import re

import subprocess

def check_table_size():

conn = None

conn = psycopg2.connect(database="postgres",user="admin",password="admin",host="192.168.198.100",port="5432")

table_list = ["pgbench_accounts","pgbench_branches","pgbench_history","pgbench_tellers"]

cur = conn.cursor()

for table in table_list:

z1 = 'select pg_relation_size(\''

z2 = '\');'

#print(z1+table+z2)

cur.execute(z1+table+z2)

rows = cur.fetchall()

size = 0

for row in rows:

size = int(row[0]) + size

print('表总体大小合计')

print(str(size) + ' byte')

print('请确保数据磁盘空间在以下空间以上')

print(str(float(size) * 2.5) + ' byte')

conn.commit()

conn.close

def check_index_size():

conn = None

conn = psycopg2.connect(database="postgres",user="admin",password="admin",host="192.168.198.100",port="5432")

table_list = ["pgbench_accounts","pgbench_branches","pgbench_history","pgbench_tellers"]

cur = conn.cursor()

for table in table_list:

z1 = 'select pg_indexes_size(\''

z2 = '\');'

#print(z1+table+z2)

cur.execute(z1+table+z2)

rows = cur.fetchall()

size = 0

for row in rows:

size = int(row[0]) + size

print('表索引大小合计')

print(str(size) + ' byte')

conn.commit()

conn.close

def check_index_size():

conn = None

conn = psycopg2.connect(database="postgres",user="admin",password="admin",host="192.168.198.100",port="5432")

table_list = ["pgbench_accounts","pgbench_branches","pgbench_history","pgbench_tellers"]

cur = conn.cursor()

for table in table_list:

z1 = 'select pg_indexes_size(\''

z2 = '\');'

#print(z1+table+z2)

cur.execute(z1+table+z2)

rows = cur.fetchall()

size = 0

for row in rows:

size = int(row[0]) + size

print('表索引大小合计')

print(str(size) + ' byte')

conn.commit()

conn.close

if __name__ == "__main__":

check_table_size()

check_index_size()

后续需要完善PG大表批量更新的操作, 需要对操作的表先进行check 并比对目前剩余的空间后,在进行操作。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AustinDatabases 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档