STACKSIZE 配置参数和内存利用率

STACKSIZE 配置参数表示每个线程的初始堆栈大小。数据库服务器将此参数表示的空间量分配给每个活动的线程。此空间来自于数据库服务器共享内存的虚拟部分。可以减少数据库服务器动态添加的共享内存量。

要减少数据库服务器动态添加的共享内存量,您可以估计系统运行的平均线程数所需的堆栈空间量,并将此量包含在为 SHMVIRTSIZE 配置参数设置的值中。

要估计您需要的堆栈空间量,可使用以下公式:
stacktotal = STACKSIZE * avg_no_of_threads 
avg_no_of_threads
是平均线程数。可以定期监视活动的线程数以确定此量。 使用 onstat -g sts 检查线程的堆栈使用。根据您的工作负载,一般的估计介于连接总数(在 ONCONFIG 文件的 NETTYPE 参数中指定)的 60% 和 70% 之间。
数据库服务器还通过使用此堆栈的用户线程来执行用户定义的例程 (UDR)。编写用户定义的例程的编程人员应该采取以下措施避免堆栈溢出:
  • 不要使用大的自动阵列。
  • 避免过深地调用序列。
  • 仅对于 DB-Access:使用 mi_call 来管理递归调用。

如果无法使用这些措施来避免堆栈溢出,那么可以使用 CREATE FUNCTION 语句的 STACK 修饰符来增加特定例程的堆栈。