通过本文学习,您将能够:
- 使用 SQL 命令执行系统管理任务
- 使用内置调度程序自动执行例行任务
1. SQL 管理 API 函数
SQL 管理 API 函数提供了一种使用 SQL 命令和例程执行各种管理任务的方法。除了执行正常的维护任务外,您还可以收集系统信息并将其存储在系统表中。
-
一组用户定义的例程(UDR),用于管理SinoDB数据库服务器
-
管理的主要类别包括:
– 空间管理
– 配置管理
– 日常任务维护
– 系统验证(oncheck 功能) -
功能优势
– 基于 SQL 的管理
– 远程管理
– 在系统表中跟踪命令执行和结果
2. 管理函数:TASK 与 ADMIN
- task函数返回一个描述返回(return)状态的字符串:
EXECUTE FUNCTION task('create dbspace','dbs2', '/CHUNKS/dbspace2','100MB','5MB');
(expression) created dbspace number 2 named dbs2
- admin 函数返回一个整数值代表状态,该状态链接到 sysadmin:command_history 表:
EXECUTE FUNCTION admin('create dbspace','dbs2', '/CHUNKS/dbspace2','100MB','5MB');
(expression) 107
- UDRs 只能由sinodbms运行
sysadmin 数据库中安装了两个 UDR,可供系统管理员使用。这些例程称为 task 和 admin。两者之间的唯一区别在于它们返回的值。task例程返回描述例程结果的字符串。admin例程返回一个整数,该整数提供指向command_history表的链接。每当执行这些例程中的任何一个时,在 sysadmin:command_history 表中生成一条日志记录。
这些函数所需的参数数取决于第一个参数中指定的命令。在上面的示例中,需要三个附加参数进行CREATE DBSPACE 操作:一个指定要创建的 dbspace 的名称,另一个指示 dbspace 的第一个块的路径,第三个指示空间的大小。其他参数可用于此操作,例如偏移和镜像。如果未提供参数值,则使用默认值。
上述任务等效于运行以下命令(1MB = 1024KB):
onspaces -c -d dbs2 -p /CHUNKS/dbspace2 -o 5120 -s 102400
3. 可用命令
命令 | 命令 | 命令 |
---|---|---|
ADD BUFFERPOOL | CREATE TEMPDBSPACE | SET SBSPACE LOGGING ON |
ADD CHUNK | CREATE BLOBSPACE | SET SBSPACE LOGGING OFF |
ADD LOG | DROP BLOBSPACE | |
ADD MEMORY | DROP CHUNK | SET SQL TRACING |
ADD MIRROR | DROP DBSPACE | SET SQL TRACING OFF |
ALTER CHUNK OFFLINE | DROP LOG | SET SQL TRACING ON |
ALTER CHUNK ONLINE | DROP SBSPACE | SET SQL TRACING RESIZE |
ALTER LOGMODE | DROP TEMPDBSPACE | |
ALTER PLOG | ONMODE | SET SQL USER TRACING |
ARCHIVE FAKE | QUIESCENT | SET SQL USER TRACING CLEAR |
CHECK DATA | QUIESCENT IMMEDIATE | SET SQL USER TRACING OFF |
CHECK EXTENTS | RENAME SPACE | |
CHECK PARTITION | SET CHUNK OFFLINE | SHUTDOWN |
CHECKPOINT | SET CHUNK ONLINE | SHUTDOWN IMMEDIATE |
CLEAN SBSPACE | SET DATASKIP ON | |
CREATE BLOBSPACE | SET DATASKIP OFF | START MIRRORING space |
CREATE CHUNK | SET SBSPACE ACCESSTIME ON | STOP MIRRORING |
CREATE DBSPACE | SET SBSPACE ACCESSTIME OFF | |
CREATE SBSPACE | SET SBSPACE AVG_LO_SIZE |
以上是可用的admin和task函数的命令列表。
您可以使用 onmode 命令执行多项任务。第二个参数对应于等效的 onmode 命令的标志。例如,要动态添加 CPU VP,可以使用以下命令:
onmode -p 1 CPU
对应的admin命令是:
EXECUTE FUNCTION admin("ONMODE","p","1","CPU");
有关 admin 和 task 函数可用的语法和命令的其他信息,请参阅SinoDB SQL指南–语法。
4. 函数参数
-
环境变量扩展:
— 路径名可以以环境变量开头
— 环境变量必须存在于服务器环境中 -
单位扩展:
– 所有偏移量和大小都提供单位扩展
– 扩展名不区分大小写
– 默认值为 KB
– 单位也可能是:PB、TB、GB、MB、KB、B
为task或admin例程参数指定路径名时,可以使用环境变量。但是,您使用的变量必须在用户sinodbms的服务器环境中可识别。要检查服务器计算机上的环境变量设置,请运行以下命令:
onstat -g env
如果参数需要指定大小值,则可以使用上面列出的任何单位扩展。
4.1 创建dbspace示例
- 运行admin函数
EXECUTE FUNCTION admin('create dbspace','dbspace2','/home/sinodbms/dbs/dbspace2','20MB');
(expression) 197
- 在command_history表中查找返回值:
SELECT * FROM command_history WHERE cmd_number IN(197);
cmd_number 197
cmd_exec_time 2023-11-27 15:01:44
cmd_user sinodbms
cmd_hostname feig-wzq-db
cmd_executed admin( 'create dbspace', 'dbspace2', '/home/sinodbms/dbs/dbspac
e2', '20MB' )
cmd_ret_status 0
cmd_ret_msg Space 'dbspace2' added.
1 row(s) retrieved.
通过以上方式,为 DBA 和程序员提供了远程管理控制和闭环监控系统的方法。
在上面的示例中,调用了 admin 函数来创建 dbspace。执行例程时,返回值 197。第二个查询演示了在command_history表中查找该返回值。
4.2 关闭服务器
通过以下SQL命令来关闭数据库服务器:
EXECUTE FUNCTION task("shutdown");
5. 内置数据库调度程序
SinoDB现在提供了调度 SQL 命令、存储过程或用户自定义例程的功能。这些调度实体称为任务或传感器。
- 能够调度 SQL、存储过程或 UDR
- 有不同类型的调度实体:
–任务
–传感器
– 启动任务
– 启动传感器 - 任务由名为 ph_task 的表中的数据驱动
- 传感器是一种特殊类型的任务,旨在收集信息
任务 Task
任务是在特定时间或间隔执行特定作业的方法。任务通过调用以下命令来执行:
- 单个或复合 SQL 语句
- 存储过程
- 用户自定义的C 语言例程
- 用户自定义的Java 例程
传感器 Sensor
传感器是一项专门用于收集和保存数据的任务,DBA 几乎不需要做任何工作。传感器是获取有关受管元素信息的一种方式。
启动任务与传感器
仅当数据库服务器启动时,才会执行启动任务或启动传感器。
6. 为什么使用任务与传感器?
-
构建特定任务
– 确保完成日常工作的一种方式
– 定期检查和/或分析收集的数据,以确保数据服务器有效运行 -
传感器提供了一种收集信息的简单方法:
– 易于添加新传感器
– 提供一种无需使用操作系统即可收集信息的便携方式。
构建和调度任务提供了一种确保定期完成重要但例行的管理任务的方法。执行任务时,任务运行将记录在command_history表中,您可以检查该表以确保任务已成功执行,并且数据库服务器运行正常且高效。
传感器执行信息收集任务,并且可以像任务一样进行使用和调度。传感器通过对 sysmaster 数据库进行查询或用户自定义的函数和例程的结果来收集信息。
7. 创建一个任务或传感器
您可以通过在ph_task表中插入一行来创建任务或传感器:
- 提供描述性信息(名称、类型、预定义的组名、描述)
- 对于传感器,包括结果表名称和用于创建结果表的 SQL 语句
- 提供要执行的 SQL 语句。对于传感器,这将对结果表的 INSERT 操作
- 提供开始时间、结束时间和频率
若要创建任务或传感器,请在ph_task表中插入一行并填充相关列。提供的 SQL 语句根据指定的频率从开始时间执行到结束时间。
插入常规任务的基本格式如下所示:
INSERT INTO ph_task (tk_name, tk_type, tk_group, tk_description,
tk_execute, tk_start_time, tk_stop_time, tk_frequency)
VALUES ("task_name", "TASK", "group","task_descr", "SQL_command",
start_time, end_time, freq)
传感器的插入将包括一些额外的列:
INSERT INTO ph_task (tk_name, tk_type, tk_group, tk_description,
tk_result_table, tk_create, tk_execute, tk_start_time, tk_stop_time, tk_frequency)
VALUES ("sensor_name", "SENSOR", "group","task_descr", "result_tbl_name",
"create_result_tbl", "SQL_command", start_time, end_time, freq)
7.1 ph_task 表插入任务
create table "sinodbms".ph_task (
tk_id serial not null,
tk_name char(36),
tk_description lvarchar,
tk_type char(18) default 'SENSOR',
tk_executing_sid integer default 0,
tk_sequence integer default 0,
tk_result_table lvarchar,
tk_create lvarchar default null,
tk_execute lvarchar,
tk_delete interval day to second default interval(0 01:00:00) day to second,
tk_start_time datetime hour to second default datetime(08:00:00) hour to second,
tk_stop_time datetime hour to second default datetime(19:00:00) hour to second,
tk_frequency interval day to second default interval(1 00:00:00) day to second,
tk_next_execution datetime year to second default current year to second,
tk_total_executions integer default 0,
tk_total_time float default 0.0,
tk_monday boolean default 'T',
…
tk_sunday boolean default 'T',
tk_attributes integer default 0,
tk_group varchar(129) default 'MISC',
tk_enable boolean default 'T',
tk_priority integer default 0 )
若要创建任务或传感器,请在 ph_task 表中插入一行,并在需要时提供适当的列信息。
以下是 ph_task 表中常用列以及它们的数据类型和说明:
列名 | 类型 | 说明 |
---|---|---|
tk_id | serial not null | 任务唯一ID |
tk_name | char(36) | 任务名称 |
tk_description | lvarchar | 任务描述 |
tk_type | char(18) | 有以下类型:‘TASK’, ‘SENSOR’, ‘STARTUP TASK’, ‘STARTUP SENSOR’(启动任务仅在系统启动时执行) |
tk_result_table | lvarchar | 任务结果表名称 |
tk_create | lvarchar | 传感器用于创建结果表的 Create 语句(如果尚未创建) |
tk_execute | lvarchar | 要执行的SQL语句 |
tk_delete | interval day to second | 删除早于此值的数据 |
tk_start_time | datetime hour to second | 任务开始时间 |
tk_stop_time | datetime hour to second | 任务结束时间 |
tk_frequency | interval day to second | 任务频率 |
tk_next_execution | datetime year to second | 任务下次执行时间 |
tk_monday | boolean | 指定要包含/排除的日期;默认值为“T”(在这一天执行任务) |
tk_tuesday | boolean | |
tk_wednesday | boolean | |
tk_thursday | boolean | |
tk_friday | boolean | |
tk_saturday | boolean | |
tk_sunday | boolean | |
tk_group | varchar(129) | 预定义的组名。此名称必须在ph_group表中存在。默认值为“MISC”。 |
tk_enable | boolean | 指定是否启用任务;默认值为“T”。 |
tk_priority | integer | 根据 0-5 之间的值确定计划同时执行的任务的顺序;默认值为 0。 |
7.2 创建任务:清除 command_history表
INSERT INTO ph_task
(tk_name, tk_type, tk_group, tk_description, tk_execute,
tk_start_time, tk_stop_time, tk_frequency)
VALUES
("mon_command_history", "TASK", "TABLES",
"Monitor how much data is kept in the command history table",
"DELETE FROM command_history WHERE cmd_exec_time <
(SELECT current - value::INTERVAL DAY TO SECOND
FROM ph_threshold
WHERE name = 'COMMAND HISTORY RETENTION')",
DATETIME(02:00:00) HOUR TO SECOND, NULL,
INTERVAL(1) DAY TO DAY);
上面的示例显示了将任务插入ph_task表的命令。该任务的目的是在每天凌晨 2:00 从command_history表中清除旧数据。
7.3 创建传感器:监控内存
INSERT INTO ph_task
(tk_name, tk_type, tk_group, tk_description,
tk_result_table, tk_create, tk_execute, tk_stop_time,
tk_start_time, tk_frequency, tk_delete)
VALUES
("mon_memory_system","SENSOR","MEMORY",
"Server memory consumption", "mon_memory_system",
"CREATE TABLE mon_memory_system (id INTEGER,
class SMALLINT, size INT8, used INT8, free INT8)",
"INSERT INTO mon_memory_system SELECT $DATA_SEQ_ID,
seg_class, seg_size, seg_blkused, seg_blkfree
FROM sysmaster:sysseglst",
NULL, NULL, INTERVAL(30) MINUTE TO MINUTE,
INTERVAL(30) DAY TO DAY);
在上面的示例中,创建了一个传感器,用于从 sysmaster 的 sysseglst 表中收集有关内存使用情况的信息,并将其插入到 mon_memory_system 表中。传感器每 30 分钟运行一次,监视器表中的条目将在 30 天后删除。
8. 任务与传感器参数
-
SQL语句,两个备用字符串:
$DATA_SEQ_ID – 此任务运行的次数
$DATA_TASK_ID – 此任务的任务 ID -
UDR参数
– UDR 具有特定的功能签名
– Func(integer data_task_id,integer data_seq_id)
在编写任务和传感器中的 SQL 语句时需包含保留字符串 $DATA_SEQ_ID 或 $DATA_TASK_ID。如果在 SQL 语句中的任何位置找到这些值,则 $DATA_SEQ_ID 将替换为当前SEQ_ID,而 $DATA_TASK_ID 将替换为当前TASK_ID。
调用用户定义的例程时,TASK_ID 和 SEQ_ID 将作为参数添加到程序中。
9. 内置传感器
传感器名称 | 说明 |
---|---|
mon_command_history | 清除命令历史记录表 |
mon_config | 保存对 onconfig 文件所做的任何更改 |
mon_config_startup | 在每次服务器启动时保存 onconfig 文件 |
mon_profile | 保存服务器配置文件信息 |
mon_vps | 收集虚拟处理器计时 |
mon_checkpoint | 保存有关检查点的信息 |
mon_table_profile | 保存表配置文件信息,包括 UDI 计数器 |
mon_table_names | 保存表名称及其创建时间 |
mon_users | 保存有关每个用户的配置文件信息 |
check_backup | 检查以确保备份已完成 |