指定连接数和轮询线程数

每个轮询线程的最佳连接数对于单处理器计算机大约为 300,而对于多处理器计算机大约为 350,但这会根据平台和数据库服务器工作负载的不同而变化。

一个轮询线程可以支持 1024 或更多的连接。如果启用了 FASTPOLL 配置参数,那么您可能可以配置更少的轮询线程,但您应该测试性能以确定适合您环境的最佳配置。

每个 NETTYPE 条目使用以下逗号分隔的字段配置特定连接类型的轮询线程数、每个轮询线程的连接数,以及运行这些轮询线程的虚拟处理器类。 这些字段内部或字段之间不能有空格。
NETTYPE connection_type,poll_threads,conn_per_thread,vp_class 
connection_type
标识对其分配轮询线程的协议和接口的组合。通常设置此字段以与 sqlhosts 信息中 dbservername 条目的 connection_type 字段相匹配。
poll_threads
是分配给连接类型的轮询线程数。
conn_per_thread
是每个轮询线程的连接数目。使用以下公式可计算此数目:
conn_per_thread = connections / poll_threads
连接数
是您期望指定连结类型支持的最大连接数。对于共享内存连接 (ipcshm),将连接数翻倍以获得最佳性能。

对于共享内存连接,conn_per_thread 值是每个线程的最大连接数。对于网络连接,可超出 conn_per_thread 值。

vp_class
是可以运行轮询线程的虚拟处理器类。如果具有 CPU VP 上运行的单个轮询线程,那么指定 CPU。要获取最佳性能,在需要多个轮询线程时指定 NET。此字段的缺省值取决于以下条件:
  • 如果连接类型与 DBSERVERNAME 参数中列出的 dbservername 关联,并且先前没有任何 NETTYPE 参数显式地指定 CPU,那么缺省 VP 类为 CPU。如果已经采用 CPU 类,那么缺省值为 NET。
  • 如果连接类型与 DBSERVERALIASES 参数指定的 dbservername 关联,那么缺省 VP 类为 NET。
如果 conn_per_thread 值超出 350,且当前连接类型的轮询线程数小于 CPU VP 数,那么通过指定 NET CPU 类、添加轮询线程(不超出 CPU VP 数)和重新计算 conn_per_thread 值,可提高性能。conn_per_thread 的缺省值为 50
要点: 每个 ipcshm 连接都需要信号量。有些操作系统需要配置计算机上运行的所有软件包可以请求的信号量的最大数。要获取最佳性能,在为共享内存通信分配信号量时,将实际 ipcshm 连接数翻倍。请参阅 UNIX 信号量参数

如果您的计算机为单处理器且仅为一个连接类型配置了数据库服务器实例,那么可以省略 NETTYPE 参数。数据库服务器使用 sqlhosts 信息中提供的信息来建立客户机/服务器连接。

如果您的计算机为单处理器且为多个连接类型配置了数据库服务器实例,那么为每个连接类型包含单独的 NETTYPE 条目。如果任意一个类型的连接数明显超过了 300,那么分配两个或更多的轮询线程(最多为 CPU VP 数)并指定 NET VP 类,如以下示例所示:
NETTYPE ipcshm,1,200,CPU
NETTYPE tlitcp,2,200,NET # supports 400 connections

对于 ipcshm,轮询线程的数量对应于内存段的数量。例如,如果 NETTYPE 设置为 3,100 并且您只想要一个轮询线程,那么请将该轮询线程设置为 1,300

如果您的计算机为多处理器,而且仅为一个连接类型配置了数据库服务器实例,并且连接数没有超过 350,那么可以使用 NETTYPE 在 CPU 或 NET VP 类上指定单个轮询线程。 如果连接数超过 350,那么将 VP 类设置为 NET,增加轮询线程数并重新计算 conn_per_thread

重要: 您应该仔细区分网络连接的轮询线程和共享内存连接的轮询线程,每个 CPU 虚拟处理器都应该运行一个共享内存连接的轮询线程。TCP 连接应该仅处于网络虚拟处理器中,并且您应该只有维持响应所需的最少的 TCP 连接数。共享内存连接应该仅处于 CPU 虚拟处理器中,并且应在每个 CPU 虚拟处理器中运行。