通過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
以下是使用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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 透過shell指令碼生成資料統計資訊的報表指令碼
- 通過shell指令碼生成查詢表資料的sql指令碼SQL
- 通過shell指令碼得到資料字典的資訊指令碼
- 通過shell指令碼得到資料庫的基本資訊(一)指令碼資料庫
- 透過shell指令碼生成查詢表資料的sql指令碼SQL
- 通過shell指令碼定位效能sql和生成報告指令碼SQL
- 通過shell指令碼檢視procedure的資訊指令碼
- 通過shell指令碼檢視package的資訊指令碼Package
- 通過shell指令碼來統計段大小指令碼
- 通過shell指令碼檢視鎖資訊指令碼
- 透過shell指令碼得到資料字典的資訊指令碼
- [ Shell ] 通過 Shell 指令碼匯出 CDL 網表指令碼
- 通過shell指令碼批量操作mysql資料庫指令碼MySql資料庫
- 通過shell指令碼檢測MySQL服務資訊指令碼MySql
- 通過shell指令碼檢視資料庫表空間使用情況指令碼資料庫
- 見過最全的獲取資料庫資訊的指令碼--生成html的報告資料庫指令碼HTML
- 通過shell得到資料庫中許可權的指令碼資料庫指令碼
- 透過shell指令碼定位效能sql和生成報告指令碼SQL
- 通過shell指令碼分析足彩指令碼
- 巧用shell生成資料庫檢查指令碼資料庫指令碼
- 通過shell指令碼抓取awr報告中的問題sql指令碼SQL
- 通過shell定製ash指令碼指令碼
- [Shell] Shell 生成 HTML指令碼HTML指令碼
- 【Shell】fix 1032報錯資訊的指令碼指令碼
- 透過shell指令碼檢視procedure的資訊指令碼
- 透過shell指令碼檢視package的資訊指令碼Package
- 案例:通過shell指令碼實現mysql資料備份與清理指令碼MySql
- 將表資料生成SQL指令碼的儲存過程和工具SQL指令碼儲存過程
- 透過shell指令碼檢視鎖資訊指令碼
- Shell 系統資訊監控指令碼指令碼
- 通過shell指令碼防止埠掃描指令碼
- 通過shell指令碼監控oracle session指令碼OracleSession
- 使用shell批量生成資料整合式遷移的指令碼指令碼
- 巧用shell指令碼生成快捷指令碼指令碼
- [ Shell ] 通過 Shell 指令碼匯出 GDSII/OASIS 檔案指令碼
- 如何通過簡單的shell指令碼操作MongoDB指令碼MongoDB
- Oracle通過Sqlplus結合Shell指令碼方式生成Excel檔案OracleSQL指令碼Excel
- 通過shell指令碼同時監控多個資料庫負載指令碼資料庫負載