通过shell脚本生成数据统计信息的报表

对于统计信息的收集,不同的环境中使用的策略也会有很大的不同,有的按照一定的时间频率来收集,有的比较稳定的系统根据数据的增长频率来收集,用户比较稳定的系统,甚至都不再收集统计信息。

以下是使用shell生成的统计信息报表效果,可以在备份库中进行这些信息的收集,可以看到哪些表的查询耗费的时间较多,当前数据条数和统计信息中的数据条数。
#############################################################################     
table_name               volumn_size Elapsed_time     acutal_cnt       stat_cnt 
#############################################################################     
TEST_AUDIT_BALANCE             SMALL      00:00:00.06              0               0   
TEST_FILE_SYSTEM_DEF           SMALL      00:00:00.00            114              114  
TEST_SITEID                    SMALL      00:00:00.00            112              112  
TEST_MISSING_SEQ               SMALL      00:00:00.00              0                0  
TEST_GL_DETAILED_DATA          HUGE       00:00:18.24      315001510        310553395  
TEST_INVOICE                   SMALL      00:00:02.97        3024771          3024729  
TEST_TAX_ITEM                  MEDIUM     00:00:23.45       25826165         25825805  
TEST_TRANSACTION_LOG           MEDIUM     00:00:13.71       15642936         15407469  



使用的shell脚本如下,简单对脚本的实现做了解释。
##############################################
首先使用sqlplus来生成数据的当前数据条数,这个地方可以使用动态sql来生成,或者使用指定的sql语句,我就不重复贴了。
需要使用两个参数,一个是连接的用户名/密码,一个是指定的脚本来执行得到数据的条数。

print "
        WHENEVER SQLERROR EXIT 5
set pages 0
set timing on
set feedback off
        connect $1  \n
        @@$2
        " | sqlplus  -s /nolog > tab_stat.log

输出的内容格式如下所示:
TEST_AUDIT_BALANCE             SMALL                  0  
Elapsed: 00:00:00.09                                     
TEST_FILE_SYSTEM_DEF           SMALL                 114 
Elapsed: 00:00:00.09                                     
TEST_SITEID                    SMALL                 112 
Elapsed: 00:00:00.09                                     
TEST_MISSING_SEQ               SMALL                   0 
Elapsed: 00:00:00.09                                     
TEST_GL_DETAILED_DATA          HUGE             315001510
Elapsed: 00:00:18.24                                     
TEST_INVOICE                   SMALL              3024771
Elapsed: 00:00:02.97                                     
TEST_TAX_ITEM                  MEDIUM            25826165
Elapsed: 00:00:23.45                                     
TEST_TRANSACTION_LOG           MEDIUM            15642936
Elapsed: 00:00:13.71                                     


下面进行数据拆分,得到两个文件,一个文件得到所有表的数据条数,另外一个文件得到执行的时间  
#print 2 files with table data counts and the other for elapsed time
awk 'NR%2==1' tab_stat.log |cat -n >tab_cnt_lst.log
awk 'NR%2==0' tab_stat.log |awk '{print $2}' |cat -n >tab_stat_time.log

然后把两个文件内容merge起来
#print file with elapsed time as one column
join tab_cnt_lst.log tab_stat_time.log |awk   '{print $2,$3,$5,$4}' |sort > tab_stat_act_cnt.log

显示的内容如下:
TEST_AUDIT_BALANCE             SMALL      00:00:00.06              0   
TEST_FILE_SYSTEM_DEF           SMALL      00:00:00.00            114   
TEST_SITEID                    SMALL      00:00:00.00            112   
TEST_MISSING_SEQ               SMALL      00:00:00.00              0   
TEST_GL_DETAILED_DATA          HUGE       00:00:18.24      315001510   
TEST_INVOICE                   SMALL      00:00:02.97        3024771   
TEST_TAX_ITEM                  MEDIUM     00:00:23.45       25826165   
TEST_TRANSACTION_LOG           MEDIUM     00:00:13.71       15642936   
    

然后从当前的统计信息中得到数据的条数。
print "
        WHENEVER SQLERROR EXIT 5
set pages 0
set feedback off
        connect $1  \n
        SELECT
                TABLE_NAME,NUM_ROWS
        FROM
                USER_TABLES
        ORDER BY 1;
        " | sqlplus  -s /nolog |sort > tab_stat_cnt.log
输出格式类似下面所示。
TEST_AUDIT_BALANCE                    0   
TEST_FILE_SYSTEM_DEF                114   
TEST_SITEID                         112   
TEST_MISSING_SEQ                      0   
TEST_GL_DETAILED_DATA         315001510   
TEST_INVOICE                    3024771   
TEST_TAX_ITEM                  25826165   
TEST_TRANSACTION_LOG           15642936   


最后把文件的内容merge到一起,输出报表。
#print report with table actual data counts and stat data counts
join tab_stat_act_cnt.log tab_stat_cnt.log|awk '
BEGIN{
print "#############################################################################"
printf "%-30s %-10s %11s %-15s  %-15s \n", "table_name","volumn_size","Elapsed_time","acutal_cnt","stat_cnt"
print "#############################################################################"
}
{printf "%-30s %-10s %11s %-15s  %-15s \n",$1,$2,$3,$4,$5}' |tee  final_tab_stat_rpt.lst

得到了最终的报表内容,可以在此基础上进行分析和统计,如果统计值和实际的数据条数相差比较大,就可以针对性的进行统计信息收集。
#############################################################################     
table_name               volumn_size Elapsed_time     acutal_cnt       stat_cnt 
#############################################################################     
TEST_AUDIT_BALANCE             SMALL      00:00:00.06              0               0   
TEST_FILE_SYSTEM_DEF           SMALL      00:00:00.00            114              114  
TEST_SITEID                    SMALL      00:00:00.00            112              112  
TEST_MISSING_SEQ               SMALL      00:00:00.00              0                0  
TEST_GL_DETAILED_DATA          HUGE       00:00:18.24      315001510        310553395  
TEST_INVOICE                   SMALL      00:00:02.97        3024771          3024729  
TEST_TAX_ITEM                  MEDIUM     00:00:23.45       25826165         25825805  
TEST_TRANSACTION_LOG           MEDIUM     00:00:13.71       15642936         15407469  

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23718752/viewspace-1154503/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/23718752/viewspace-1154503/

[shell脚本]表格数据在终端上可视化输出 最终效果 1. 自定义表格样式 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4qfeL05x-1590857934848)(https://pic.downk.cc/item/5ed23405c2a9a83be5871691.jpg)] 2. 自定义主题颜色 支持三系普通颜色 支持16色彩虹色 支持单颜色 回顾一下shell语法 1. shell传递参数 我们可以在执行shell脚本时实时传递参数从而指定某些具体的参数(在本例中包括表格的样式、颜色等),脚本中获取参数. 阅读详情

相关推荐

实验七 shell编程

1、编写一个shell 脚本程序,打印出班级总成绩排名在前3 名(按总成绩递增)学生的姓名、学号和总成绩。打印输出的格式如下(姓名、学号、第1、2、3 门课程成绩及总成绩): zhang san 23 40 70 60 170 wang wu 31 60 60 80 200 li si 2 100 50 90 240 学生成绩文件自己创建。 2、编写一个shell 脚本程序,显示当前目录中子目录的名称 3、编写一个menu 的shell脚本程序,执行后的界面为: Number Name For Linux Menu 1 exit leave menu or return 2 menu goto another local menu 3 vi deit a file 4 mail read a mail 5 send send mail to someone 6 cal see your calendar 7 who see who is on the system 8 ls list the files in this directory 9 cat display a file on the screen Please enter a number or a name for the action you wish: 要求有清屏功能,能正确地执行各项命令并显示。

shell做制报表

运行效果如下 #!/bin/bash table="" #设置行,可以是表头,也可以是表格内容。 #如果是表格内容,“—”表示空值![这里写图片描述](https://img-blog.csdn.net/20180617203601684?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMjI4NDYz/font/5a6L5L2T/f...

适当喝点 4457

一个Shell脚本精准统计Mysql每张表的行数实现

主要介绍了一个Shell脚本精准统计Mysql每张表的行数实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

shell 统计mysql数据库表分区

#!/bin/bash USERNAME='root' PASSWD='demo#123' SHOW_DB='show databases' SHOW_TABLE='show tables' mysql -u${USERNAME} -p${PASSWD} -e "${SHOW_DB}" > databases.txt for dbname in `cat databases.txt | grep -v 'information_schema' | grep -v 'mysql' | grep .

Cookie_1030的专栏 409

linux 使用shell脚本写数据报表并且在web端浏览

1.首先在hive中建表(本人喜欢看NBA所以使用的nba的数据): create table number_one_team1 ( year string comment '年份', name string comment '球员姓名', team string comment '球队' ) comment '每年的状元及选秀球队' row format delimited

郭大帅 1130

通过shell脚本生成数据统计信息报表 (笔记65天)

对于统计信息的收集,不同的环境中使用的策略也会有很大的不同,有的按照一定的时间频率来收集,有的比较稳定的系统根据数据的增长频率来收集,用户比较稳定的系统,甚至都不再收集统...

杨建荣的学习笔记 426

通过Shell脚本自动化提取日志并上传文件到SFTP服务器

服务器环境:CentOS 6.9 前言 先前做了个系统,按照接口调用次数进行计费。每次的接口调用,会在日志中记录该次接口调用的详细信息(一行日志),包括: 商户:发起该次调用的是哪个商户 接口:该次调用的是哪个接口 个人信息:该次调用传递的个人信息 结果:该次调用的结果,是调用成功还是失败(成功才会计费) 时间:调用发生的时间 唯一id:标识该次调用的唯一id 是否计费:YES/NO 某个商户对某个接口的调用次数,以权益的形式进行预充值,随后调用则在总次数中进行扣减。 后来,由于每个月需要和上下游商户进

vcj1009784814的博客 3439

Shell脚本练习

当时第二题不会连接数据库 给忘了 2 使用shell脚本实现将mysql的test.u表中的id和name去重统计,并在shell中判断统计的数据是否正确,正确请输出打印id个数和"id数据统计正确",不正确请输出name个数和"name数据统计不正确"。(15分) create table test.u( id int(8), name varchar(22) ); 数据为: insert i...

C_time的博客 382

Shell脚本-sort工具

Shell脚本-sort工具

qq_51626500的博客 749

Shell 脚本中的管道机制:高效数据处理的利器

管道,顾名思义,是一种在命令行中用于连接多个命令的机制。它使用竖线符号作为连接符,将一个命令的输出传递给下一个命令作为输入,从而实现数据的连续处理,就像接力赛中运动员们传递接力棒一样,数据在各个命令之间有序地流转。管道机制是 Shell 脚本中一个极其重要的功能,它为我们提供了一种强大而灵活的工具,用于实现复杂的数据处理和任务自动化。通过合理使用管道,我们可以将多个命令紧密相连,高效地完成数据过滤、排序、统计、转换等任务,大大提升 Shell 脚本的效率和可读性。

qq_42671278的博客 930

编写Bash Shell通过gnuplot绘制系统性能数据图的方法

主要介绍了编写Bash Shell通过gnuplot绘制系统性能数据图的方法,做到可视化数据收集,需要的朋友可以参考下

牛客shell练习

文章目录awk内置函数splitsubstr 截取字符串length 字符串长度gsub 使得所有正则表达式被匹配的时候都发生替换牛客shell练习写一个 bash脚本输出一个文本文件 nowcoder.txt中的行数末尾查看写一个 bash脚本输出数字 0 到 500 中 7 的倍数(0 7 14 21...)的命令输出第5行的内容写一个 bash脚本输出一个文本文件 nowcoder.txt中空行的行号,可能连续,从1开始去掉文本中的空行写一个 bash脚本以统计一个文本文件 nowcoder.t

qq_44692240的博客 932

shell脚本数据库查询-钉钉发生信息

shell脚本数据库查询-钉钉发生信息

xinpz的博客 528

shell并发处理mysql数据统计备份删除释放

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33806300的博客 85

shell mysql并发_shell并发处理mysql数据统计备份删除释放

#!/usr/bin/bash#define:Statistics of the database and table size#date:20170515#author:lcurr_dir="/data/scripts/mysql_delete"back_dir="/backup/his_data_bak"######数据库信息mysql_comm="/bin"mysql_ip="***"#my...

weixin_36118025的博客 243

shell 之printf创建表格

echo `date` 反单引号输出日期 -----Mon Dec 27 16:05:36 CST 2021

stone_tomcate的博客 1143

linux脚本的数据输出到excel,使用shell实现Excel表格导出功能 | 剑花烟雨江南

在Web项目中,我们经常会遇到Excel表格导出的功能,对于一些数据实时性要求不高的、逻辑相对简单的导出,是否可用通过shell脚本的方式来进行导出,从而降低开发成本呢?我们都知道,CSV格式可以用Excel表打开,且CSV格式的本质是以“,”为分隔符的文本,那么我们在sql的字段之间加入","即可以CSV格式的文件进行输出。下面,我们使用shell脚本来实现:#!/bin/bash#文件保存路径...

weixin_29890403的博客 7926

使用shell生成状态报表

在数据迁移的时候,目前启用了10个并行的进程。每个进程负责一部分的数据导入工作。然而在统计数据导入进度的时候,总是感觉抓不到重点,没有一目了然的报告。 在定时做数据状态检查的时候,总是凭着感觉和不停的查看日志来得到最基本的状态...

congbao6525的博客 323
上一篇: not null constraint和check constriant的问题及分析
下一篇: 生产系统中EXP-00000的问题及解决
congbao6525
博客等级 码龄10年 25粉丝 391原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值