返回首页

gbase数据、南大通用产品文档:GBase8s启动和停止虚拟处理器

更新日期:2024年09月11日

当您启动数据库服务器时,oninit 实用程序将启动您已直接和间接指定了数量和类型的虚
拟处理器。主要通过 ONCONFIG 参数配置虚拟处理器,并且对于网络虚拟处理器,那么
通过 sqlhosts 文件或注册表中的参数来配置。有关虚拟处理器类的描述,请参阅虚拟处理
器类。
可以使用数据库服务器来启动最多 1000 个虚拟处理器。
当数据库服务器处于联机方式后,如果需要,您可以启动其他虚拟处理器以提高性能。有
关更多信息,请参阅在联机方式下添加虚拟处理器。
当数据库服务器处于联机方式,那么您可以删除 CPU 和用户定义类的虚拟处理器。有关
更多信息,请参阅删除 CPU 和用户定义的虚拟处理器。
要终止数据库服务器并且从而终止所有的虚拟处理器,请使用 onmode -k 命令。有关使
用 onmode -k 的更多信息,请参阅《GBase 8s 管理员参考》。

在联机方式下添加虚拟处理器
当数据库服务器处于联机方式时,您可以启动以下类的其他虚拟处理器:CPU、AIO、
PIO、LIO、SHM、STR、TLI、SOC、JVP 和用户定义。数据库服务器自动为 LIO 和
PIO 类的每一个类启动一个虚拟处理器,除非使用了镜像,如果使用了镜像,那么数据库
服务器将启动两个虚拟处理器。
可以使用 onmode 实用程序的 -p 选项启动这些额外的虚拟处理器。
可以使用 onmode 实用程序的 -p 选项或者 ISA 启动这些额外的虚拟处理器。
还可以启动用户定义类的附加虚拟处理器来运行用户定义的例程。有关用户定义的虚拟处
理器的更多信息,请参阅将 UDR 指定给用户定义的虚拟处理器类。

在联机方式下使用 onmode 添加虚拟处理器

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 105 -
使用 onmode 命令的 -p 选项可在数据库服务器处于联机方式时添加虚拟处理器。用正数
指定希望添加的虚拟处理器数。作为选择,您可以在虚拟处理器数前加上一个加号 (+)。
在这个数字后面,请以小写字母指定虚拟处理器的类。例如,以下两个命令中任意一个都
可启动 AIO 类中的其他四个虚拟处理器:
onmode -p 4 aio
onmode -p +4 aio
onmode 实用程序将立即启动附加的虚拟处理器。
一次只可以将虚拟处理器添加到一个类。要为另一个类添加虚拟处理器,您必须再次运行
onmode。

添加网络虚拟处理器
添加网络虚拟处理器时,可添加轮询线程,其中每个轮询线程都需要其自已的虚拟处理器
才能运行。
如果尝试在数据库服务器处于联机方式时为协议添加轮询线程,并且在 NETTYPE 配置
参数中指定轮询线程在 CPU 类中运行,那么在没有 CPU 虚拟处理器可用于运行新轮询
线程时,数据库服务器不会启动新轮询线程。
在以下示例中,轮询线程总共处理 240 个连接:
NETTYPE ipcshm,4,60,CPU # Configure poll thread(s) for nettype
对于 ipcshm,轮询线程的数量对应于内存段的数量。例如,如果 NETTYPE 设置为
3,100 并且您只想要一个轮询线程,那么请将该轮询线程设置为 1,300。

删除 CPU 和用户定义的虚拟处理器
当数据库服务器处于联机方式中,那么您可以使用 onmode 实用程序的 -p 选项来删除或
终止 CPU 或用户定义类的虚拟处理器。
删除 CPU 虚拟处理器
紧跟 onmode 命令之后,请指定一个负数,该数值是您想要删除的虚拟处理器的数量,然
后以小写字母指定 CPU 类。例如,以下命令删除两个 CPU 虚拟处理器:
% onmode -p -2 cpu
如果您尝试删除一个正在运行轮询线程的 CPU 虚拟处理器,那么您将接收以下消息:
onmode: failed when trying to change the number of cpu virtual processor by -number.
有关更多信息,请参阅在 CPU 或网络虚拟处理器上运行轮询线程。
删除用户定义的虚拟处理器
在 onmode 命令的后面,请指定一个负数(该数字是您希望删除的虚拟处理器的数量),
然后以小写字母指定用户定义的类。例如,以下命令将删除类 usr 的两个虚拟处理器:
onmode -p -2 usr

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 106 -
有关如何创建用户定义的虚拟处理器类以及如何将用户定义的例程指定给该类,请参阅用
户定义的虚拟处理器类。


统一数据平台监控与运维系统用户手册
- 148 -
南大通用数据技术股份有限公司

尽管您最可能使用 GBase 8s 扩展类在不透明类型上下文之外的数据库服务器上创建大对
象,但是智能大对象仍可以是不透明类型中的数据成员,
有关智能大对象的更多信息,请参阅智能大对象数据类型。
在不透明类型中大对象存储在 IfxLocator 对象中;
在内部定义不透明类型的 C 结构中,

对象通过 MI_LO_HANDLE 类型的定位指针引用。该对象使用 IfxSmartBlob 类提供的方
法创建,并且从这些方法获得的大对象句柄成为不透明类型中的数据成员。BLOB 和
CLOB 对象都使用相同的大对象句柄,如下例所示:
import java.sql.*;
import com.gbasedbt.jdbc.*;
/*
* C struct of large_bin_udt:
*
* typedef struct LARGE_BIN_TYPE

GBase 8s JDBC Driver 程序员指南
南大通用数据技术股份有限公司
- 192 -

* {
* MI_LO_HANDLE lb_handle; // handle to large object (72 bytes)
* }
* large_bin_udt;
*
*/
public class largebinUDT implements SQLData
{
private String sql_type = "large_bin_udt";
public Clob lb_handle;

public largebinUDT() { }

public largebinUDT(Clob clob)
{
lb_handle = clob;
}

public String getSQLTypeName()
{
return sql_type;
}
// reads a stream of data values and builds a Java object
public void readSQL(SQLInput stream, String type) throws SQLException
{
sql_type = type;
lb_handle = stream.readClob();
}
// writes a sequence of values from a Java object to a stream
public void writeSQL(SQLOutput stream) throws SQLException
{
stream.writeClob(lb_handle);
}
}
在 JDBC 应用程序中,使用 IfxSmartBlob 类提供的方法创建 MI_LO_HANDLE 对象:
String s = "insert into largebin_tab (int_col, largebin_col, lvc_col) " +

GBase 8s JDBC Driver 程序员指南
南大通用数据技术股份有限公司
- 193 -

"values (?,?,?)";
System.out.println(s);
pstmt = conn.prepareStatement(s);

...
// create a large object using IfxSmartBlob's methods
String filename = "lbin_in1.dat";
File file = new File(filename);
int fileLength = (int) file.length();
FileInputStream fin = new FileInputStream(file);

IfxLobDescriptor loDesc = new IfxLobDescriptor(conn);
System.out.println("create large object descriptor...ok");

IfxLocator loPtr = new IfxLocator();
IfxSmartBlob smb = new IfxSmartBlob((IfxConnection)conn);
int loFd = smb.IfxLoCreate(loDesc, 8, loPtr);
System.out.println("create large object...ok");

int n = smb.IfxLoWrite(loFd, fin, fileLength);
System.out.println("write file content into large object...ok");

pstmt.setInt(1, 1);
System.out.println("setInt...ok");

// initialize largebin object using the large object created
// above, before doing setObject for the large_bin_udt column.
largebinUDT largebinObj = new largebinUDT();
largebinObj.lb_handle = new IfxCblob(loPtr);
pstmt.setObject(2, largebinObj);
System.out.println("setObject(largebinUDT)...ok");

pstmt.setString(3, "Sydney");
System.out.println("setString...ok");

pstmt.executeUpdate();
System.out.println("execute...ok");

GBase 8s JDBC Driver 程序员指南
南大通用数据技术股份有限公司
- 194 -


// close/release large object
smb.IfxLoClose(loFd);
System.out.println("close large object...ok");
smb.IfxLoRelease(loPtr);
System.out.println("release large object...ok");
有关详细信息,请参阅智能大对象数据类型。