經過GET_SQL包抓SQL方法

1 運行機制#

適用於在生產環境抓取sql的狀況,因爲一個庫可能存在多我的同時對不一樣的表抓取相關sql作影響分析或者性能對比。該存儲過程從配置表讀取須要抓取sql語句表的相關信息以及抓取次數,一個庫上部署一個job。


1.1 表結構說明#

DBMGR用戶下建立了三個表:my_sqltext,get_sql_configuate和,get_top_sql_log和一個臨時表sql_temp(on commit preserve rows)
  • 1)表:my_sqltext:結果表,存放獲取的sql結果
my_sqltext 結果表
Column Name Data Type NOT Null? Comment
Hash_value Number N Hash_value
Child_number Number N Child number
plan_hash_value Number N plan_hash_value
parsing_schema_id Number N parsing_schema_id
executions Number N 執行次數
cpu_per_exec Number N 每次消耗的cputime
gets_per_exec Number N 每次執行返回的記錄數
sqllen Number N Sql長度
sql_text VARCHAR2(4000) N 小於4000的sql語句,存放CLOB時表示此sql語句長度超過4000
sql_full_text CLOB N 長度超過4000的sql語句
outline_category VARCHAR2(100) N Outline策略
Create_date date N 抓取日期
  • 2. get_sql_configuate:配置表:記錄須要抓取sql語句的表

get_sql_configuate 配置表 sql

Column Name Data Type NOT Null? Comment
Owner VARCHAR2(30) N 表的屬主
table_name VARCHAR2(30) Y 表名,若爲FULLDB表示全庫都抓取
Cnt Number Default 1 抓取次數,默認爲1
  • 3. get_top_sql_log:日誌表:記錄抓取失敗的錯誤信息

get_top_sql_log 配置表 jsp

Column Name Data Type NOT Null? Comment
id_get_top_sql_log Number Y 主鍵使用seq_get_top_sql_log
Hash_value Number N Hash_value
Error_date Date N 錯誤日期
Result_code Number N 錯誤信息號
Result_message Varchar2(1000) N 錯誤信息
  • 4. sql_temp(on commit preserve rows):過程處理中所需的臨時表,主要存在結果的相關信息。
sql_temp 臨時表
Column Name Data Type NOT Null? Comment
Hash_value Number N Hash_value
Child_number Number N Child number
executions Number N 執行次數
cpu_per_exec Number N 每次消耗的cputime
gets_per_exec Number N 每次執行返回的記錄數
sqllen Number N Sql長度
sql_text VARCHAR2(1000) N 小於4000的sql語句,存放CLOB時表示此sql語句長度超過4000
parsing_schema_id Number N parsing_schema_id
plan_hash_value Number N plan_hash_value

1.2 存儲過程說明:#

全部的存儲過程都存放在package:dbmgr.admin_sql中,包含下面過程:
  • 1. get_sqltext:函數方法,經過hash_value返回sql(CLOB),參數顯示包含hash_value。
  • 2. get_topsql :程序主體,最終提供給job調用。這個存儲過程沒有輸出參數,只有輸入參數,錯誤信息會記錄到日誌表中,會根據配置表的信息抓取sql,抓一次,表中的次數會減小一次,直到爲0時就中止抓取,若設置爲fulldb,則會抓取全庫的信息,其正在運行的表,也不會再繼續抓取。

2 部署步驟#

  • 1. 以sys 用戶登陸,按文件名順序執行附件rar包中的腳本。分別是建立表,作必要受權,建立存儲過程以及同義詞。

  • 2. 根據須要在配置表中配置相關信息:
    • 1. 首先配置表名,若全庫抓取,則配置爲FULLDB,其他配置正確的表名
    • 2. 次數配置:若job抓取時間間隔是1小時一次,抓取時間爲連續2天,則次數爲48
    • 3. 運行job
    • 4. 注意事項:
      • 1) 配置以前先使用下面語句檢查,看此庫時候有此job在運行:
Select count(*) from dba_jobs where upper(what) like ‘%GET_SQL%’

若結果爲0,則須要按照上述說明部署相應的腳本
若結果不等於0 ,則檢查配置表(get_sql_configuate)是否有表的記錄,檢查語句以下: 函數

Select  count(*)  from get_sql_configuate where table_name like‘%XXXX%’
如有隻需修改測試便可,若沒有,繼續下面語句查詢
Select count(*)from get_sql_configuate where table_nam=‘FULLDB and cnt>0
如有則,看次數是否知足條件,若知足,直接再結果表中獲取,若不知足,則根據條件計算次數,再修改次數
若沒有就須要在配置表中增長相應的信息,便可。
      • 2) 每一個庫只需配置一次,配置間隔通常設置爲30分組抓取一次。
  • 3. 附件腳本(get_sql.rar爲部署腳本,get-clob.sql爲將結果中的clob的結果輸出到文件)
相關文章
相關標籤/搜索