SQL管理函数和任务计划

  通过本文学习,您将能够:

  • 使用 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表中插入一行来创建任务或传感器:

  1. 提供描述性信息(名称、类型、预定义的组名、描述)
  2. 对于传感器,包括结果表名称和用于创建结果表的 SQL 语句
  3. 提供要执行的 SQL 语句。对于传感器,这将对结果表的 INSERT 操作
  4. 提供开始时间、结束时间和频率

  若要创建任务或传感器,请在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 检查以确保备份已完成