前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PYTHON 自动化运维 -- 绘制数据库表空间变化图

PYTHON 自动化运维 -- 绘制数据库表空间变化图

原创
作者头像
大大刺猬
修改2020-04-21 17:37:35
8690
修改2020-04-21 17:37:35
举报
文章被收录于专栏:大大刺猬

1.获取数据库表空间变化情况:

已oracle为例(sql语句见文末:根据自己的修改,比如PDB名字,保存的位置等):

把结果保存为.txt文件
把结果保存为.txt文件

查看的内容大概是这样的

2.把它转换为CSV格式,这种格式操作起来方便点:

不会的可已用以下shell脚本跑 (shell脚本见文末,github打不开现在.....)

3.然后交给python去划图,python代码见文末:

效果如下(我的全是系统表空间,生产上使用的时候注意把单位换成G 好看些):

脚本如下

查询表空间变化的SQL

代码语言:javascript
复制
alter session set container=OGGSPDB;
set feedback off;
set pagesize 0;
set linesize 9999;
set termout off;
set heading off;
set echo off;
set trimspool on;
spool ./result/PDB_OGGSPDB_TABLESPACE_30DAYS_CHANGE.txt;
select a.name, b.*
  from v$tablespace a,
       (select tablespace_id,
               trunc(to_date(rtime, 'mm/dd/yyyy hh24:mi:ss')) datetime,
               max(tablespace_usedsize * 8 / 1024) used_size
          from dba_hist_tbspc_space_usage
         where trunc(to_date(rtime, 'mm/dd/yyyy hh24:mi:ss')) >
               trunc(sysdate - 30)
         group by tablespace_id,
                  trunc(to_date(rtime, 'mm/dd/yyyy hh24:mi:ss'))
         order by tablespace_id,
                  trunc(to_date(rtime, 'mm/dd/yyyy hh24:mi:ss'))) b
 where a.ts# = b.tablespace_id order by name,datetime;
spool off;

shell脚本 tocsv.sh

代码语言:javascript
复制
#!/bin/env bash
#write by ddcw at 20200421
for i in $@
do
	csv=$(echo $i | awk -F .txt '{print $1}').csv
	cat /dev/null > $csv
	while read line
	do
		echo $line | awk  '{for(i=1;i<=NF;i++){printf "\""$i"\","}}' >> $csv
		echo '' >> $csv
	done < $i
	sed -i 's/\(.*\)\(.\)/\1/g' $i
done

python 把这个表空间的信息画成图:

代码语言:javascript
复制
import csv
import matplotlib.pyplot as plt
# old_tablespace_name='SYSTEM'
old_tablespace_name=''
date_one_month=list(range(30))
day_x=[]
days=0
min_size=99999999
max_size=0
total_change=0
used_size=[]
first_day_size=-1
last_day_size=0
#for your csv file about TABLESPACE CHANGE
with open('.//result//PDB_OGGSPDB_TABLESPACE_30DAYS_CHANGE.csv', 'r') as f:
    reader = csv.reader(f)
    t = reader
    t=0
    for inx,row in enumerate(reader):
        if inx == 0 :
            old_tablespace_name=str(row[0])
        if first_day_size == -1:
            first_day_size=float(row[3])
        if row[0]==old_tablespace_name:
            used_size.append(float(row[3]))
            old_tablespace_name=str(row[0])
            day_x.append(row[2].split('-')[0])
            if max_size < float(row[3]):
                max_size = float(row[3])
            if min_size > float(row[3]):
                min_size = float(row[3])
            last_day_size=float(row[3])
            days += 1
        else:
            total_change += last_day_size-first_day_size
            plt.plot(day_x,used_size,label='SIZE/DAYS AVG '+str(round((last_day_size-first_day_size)/days ,2))+' MB')
            plt.legend()
            plt.title(old_tablespace_name+'  +'+str(round(last_day_size-first_day_size ,2))+' MB',fontsize = 24)
            plt.ylabel("SIZE_MB",fontsize = 14)
            plt.xlabel("IN "+str(days)+" DAYS",fontsize = 14)
            plt.show()
            #init parameters
            days=0
            min_size=99999999999999
            max_size=0
            day_x=[]
            day_x.append(row[2].split('-')[0])
            first_day_size=float(row[3])
            used_size=[]
            used_size.append(float(row[3]))
            first_day_size=-1
            days += 1
            old_tablespace_name=str(row[0])

#             plt.legend()
print('TOTAL CHANGE:',round(total_change,2),'GB')

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.获取数据库表空间变化情况:
  • 2.把它转换为CSV格式,这种格式操作起来方便点:
  • 3.然后交给python去划图,python代码见文末:
  • 脚本如下
    • 查询表空间变化的SQL
      • shell脚本 tocsv.sh
        • python 把这个表空间的信息画成图:
        相关产品与服务
        文件存储
        文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档