第26章 自動監視和更正操作

liahtobjtosh發表於2009-11-22
第26章 自動監視和更正操作[@more@]

一、sysadmin 資料庫
sysadmin 資料庫中有6張表,以ph_打頭的表用於處理排程。
排程程式是一種由資料庫在特定時間執行功能和過程的工具(與 sql server agent 類似)。

sysadmin 資料庫:
表:
ph_task :最重要的表,儲存需要排程的任務的資訊。如,排程的名稱,頻率,任務定義。其中 IDS 已經定義了 12 個排程任務。
ph_alert :包含必須監視的錯誤、警告或資訊訊息。
ph_group :ph_task 表中的每個任務都屬於表 ph_group 中的某個組。如:進行表操作的 TABLES 組;進行資料庫備份的 BACKUP 組;進行索引管理的 INDEXES 組等等。
ph_run :已經被排程的任務的執行時間等資訊
ph_threshold :與被排程的任務相關的閥值資訊,請見1.1中的例5。
command_history :管理 API 已執行的所有命令的列表。
用於管理 IDS 的 API 函式:admin() 、 task()。

admin()與task()的功能相同,只是admin()返回的描述為整數,task()返回的描述為字串。
這兩個函式用於在客戶端執行管理伺服器端的各種命令。在 IDS11 之前,客戶端是沒辦法執行新增 chunk,建立 dbspace 等伺服器端的操作,但在IDS11之後就可以使用以上任意一個函式來實現。
例1:建立一個 dbspace
EXECUTE FUNCTION admin(’create dbspace’, ’dbspace2’, ’/work/dbspace2’, "20 MB");
使用admin()與task()函式執行的管理會被儲存在 command_history 表中。該表儲存有執行此函式的使用者、執行時間、命令以及資料庫伺服器完成命令的返回訊息。

例2:檢查 IDS 擴充套件資料塊的一致性
EXECUTE FUNCTION admin('check extents');

例3:增加虛擬記憶體:
EXECUTE FUNCTION admin('add memory','10 MB');

例4:也可以執行 onmode 命令:
execute function sysadmin:task ('omode','k');

由於預設情況下 sysadmin 資料庫被建立在根資料庫空間,因為 sysadmin 有可能快速增長,所以建議為 sysadmin 建立單獨的 dbspace。
具體方法請見:

1.1 程式(任務)的排程:
週期性的與 IDS 相關的任務可以透過向 ph_task 表插入一些資訊,利用 IDS11 的新特性來自動排程處理,這樣也可以代替 OS 的 crontab 命令。
例5:在每一天2點執行一個任務:刪除 command_history 表中超過 ph_threshold 定義的時間的記錄。
(可見時間間隔即頻率frequenc為 1 0:00:00,開始時間 start_time 為2:00:00)
INSERT INTO ph_task
(
tk_name,
tk_group,
tk_description,
tk_type,
tk_execute,
tk_start_time,
tk_frequency
)
VALUES
(
"mon_command_history",
"TABLES",
"Monitor how much data is kept in the command history table",
"MONITOR",
"delete from command_history where cmd_exec_time < (
select current - value::INTERVAL DAY to SECOND
from ph_threshold
where name = 'COMMAND HISTORY INTERVAL' ) ",
"2:00:00",
"1 0:00:00"
);

如果沒有插入開始時間 tk_start_time ,則系統預設的策略為:週一到週五,早上8:00至17:00

二、收集每個執行過的 SQL :
IDS11提供了一個名為 syssqltrace 的偽表。該表儲存在 sysmaster 資料庫中。
在預設情況下 IDS 不記錄操作已經結束的 SQL ,如果想要 IDS 記錄系統中的每個 SQL 操作,則修改配置引數 SQLTRACE 。
格式如下:
SQLTRACE level=low,ntraces=1000,size=2,mode=global
其中:
level :跟蹤級別(low,meduim,high,off),不同跟蹤級別下,儲存的資訊祥細程式不一樣。
ntraces :儲存多少條SQL
size :對於超過指定大小的SQL則丟棄。單位:KB
mode : 是儲存所有使用者(即全域性:global)的SQL,還是使用者級(user)的SQL,或 SESSION 級的SQL。

任何時候都可以啟用或禁用跟蹤,也可以隨時改變 ntraces 或 size。但是,如果使用配置引數,則只能重新啟動伺服器,而是使用管理 API :
execute function task("set sql tracing on", 100,"1k","med","user");
開啟使用者級別的跟蹤,僅記錄1KB以下的100個SQL,跟蹤級別為 medium 。

例6:禁用全域性 SQL 跟蹤:
execute function task('set sql tracing off');

例7:禁用特定會話的 SQL 跟蹤:
EXECUTE FUNCTION task(“set sql user tracing off”,sid);

例8:啟用特定使用者的 SQL 跟蹤:
在全域性 SQL 跟蹤為禁用時,可以啟用對特定使用者的 SQL 跟蹤。
EXECUTE FUNCTION task("set sql user tracing on", sid);

例9:啟用當前連線的使用者的 SQL 跟蹤:
dbaccess sysadmin -<execute function task("set sql tracing on", 1000, 1,"low","user");
select task("set sql user tracing on", sid)
FROM sysmaster:syssessions
WHERE username not in ("root","informix");
END

例10:啟用所有使用者(global)的 SQL 跟蹤:
EXECUTE FUNCTION task("set sql tracing on", 1000, 1,"low","global");

以下為測試的內容:
> execute function task('set sql tracing off');
(expression) SQL tracing off.
1 row(s) retrieved.

> select count(*) from sysmaster:syssqltrace;
(count(*))
0
1 row(s) retrieved.

> EXECUTE FUNCTION task("set sql tracing on", 1000, 1,"low","global");
(expression) Global Tracing ON Number of Traces 1000 Trace Size 984 Mode Low
1 row(s) retrieved.

> select count(*) from sysmaster:syssqltrace;
(count(*))
1
1 row(s) retrieved.
>

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22565551/viewspace-1028944/,如需轉載,請註明出處,否則將追究法律責任。

相關文章