一、sysadmin 数据库
sysadmin 数据库中有6张表,以ph_打头的表用于处理调度。
调度程序是一种由数据库在特定时间执行功能和过程的工具(与 sql server agent 类似)。
http://publib.boulder.ibm.com/infocenter/idshelp/v115/index.jsp?topic=/com.ibm.admin.doc/admin56.htm
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。
具体方法请见:http://publib.boulder.ibm.com/infocenter/idshelp/v115/topic/com.ibm.admin.doc/ids_admin_1120.htm
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 -<
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.
>