Informix Sysadmin库:admin()与task()函数用法解析

需积分: 9 0 下载量 8 浏览量 更新于2024-09-11 收藏 48KB DOCX 举报
"本文详细介绍了Informix/SinoDb sysadmin库中的admin()与task()函数的用法,包括如何使用这两个函数来添加缓冲池和chunk,以及相关的语法、参数和示例。" 在Informix数据库系统中,sysadmin库提供了一系列功能强大的管理函数,如admin()和task(),用于执行数据库的维护和配置任务。这两个函数是sysadmin库的核心组成部分,允许管理员以编程方式执行数据库操作,从而提高效率和准确性。 **admin()函数** 是一个通用的管理函数,可以执行多种数据库管理和维护任务。在本例中,它被用来添加缓冲池。缓冲池是数据库内存管理的重要部分,用于存储数据页以减少磁盘I/O。通过admin()函数的`addbufferpool`参数,我们可以指定页面大小来创建新的缓冲池。如果指定的页面大小尚未有对应的缓冲池,系统会根据BUFFERPOOL配置参数的默认值创建新缓冲池。这类似于使用`onparams -b -g`命令或直接修改BUFFERPOOL配置。 **task()函数** 则更专注于执行特定的任务,如添加chunk。Chunk是Informix数据库中存储数据的空间单位,可以理解为物理磁盘上的分区或卷。使用task()函数的`addchunk`参数,我们可以向已有的空间(space_name)添加新的chunk。这个过程需要指定chunk的路径(path_name)、大小(disk_size)、起始偏移量(offset),以及可选的镜像路径(mirror_path)和镜像偏移量(mirror_offset)。 创建chunk时,需要注意以下几点: 1. 块的大小应等于或大于1000KB,并且必须是页面大小的整数倍。 2. 起始偏移量加上块大小不能超过最大块大小,最大偏移量为4TB,确保不会超出磁盘容量。 3. 镜像参数用于设置冗余,提高数据安全性。 例如,以下命令将创建一个5MB大小,起始于520KB偏移量的chunk: ```sql EXECUTE FUNCTION task("addchunk", "space_name", "path_name", 5 * 1024 * 1024, 520, "mirror_path", 520); ``` 在这个示例中,我们没有指定镜像偏移量,这意味着它将默认与主chunk的偏移量相同。 通过灵活使用admin()和task()函数,Informix管理员可以在不中断服务的情况下,高效地调整数据库的物理结构,优化性能,确保数据安全。这些函数的使用需要对Informix数据库有深入的理解,以及谨慎的操作,以避免潜在的数据丢失或系统不稳定。在实际应用中,应结合Informix的文档和最佳实践,确保正确和安全地使用这些高级功能。

1.以下sql,使用了subplan+broadcast, 请根据语义合理优化该sql, 使其运行效率更高效 select * from user01.tb1 t1 where exists (select max(id) from user01.tb2 t2 where t1.name=t2.name); 2.以下SQL, t1表使用了broadcast算子,请使用 hint 优化,避免t1表使用 broadcast select t1,id,t2.id2 from user01.tb1 t1 inner join user01.t_skew t2 on t1.id=t2.id2 and t1.name='beijing' order by 1; 3.如何判断下列语句是否下推,请写出判断方法: select count(t1.*) from user01.tb1 t1 left join user01.tb2 t2 on t1.id=t2.td and t2.name ='beijing' 4.下列语句的执行计划中,优化器选择表他作为hash内表,t2作为hash外表,请使用hint调整执行计划,使t2做hash内表 select t1.id,t2.id2 from user01.tb1 t1 inner join user01.t_skew t2 on t1.id=t2.id2 and t1.name ='beijing' order by 1 5.将schema权限赋予用户user1 将schema s2下所有表的访问权限赋予用户user1 6.gsql开创建数据库usdb,指定字符集utf-8,限制连接数20启时间检查命令 7.创建名为us01的用户,并将sysadmin权限授权给他 8.创建数据库usdb,指定字符集utf-8,限制连接数20 9.下面的语句的执行计划中州优化器选择了nestloop的关联方式,请根据语义修改语句,其实关联方式变为hashion,以提升查询性能 select * from user01.tb1 t1 where t1.id not in(select t2.id from user01.tb2 t2 where t2.name='shanghai'); 改写参考: select * from user01.tb1 t1 where not exists (select 1 from user01.tb2 t2 where t2.name='shanghai' and t1.id=t2.id) and t1.id is not null; 10.1、下面的执行计划存在性能问题,已知该集群有10个dn,且 select reltuples from pg class Where relname='t1'; 结果为123456798765,请根据执行计划分析,判断性能瓶颈,并给出优化建议: id | operation | E-rows | E-memory | E-width | E-costs ----+-------------------------------+-----------+---------------+-----------|---------- 1 |->Streaming (type: GATHER) | 100 | | 12 | 114.24 2 | ->Hash Join(3,4) | 100 | 1MB | 12 | 111.05 3 | ->Seq Scan on t2 | 100000 | 1MB | 4 | 91.50 4 | ->Hash | 96 | 16MB | 8 | 3.56 5 | ->Streaming(type: BROADCAST) |100| 2MB | 8 | 3.56 6 | ->Seg Scan on t1 | 100 | 1MB | 8 | 3.06

2023-07-24 上传